:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
/*!
 *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
 *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
 */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:


5 1.5 0 010 10.5V8.25A2.25 2.25 0 012.25 6l4.452.001C4.952 4.748 3.75 2.835 3.75.75A.75.75 0 014.5 0l.235.004C8.228.119 11.501 2.769 11.948 6h.104c.457-3.303 3.868-6 7.448-6l.102.007a.75.75 0 01.648.743c0 2.085-1.201 3.998-2.952 5.251L21.75 6A2.25 2.25 0 0124 8.25v2.25a1.5 1.5 0 01-1.5 1.5v9.75A2.25 2.25 0 0120.25 24zM9 12H3v9.75c0 .414.336.75.75.75H9V12zm4.5 0h-3v10.5h3V12zm7.5 0h-6v10.5h5.25a.75.75 0 00.743-.648L21 21.75V12zM9 7.5H2.25a.75.75 0 00-.75.75v2.25H9v-3zm4.5 0h-3v3h3v-3zm8.25 0H15v3h7.5V8.25a.75.75 0 00-.75-.75zM5.335 1.56l.035.157c.52 2.1 2.66 3.876 5.045 4.222-.45-2.167-2.637-4.023-5.08-4.378zm13.33.002l-.035.004c-2.429.367-4.597 2.217-5.045 4.372 2.443-.354 4.63-2.21 5.08-4.376z" fill-rule="evenodd"></path></symbol><symbol viewBox="0 0 24 24" id="gift-mid" xmlns="http://www.w3.org/2000/svg"><path d="M5.25 21.625a1.875 1.875 0 01-1.875-1.875v-7.138a1.313 1.313 0 01-1.125-1.3l.001-1.727.01-.163A1.875 1.875 0 014.125 7.75H6.92C5.8 6.787 5.063 5.449 5.063 4a.75.75 0 01.75-.75c2.53 0 4.949 1.735 5.625 3.993.675-2.258 3.095-3.993 5.624-3.993a.75.75 0 01.75.75c0 1.449-.737 2.787-1.857 3.75h2.795l.203.011a1.875 1.875 0 011.672 1.864v1.688c0 .66-.488 1.207-1.124 1.299L19.5 19.75c0 1.036-.84 1.875-1.875 1.875zm3.75-9H4.875v7.125c0 .155.094.289.229.346l.07.021.076.008L9 20.124v-7.499zm3.375 0H10.5v7.499h1.875v-7.499zm5.625 0h-4.125v7.499l3.75.001a.375.375 0 00.367-.3L18 19.75v-7.125zM9 9.249l-4.875.001c-.192 0-.352.145-.37.293l-.005.082v1.5H9V9.249zm3.375.001H10.5v1.875h1.875V9.25zm6.352-.001h-4.852v1.876h5.249l.001-1.5a.386.386 0 00-.23-.354l-.063-.015-.105-.007zM6.694 4.844l.007.027c.423 1.332 1.765 2.46 3.292 2.785-.413-1.345-1.762-2.485-3.3-2.812zm9.488.002l-.107.022c-1.493.356


// Save results in order to speed up later calculations
    int size = calculatedVisibleSides.size();
    // Crop saved sides vectors
    if (size >= maxSavedVisibleSides) {
      calculatedVisibleSides.remove(size-1);
      calculatedVisibleSidesSources.remove(size-1);
      calculatedVisibleSidesAngleIntervals.remove(size-1);
      calculatedVisibleSidesLines.remove(size-1);
    }

    calculatedVisibleSides.add(0, visibleLines);
    calculatedVisibleSidesSources.add(0, source);
    calculatedVisibleSidesAngleIntervals.add(0, angleInterval);
    calculatedVisibleSidesLines.add(0, lookThrough);

    return visibleLines;
  }

  /**
   * Calculates and returns the received signal strength (dBm) of a signal sent
   * from the given source position to the given destination position as a
   * random variable. This method uses current parameters such as transmitted
   * power, obstacles, overall system loss etc.
   *
   * @param sourceX
   *          Source position X
   * @param sourceY
   *          Source position Y
   * @param destX
   *          Destination position X
   * @param destY
   *          Destination position Y
   * @return Received signal strength (dBm) random variable. The first value is
   *         the random variable mean, and the second is the variance.
   */
  public double[] getReceivedSignalStrength(TxPair txPair) {
    return getTransmissionData(txPair, TransmissionData.SIGNAL_STRENGTH);
  }

  // TODO Fix better data type support
  private double[] getTransmissionData(TxPair txPair, TransmissionData dataType) {
    Point2D source = txPair.getFrom();
    Point2D dest = txPair.getTo();
    double accumulatedVariance = 0;

    // - Get all ray paths from source to destination -
    RayData originRayData = new RayData(
        RayData.RayType.ORIGIN,
        source,
        null,
        getParameterIntegerValue(Parameter.rt_max_rays),
        getParameterIntegerValue(Parameter.rt_max_refractions),
        getParameterIntegerValue(Parameter.rt_max_reflections),
        getParameterIntegerValue(Parameter.rt_max_diffractions)
    );

    // Check if origin tree is already calculated and saved
    DefaultMutableTreeNode visibleLinesTree = buildVisibleLinesTree(originRayData);

    // Calculate all paths from source to destination, using above calculated tree
    Vector<RayPath> allPaths = getConnectingPaths(source, dest, visibleLinesTree);

    if (logMode) {
      logInfo.append("Signal components:\n");
      Enumeration<RayPath> pathsEnum = allPaths.elements();
      while (pathsEnum.hasMoreElements()) {
        RayPath currentPath = pathsEnum.nextElement();
        logInfo.append("* " + currentPath + "\n");
        for (int i=0; i < currentPath.getSubPathCount(); i++) {
          loggedRays.add(currentPath.getSubPath(i));
        }
      }
    }

    // - Extract length and losses of each path -
    double[] pathLengths = new double[allPaths.size()];
    double[] pathGain = new double[allPaths.size()];
    int bestSignalNr = -1;
    double bestSignalPathLoss = 0;
    for (int i=0; i < allPaths.size(); i++) {
      RayPath currentPath = allPaths.get(i);
      double accumulatedStraightLength = 0;

      for (int j=0; j < currentPath.getSubPathCount(); j++) {
        Line2D subPath = currentPath.getSubPath(j);
        double subPathLength = subPath.getP1().distance(subPath.getP2());
        RayData.RayType subPathStartType = currentPath.getType(j);

        // Type specific losses
        // TODO Type specific losses depends on angles as well!
        if (subPathStartType == RayData.RayType.REFRACTION) {


][CollapsingTopBarScrollBehavior.currentTopBarHeight] add [steps] to itself
 * until it reaches the size of
 * [expandedTopBarMaxHeight][CollapsingTopBarScrollBehavior.expandedTopBarMaxHeight]
 * @param steps How many [Dp]s should the
 * [currentTopBarHeight][CollapsingTopBarScrollBehavior.currentTopBarHeight] add to itself every
 * [delay] until it reaches the size of
 * [expandedTopBarMaxHeight][CollapsingTopBarScrollBehavior.expandedTopBarMaxHeight]
 * @param coroutineScope The [CoroutineScope] on which the calculations will occur
 * @param onFinishedExpanding Called when the
 * [currentTopBarHeight][CollapsingTopBarScrollBehavior.currentTopBarHeight]
 * has reached the value of
 * [expandedTopBarMaxHeight][CollapsingTopBarScrollBehavior.expandedTopBarMaxHeight]
 * */
fun CollapsingTopBarScrollBehavior.expand(
    delay: Long = 10L,
    steps: Dp = 5.dp,
    coroutineScope: CoroutineScope = CoroutineScope(Dispatchers.IO + SupervisorJob()),
    onFinishedExpanding: () -> Unit = {}
) {
    if (!isAlwaysCollapsed) {
        ignorePreScrollDetection = true
        expandJob?.cancel()
        expandJob = coroutineScope.launch {
            val ascendingDistance: IntRange =
                collapsedTopBarHeight.value.toInt()..expandedTopBarMaxHeight.value.toInt()
            for (currentHeight in ascendingDistance) {
                val valueIncreasedTo = currentTopBarHeight + steps
                if (valueIncreasedTo >= expandedTopBarMaxHeight) {
                    heightOffset = expandedTopBarMaxHeight.value
                    currentTopBarHeight = heightOffset.dp
                    ignorePreScrollDetection = false
                    countWhenHeightOffSetIsZero = 3
                    defineCurrentState()
                    onFinishedExpanding()
                }
                if (valueIncreasedTo < expandedTopBarMaxHeight) {
                    currentTopBarHeight = valueIncreasedTo
                    defineCurrentState()
                    delay(delay)
                }
            }
        }
    }
}plugins {
    id("com.android.application")
    id("kotlin-android")
    // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
    id("dev.flutter.flutter-gradle-plugin")
}

android {
    namespace = "com.example.lzf_music"
    compileSdk = flutter.compileSdkVersion
    ndkVersion = flutter.ndkVersion

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_11.toString()
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId = "com.example.lzf_music"
        // You can update the following values to match your application needs.
        // For more information, see: https://flutter.dev/to/review-gradle-config.
        minSdk = flutter.minSdkVersion
        targetSdk = flutter.targetSdkVersion
        versionCode = flutter.versionCode
        versionName = flutter.versionName
    }

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig = signingConfigs.getByName("debug")
        }
    }
}

flutter {
    source = "../.."
}
plugins {
  groovy
  id("com.github.ben-manes.versions")
}

java {
  toolchain {
    languageVersion.se


08 */	beq lbl_8017DB38
/* 8017DB34 00179794  90 7A 00 00 */	stw r3, 0(r26)
lbl_8017DB38:
/* 8017DB38 00179798  2C 1A 00 00 */	cmpwi r26, 0
/* 8017DB3C 0017979C  41 82 00 0C */	beq lbl_8017DB48
/* 8017DB40 001797A0  7C 1B EA 14 */	add r0, r27, r29
/* 8017DB44 001797A4  98 1A 00 70 */	stb r0, 0x70(r26)
lbl_8017DB48:
/* 8017DB48 001797A8  7F 43 D3 78 */	mr r3, r26
/* 8017DB4C 001797AC  4B FF F5 CD */	bl func_8017D118
/* 8017DB50 001797B0  7C 7A 1B 78 */	mr r26, r3
/* 8017DB54 001797B4  7C 7F F0 2E */	lwzx r3, r31, r30
/* 8017DB58 001797B8  57 64 06 3E */	clrlwi r4, r27, 0x18
/* 8017DB5C 001797BC  48 00 00 41 */	bl func_8017DB9C
/* 8017DB60 001797C0  7C 64 1B 78 */	mr r4, r3
/* 8017DB64 001797C4  7F 43 D3 78 */	mr r3, r26
/* 8017DB68 001797C8  48 04 73 35 */	bl func_801C4E9C
/* 8017DB6C 001797CC  3B 7B 00 01 */	addi r27, r27, 1
/* 8017DB70 001797D0  28 1B 00 06 */	cmplwi r27, 6
/* 8017DB74 001797D4  41 80 FF 9C */	blt lbl_8017DB10
/* 8017DB78 001797D8  3B 9C 00 01 */	addi r28, r28, 1
/* 8017DB7C 001797DC  28 1C 00 04 */	cmplwi r28, 4
/* 8017DB80 001797E0  41 80 FF 80 */	blt lbl_8017DB00
/* 8017DB84 001797E4  39 61 00 20 */	addi r11, r1, 0x20
/* 8017DB88 001797E8  48 04 95 E9 */	bl _restgpr_26
/* 8017DB8C 001797EC  80 01 00 24 */	lwz r0, 0x24(r1)
/* 8017DB90 001797F0  7C 08 03 A6 */	mtlr r0
/* 8017DB94 001797F4  38 21 00 20 */	addi r1, r1, 0x20
/* 8017DB98 001797F8  4E 80 00 20 */	blr

.global func_8017DB9C
func_8017DB9C:
/* 8017DB9C 001797FC  2C 03 00 00 */	cmpwi r3, 0
/* 8017DBA0 00179800  40 82 00 0C */	bne lbl_8017DBAC
/* 8017DBA4 00179804  38 60 00 00 */	li r3, 0
/* 8017DBA8 00179808  4E 80 00 20 */	blr
lbl_8017DBAC:
/* 8017DBAC 0017980C  1C 04 00 6C */	mulli r0, r4, 0x6c
/* 8017DBB0 00179810  7C 63 02 14 */	add r3, r3, r0
/* 8017DBB4 00179814  38 63 00 04 */	addi r3, r3, 4
/* 8017DBB8 00179818  4E 80 00 20 */	blr

.global func_8017DBBC
func_8017DBBC:
/* 8017DB


 na mga kanta!",
    "removeFromPlaylist": "Alisin sa playlist",
    "rename": "Palitan ng Pangalan",
    "renamePlaylist": "Palitan ng Pangalan ang Playlist",
    "startRadio": "Magsimula ng radyo",
    "openIn": "Buksan sa",
    "cancel": "Kanselahin",
    "addToPlaylist": "Idagdag sa playlist",
    "items": "Mga Item",
    "emptyPlaylist": "Walang laman ang playlist!",
    "playlists": "Mga Playlist",
    "settings": "Mga Setting",
    "libSongs": "Imbakan ng mga Kanta",
    "libPlaylists": "Imbakan ng mga Playlist",
    "libAlbums": "Imbakan ng mga Album",
    "libArtists": "Imbakan ng mga Artist",
    "retry": "Subukang Muli!",
    "favorites": "Mga Paborito",
    "CreateNewPlaylist": "Gumawa ng panibagong playlist",
    "createnAdd": "Gumawa at Magdagdag",
    "viewArtist": "Tignan ang Artist",
    "shareSong": "Ibahagi ang kanta",
    "removeFromQueue": "Alisin sa pila",
    "singles": "Mga Single",
    "featuredplaylists": "Mga Tampok na Playlist",
    "removeMultiple": "Mag-alis ng mga kanta",
    "restartApp": "Buksan Muli ang App",
    "home": "Home",
    "library": "Mga Library"
}
,"fj" : {}
,"fr" : {
    "libPlaylists": "Playlists de la Bibliothèque",
    "networkError1": "Oups erreur réseau !",
    "noOfflineSong": "Pas de titre hors ligne !",
    "favorites": "Favoris",
    "cachedOrOffline": "En Cache / Hors Ligne",
    "emptyPlaylist": "Playlist vide !",
    "enqueueAll": "Mettre tout en file d'attente",
    "renamePlaylist": "Renommer la playlist",
    "removePlaylist": "Supprimer la playlist",
    "CreateNewPlaylist": "Créer une nouvelle playlist",
    "cancel": "Annuler",
    "create": "Créer",
    "createnAdd": "Créer et Ajouter",
    "noBookmarks": "Aucun élément !",
    "startRadio": "Démarrer la radio",
    "playNext": "Lecture suivante",
    "removeFromQueue": "Retirer de la file d'attente",
    "removeFromCache": "Retirer du cache",
    "themeMode": "Mode du thème",
    "dynamic": "Dynamique",
    "systemDefault": "Système par défaut",
    "dark": "Sombre",
    "light": "Clair",
    "setDiscoverContent": "Définir le contenu",
    "quickPics": "Sélection rapide",
    "discover": "Découvrir",
    "trending": "Tendance",
    "topMusicVid": "Palmarès des vidéoclips",
    "basedOnLast": "Basée sur la dernière interaction",
    "cacheSongsDes": "Mettre en cache des titres pendant la lecture pour une lecture ultérieure / hors ligne. Cela nécessitera de l'espace supplémentaire sur votre appareil",
    "skipSilence": "Ignorer le silence",
    "low": "Basse",
    "equalizer": "Égaliseur",
    "ignoreBatOptDes": "Si vous rencontrez des problèmes de notification ou si la lecture est arrêtée par l'optim


don from interpreting new chat..
    (function () end):dispatch(pause, cmd, unpause)(e, args);
end);

--[[
* event: text_in
* desc : Event called when the addon is processing incoming text.
--]]
ashita.events.register('text_in', 'text_in_cb', function (e)
    if (onevent.paused) then return; end

    onevent.events:ieach(function (v)
        if (e.message_modified:contains(v[1])) then
            AshitaCore:GetChatManager():QueueCommand(1, v[2]);
        end
    end);
end);


n the
  event.
  + fixed a css glitch
- [misp-galaxy] updated to the latest version. [Alexandre Dulaunoy]
- [DistributionGraph] incorrect number in the sg progressbar tooltip.
  [Sami Mokaddem]

  Set the correct number of involved sharing instead of the sum of sharing
  group in the sg progressbar tooltip
- Fixed a bug that prevented servers from being added. [iglocska]
- [DistributionGraph] sharing group search and uniqueness of results.
  [Sami Mokaddem]

  fix a bug where filtering per sharing group was not inlcuding inherit
  attributes.
  Enforce uniqueness of involved entities.
- Fixed distribution level swapping when filtering from the distribution
  chg: moved styling into css new: Loading gif when building the
  distribution graph. [Sami Mokaddem]
- Avoid redrawin distribution graph when closin its popover + reset pb
  ticks offset at each draw. [Sami Mokaddem]
- Replaced hardcoded eventID by the real event id. [Sami Mokaddem]
- Support of filtering for distribution=0 (empty(0) is true ini php).
  Also, only consider attr and obj_attr (ignoring object as they only
  carry meta-data) [Sami Mokaddem]
- Honour `MISP.completely_disable_correlation` on attribute/event
  save/delete action. [Eugenio Paolantonio]
- Typo. [chrisr3d]
- Fixed typo of a string function. [chrisr3d]
- Attribute values that are too long for mysql text fields don't
  generate warnings and just truncate, fixes #3196. [iglocska]

  added validation error
- Removing galaxy filters in the galaxy view would redirect to an
  invalid url, fixes #3201. [iglocska]
- Allow "json" not to be set when adding a server via the API.
  [iglocska]
- Fixed /servers/add via REST API not working, fixes #3202. [iglocska]

  - corrected list of parameters
  - added sane defaults so that only the minimum list of fields is actually required
  - fixed a bunch of stuff that was just plain broken with this API
- Low timeout added for module introspection to fix performance
  bottlenecks. [iglocska]
- Testing if references before looping on it. [chrisr3d]
- Inverted 2 type values of a DNS Record. [chrisr3d]
- Fixed events from MISP recognition. [chrisr3d]
- Fixed copy pasta fail. [Andras Iklody]

  As reported by @truckydev
- Fixed path / filename split case. [chrisr3d]
- Fixed InformationSource references in STIX incident object. [chrisr3d]
- Source Format -> Input Source (C/P mistake) [Raphaël Vinot]
- Function object typo. [chrisr3d]
- Fixed library import. [chrisr3d]
- Don't correlate attribute to feeds if the correlations are disabled on
  the attribute. [iglocska]
- Fixed a typo in the side menu rework. [iglocska]
- Allow filename as an alternative for parsed domains/hostnames.
  [iglocska]
- PyMISP version 2.4.90. [Alexandre Dulaunoy]
- Added some sanitisation to the new view. [iglocska]
- Fixed namespaces (causing bugs if not set) [chrisr3d]
- Fixed external ids field type. [chrisr3d]
- Object templates updated to the latest version. [Alexandre Dulaunoy]
- Fixed weird error message if an ajax query goes wrong. [iglocska]
- Hide buttons to create proposals for read only users, fixes #3187.
  [iglocska]
- Added event enrichment to the ACL. [iglocska]
- Editing an attribute was not setting the distribution level to the
  previous value. [Sami Mokaddem]
- Changed "xhtml:body" into "xhtml:div", to avoid creating a body DOM
  which cause listener on the original body to bug. Incremented js
  number and check if request is ajax or not in ObjectController. [Sami
  Mokaddem]
- MISP warning-lists updated to latest version. [Alexandre Dulaunoy]
- Removed


    #[serde(deserialize_with = "adlu_base::base64_encoded_json::deserialize")]
    pub values: CustomerValues,
}

#[derive(Default, Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AdobeSignatures {
    pub signature1: String,
    pub signature2: String,
}

#[derive(Default, Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AdobeValues {
    pub license_expiry_timestamp: String,
    pub enigma_data: String,
    pub grace_time: String,
    pub profile_status: String,
    pub effective_end_timestamp: String,
    pub license_expiry_warning_start_timestamp: String,
    pub ngl_lib_refresh_interval: String,
    pub license_id: String,
    pub licensed_features: String,
    pub app_refresh_interval: String,
    pub app_entitlement_status: String,
}

#[derive(Default, Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CustomerSignatures {
    pub customer_signature2: String,
    pub customer_signature1: String,
}

#[derive(Default, Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CustomerValues {
    pub npd_id: String,
    pub asnp_id: String,
    pub creation_timestamp: u64,
    pub cache_lifetime: u64,
    pub response_type: String,
    pub cache_expiry_warning_control: CacheExpiryWarningControl,
    pub challenge_codes: Vec<String>,
}

#[derive(Default, Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CacheExpiryWarningControl {
    pub warning_start_timestamp: u64,
    pub warning_interval: u64,
}

#[cfg(test)]
mod tests {
    use super::OperatingConfig;
    use super::PreconditioningData;
    use legacy::types::{FileInfo, OperatingConfig as ManualOperatingConfig};

    extern crate serde_json; // 1.0.69

    #[test]
    fn test_online_oc() {
        // first parse the actual operating config and make sure it matches the hand parse
        let path = "../rsrc/OperatingConfigs/UGhvdG9zaG9wMXt9MjAxODA3MjAwNA-ODU0YjU5OGQtOTE1Ni00NDZiLWFlZDYtMGQ1ZGM2ZmVhZDBi-80.operatingconfig";
        let info = FileInfo::from_path(path).expect("Can't find online test data");
        let json = std::fs::read_to_string(&info.pathname).expect("Can't read online data file");
        let oc1: OperatingConfig = serde_json::from_str(&json).expect("Can't parse online data");
        let oc2 =
            ManualOperatingConfig::from_license_file(&info).expect("Can't manually extract config");
        assert_eq!(oc1.payload.npd_id, oc2.npd_id, "npdIds do not match");
        assert_eq!(oc1.payload.ngl_app_id, oc2.app_id, "appIds do not match");
        // now serialize the OC and make sure it matches the hand-generated reference decode
        let decode = serde_json::to_string(&oc1).unwrap();
        let ref_path = "../rsrc/OperatingConfigs/ps-online-proxy.operatingconfig";
        let ref_decode = std::fs::read_to_string(ref_path).expect("Can't read reference JSON");
        assert_eq!(decode, ref_decode);
    }

    #[test]
    fn test_isolated_oc() {
        let path = "../rsrc/


Currently, `SAFE_MATH` annotations are only used for addition/subtraction before checking for overflow.
                // These operations must be done on MathInt.

                val x = mkFreshMathIntVar()
                val y = mkFreshMathIntVar()
                val z = mkFreshMathIntVar()

                listOf(
                    when (inst.v) {
                        is Value.Reg -> {
                            promoteToMathInt(exprBuilder.mkVar(inst.v).asSym(), y)
                        }
                        is Value.Imm -> {
                            // We cannot use `mkConst` because if the immediate value is a negative one it will sign extended to 256 bits,
                            // and this is incorrect using MathInt.
                            assign(y, TACSymbol.Const(inst.v.v.toLong().toBigInteger(), Tag.Int).asSym())
                        }
                    },
                    promoteToMathInt(op1.asSym(), x),
                    assign(z, exprBuilder.mkBinExpr(inst.op, x.asSym(), y.asSym(), useMathInt = true)),
                    narrowFromMathInt(z.asSym(), op1)
                )
            } else {
                val op2 = exprBuilder.mkExprSym(inst.v, useTwosComplement = true)
                listOf(assign(op1, exprBuilder.mkBinExpr(inst.op, op1.asSym(), op2, useMathInt = false)))
            }
        }
    }

    private fun translateUn(inst: SbfInstruction.Un): List<TACCmd.Simple> {
        if (inst.op == UnOp.NEG) {
            if (!inst.is64) {
              throw TACTranslationError("TAC encoding of 32-bit $inst not supported")
            }
            val lhs = exprBuilder.mkVar(inst.dst)
            val rhs = exprBuilder.mkUnExpr(UnOp.NEG, inst.dst)
            return listOf(assign(lhs, rhs))
        } else {
            // we don't support UnOp.BE16/32/64, UnOp.LE16/32/64
            throw TACTranslationError("Unsupported $inst")
        }
    }

    private fun translateSelect(inst: SbfInstruction.Select): List<TACCmd.Simple> {
        val newCmds = mutableListOf<TACCmd.Simple>()

        val overflowCond = inst.metaData.getVal(SbfMeta.PROMOTED_OVERFLOW_CHECK)
        val (tacOverflowCond, tacOverflowVar) = if (SolanaConfig.TACPromoteOverflow.get() && overflowCond != null) {
            // See comments from translateAssume
            newCmds.add(Debug.externalCall("overflow_check"))
            val overflowCondTac = translateCond(overflowCond, bitwidth = 64)
            overflowCondTac to overflowCondTac.getRhs().filterIsInstance<TACSymbol.Var>().singleOrNull()
        }  else {
            translateCond(inst.cond) to null
        }
        newCmds.add(tacOverflowCond)
        newCmds.add(assign(exprBuilder.mkVar(inst.dst), TACExpr.TernaryExp.Ite(TACExpr.Sym.Var(tacOverflowCond.lhs),
                                                                      exprBuilder.mkExprSym(inst.trueVal),
                                                                      exprBuilder.mkExprSym(inst.falseVal) )))

        // This is another 64 vs 256-bit arithmetic fix. See comments from `translateAssume`
        if (tacOverflowVar != null) {
            newCmds.add(assign(tacOverflowVar, exprBuilder.mask64(tacOverflowVar.asSym())))
        }

        return newCmds
    }

    private fun translateHavoc(inst: SbfInstruction.Havoc): List<TACCmd.Simple> {
        return listOf(TACCmd.Simple.AssigningCmd.AssignHavocCmd(exprBuilder.mkVar(inst.dst)))
    }

    private fun translateExit(): List<TACCmd.Simple> {
        // In SBF, the exit command does not have parameter


protobuf:"varint,3,opt,name=slot_id,json=slotId" json:"slot_id,omitempty"`
	ItemId   *uint64 `protobuf:"varint,4,opt,name=item_id,json=itemId" json:"item_id,omitempty"`
}

func (x *CMsgSetPresetItemPosition) Reset() {
	*x = CMsgSetPresetItemPosition{}
	if protoimpl.UnsafeEnabled {
		mi := &file_base_gcmessages_proto_msgTypes[42]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *CMsgSetPresetItemPosition) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CMsgSetPresetItemPosition) ProtoMessage() {}

func (x *CMsgSetPresetItemPosition) ProtoReflect() protoreflect.Message {
	mi := &file_base_gcmessages_proto_msgTypes[42]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CMsgSetPresetItemPosition.ProtoReflect.Descriptor instead.
func (*CMsgSetPresetItemPosition) Descriptor() ([]byte, []int) {
	return file_base_gcmessages_proto_rawDescGZIP(), []int{42}
}

func (x *CMsgSetPresetItemPosition) GetClassId() uint32 {
	if x != nil && x.ClassId != nil {
		return *x.ClassId
	}
	return 0
}

func (x *CMsgSetPresetItemPosition) GetPresetId() uint32 {
	if x != nil && x.PresetId != nil {
		return *x.PresetId
	}
	return 0
}

func (x *CMsgSetPresetItemPosition) GetSlotId() uint32 {
	if x != nil && x.SlotId != nil {
		return *x.SlotId
	}
	return 0
}

func (x *CMsgSetPresetItemPosition) GetItemId() uint64 {
	if x != nil && x.ItemId != nil {
		return *x.ItemId
	}
	return 0
}

type CMsgSetItemPositions struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	ItemPositions []*CMsgSetItemPositions_ItemPosition `protobuf:"bytes,1,rep,name=item_positions,json=itemPositions" json:"item_positions,omitempty"`
}

func (x *CMsgSetItemPositions) Reset() {
	*x = CMsgSetItemPositions{}
	if protoimpl.UnsafeEnabled {
		mi := &file_base_gcmessages_proto_msgTypes[43]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *CMsgSetItemPositions) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*CMsgSetItemPositions) ProtoMessage() {}

func (x *CMsgSetItemPositions) ProtoReflect() protoreflect.Message {
	mi := &file_base_gcmessages_proto_msgTypes[43]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use CMsgSetItemPositions.ProtoReflect.Descriptor instead.
func (*CMsgSetI


te will be 2025/12/31.
        """,
    )
    force_month_yearly = fields.Selection(
        [
            ("1", "January"),
            ("2", "February"),
            ("3", "March"),
            ("4", "April"),
            ("5", "May"),
            ("6", "June"),
            ("7", "July"),
            ("8", "August"),
            ("9", "September"),
            ("10", "October"),
            ("11", "November"),
            ("12", "December"),
        ],
        "Force Month",
    )
    force_month_quarterly = fields.Selection(
        [
            ("1", "First month"),
            ("2", "Second month"),
            ("3", "Third month"),
        ],
        "Force Month (quarterly)",
        help="Force the month to be used inside the quarter",
    )
    force_month_semesterly = fields.Selection(
        [
            ("1", "First month"),
            ("2", "Second month"),
            ("3", "Third month"),
            ("4", "Fourth month"),
            ("5", "Fifth month"),
            ("6", "Sixth month"),
        ],
        "Force Month (semesterly)",
        help="Force the month to be used inside the semester",
    )

    def write(self, vals):
        if "is_contract" in vals and vals["is_contract"] is False:
            for company in self.env["res.company"].search([]):
                self.with_company(company).write(
                    {"property_contract_template_id": False}
                )
        return super().write(vals)

    @api.constrains("is_contract", "type")
    def _check_contract_product_type(self):
        """
        Contract product should be service type
        """
        if any([product.is_contract and product.type != "service" for product in self]):
            raise ValidationError(_("Contract product should be service type"))


default style such as {{value|sans}}, {{value|serif}} or {{value|mono}}, a family such as {{value|Arial,Helvetica,sans}}, or a name with a style such as {{value|Arial:Bold}}. If the given font is not found on the system, a default font is used instead.

-    **Font Size|Length**: specifies the size of the letters. The text can be invisible in the [3D view](3D_view.md) if this value is very small.

-    **Override|String**: specifies a custom text to display instead of the actual measurement. Use the string {{value|$dim}} inside the text to include the measurement.

-    **Text Color|Color**: specifies the color of the text. (v0.21)

-    **Text Position|VectorDistance**: specifies the position of the text in absolute coordinates. {{Value|[0, 0, 0]}} will display the text in its default position near the dimension line or arc.

-    **Text Spacing|Length**: specifies the space between the text and the dimension line or arc.

{{TitleProperty|Units}}

-    **Decimals|Integer**: specifies the number of decimal places to display for the measurement.

-    **Show Unit|Bool**: specifies whether to display the unit next to the numerical value of the measurement. Not used for angular dimensions.

-    **Unit Override|String**: specifies the unit in which to express the measurement, for example, {{value|km}}, {{value|m}}, {{value|cm}}, {{value|mm}}, {{value|mi}}, {{value|ft}}, {{value|in}} or {{value|arch}} for arch units. Leave this blank to use the default unit. Not used for angular dimensions.

## Scripting

See also: [Autogenerated API documentation](https://freecad.github.io/SourceDoc/) and [FreeCAD Scripting Basics](FreeCAD_Scripting_Basics.md).

To create a Draft Dimension use the `make_dimension` method ((v0.19) ) of the Draft module. This method replaces the deprecated `makeDimension` method.

```python
dimension = make_dimension(p1, p2, p3=None, p4=None)```

There are various ways to invoke this method, depending on the arguments passed to it:

```python
dimension = make_dimension(p1, p2, p3=None)
dimension = make_dimension(object, i1, i2, p4=None)
dimension = make_dimension(object, i1, mode, p4=None)
```

-   Creates a linear `dimension` by measuring the distance between points `p1` and `p2`.
-   Creates a linear `dimension` linked to `object`, measuring the distance between its vertices indexed `i1` and `i2`.
-   Creates a circular `dimension` linked to `object`, with `i1` being the index of the curved edge to measure, and `mode` being either `"radius"` or `"diameter"` to specify the type of dimension.
    -
        `p3`

        in the first call, and `p4` in the other two, specify an optional point through which the dimension line should go.

    -   All points are defined by their `FreeCAD.Vector`.

To create an angular dimension use the following method:

```python
dimension = make_angular_dimension(center, angles, p3, normal=None)
dimension = make_angular_dimension(center, [angle1, angle2], p3, normal=None)
```

-   Creates an angular `dimension` from the given `center` point, the `angles` list with two elements, and the point `p3` through which the arc should go.
    -   If `angle1 > angle2`, the displayed angle is the difference `angle1 - angle2`; otherwise, the explementary angle is


%o5, %l3
casxa [%l7] %asi, %l6, %l3
! move %l3(lower) -> %o2(lower)
srlx %o2, 32, %o2
sllx %o2, 32, %o2
srl %l3, 0, %l7
or %l7, %o2, %o2
! move %l3(upper) -> %o3(upper)
or %l3, %g0, %o3
add  %l4, 1, %l4

P1404: !_MEMBAR (Int)
membar #StoreLoad

P1405: !_REPLACEMENT [0] (Int)
sethi %hi(0x0), %l6
or %l6, %lo(0x0),  %l6
sethi %hi(0x10000), %l7
or %l7, %lo(0x10000),  %l7
add %i3, %l6, %l6
add %l6, %l7, %l6
ld [%l6], %o5
st %o5, [%l6]
add %l6, %l7, %l6
ld [%l6], %o5
st %o5, [%l6]
add %l6, %l7, %l6
ld [%l6], %o5
st %o5, [%l6]
add %l6, %l7, %l6
ld [%l6], %o5
st %o5, [%l6]

P1406: !_LD [1] (FP)
ld [%i0 + 4], %f14
! 1 addresses covered

P1407: !_ST [13] (maybe <- 0x4000007b) (FP)
! 0 th moved, current_fp_src=20
fmovs  %f16, %f20
fadds  %f16, %f17, %f16
st   %f20, [%i3 + 64 ]

P1408: !_REPLACEMENT [12] (Int)
sethi %hi(0x0), %o5
or %o5, %lo(0x0),  %o5
sethi %hi(0x10000), %l3
or %l3, %lo(0x10000),  %l3
add %i3, %o5, %o5
add %o5, %l3, %o5
ld [%o5], %l6
st %l6, [%o5]
add %o5, %l3, %o5
ld [%o5], %l6
st %l6, [%o5]
add %o5, %l3, %o5
ld [%o5], %l6
st %l6, [%o5]
add %o5, %l3, %o5
ld [%o5], %l6
st %l6, [%o5]

P1409: !_PREFETCH [13] (Int) (Branch target of P1825)
prefetch [%i3 + 64], 1
ba P1410
nop

TARGET1825:
ba RET1825
nop

P1410: !_DWST [10] (maybe <- 0x4000007c) (FP)
! 0 th moved, current_fp_src=20
fmovs  %f16, %f20
fadds  %f16, %f17, %f16
std %f20, [%i2 + 32]

P1411: !_REPLACEMENT [14] (Int)
sethi %hi(0x80), %l6
or %l6, %lo(0x80),  %l6
sethi %hi(0x10000), %l7
or %l7, %lo(0x10000),  %l7
add %i3, %l6, %l6
add %l6, %l7, %l6
ld [%l6], %o5
st %o5, [%l6]
add %l6, %l7, %l6
ld [%l6], %o5
st %o5, [%l6]
add %l6,


using Content.Shared.Bed.Cryostorage;
using JetBrains.Annotations;
using Robust.Client.UserInterface;

namespace Content.Client.Bed.Cryostorage;

[UsedImplicitly]
public sealed class CryostorageBoundUserInterface : BoundUserInterface
{
    [ViewVariables]
    private CryostorageMenu? _menu;

    public CryostorageBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
    {
    }

    protected override void Open()
    {
        base.Open();

        _menu = this.CreateWindow<CryostorageMenu>();

        _menu.SlotRemoveButtonPressed += (ent, slot) =>
        {
            Send


 output);

    return S_OK;
}

HRESULT MIProtocol::VariablesHandle::CreateVar(std::shared_ptr<IDebugger> &sharedDebugger, ThreadId threadId, FrameLevel level,
                                               int evalFlags, const std::string &varobjName, const std::string &expression, std::string &output)
{
    HRESULT Status;

    FrameId frameId(threadId, level);
    Variable variable(evalFlags);
    IfFailRet(sharedDebugger->Evaluate(frameId, expression, variable, output));

    int print_values = 1;
    return PrintNewVar(varobjName, variable, threadId, level, print_values, output);
}

HRESULT MIProtocol::VariablesHandle::DeleteVar(const std::string &varobjName)
{
    // Note:
    // * IDE could delete var objects that was created by `var-create`, when we already cleared m_vars.
    //       This happens because IDE will receive continue/step command status after we already cleared m_vars.
    // * IDE could ignore var objects created by `var-list-children`. In theory, m_vars should
    //       have tree-like structure and delete all related var objects in case root was deleted.
    // * IDE must not request old var object data after receive successful return code on continue/step command.
    //       Debugger can't provide any data by old var objects in this case, since old data have inconsistent state.
    //       This is the reason why we don't hold old data. IDE must create new var objects for each stop point.
    // * IDE should not care about `var-delete` return status, but just in case return S_OK.
    m_vars.erase(varobjName);
    return S_OK;
}

HRESULT MIProtocol::VariablesHandle::FindVar(const std::string &varobjName, MIVariable &variable)
{
    auto it = m_vars.find(varobjName);
    if (it == m_vars.end())
        return E_FAIL;

    variable = it->second;

    return S_OK;
}

void MIProtocol::Cleanup()
{
    m_variablesHandle.Cleanup(); // Important, must be sync with ManagedDebugger m_sharedVariables->Clear()
    m_breakpointsHandle.Cleanup();
}

void MIProtocol::VariablesHandle::Cleanup()
{
    m_vars.clear();
}

HRESULT MIProtocol::VariablesHandle::PrintChildren(std::vector<Variable> &children, ThreadId threadId, FrameLevel level,
                                                   int print_values, bool has_more, std::string &output)
{
    HRESULT Status;
    std::ostringstream ss;
    ss << "numchild=\"" << children.size() << "\"";

    if (children.empty())
    {
        output = ss.str();
        return S_OK;
    }
    ss << ",children=[";

    const char *sep = "";
    for (auto &child : children)
    {
        std::string varout;
        std::string minus("-");
        IfFailRet(PrintNewVar(minus, child, threadId, level, print_values, varout));

        ss << sep;
        sep = ",";
        ss << "child={" << varout << "}";
    }

    ss << "]";
    ss << ",has_more=\"" << (has_more ? 1 : 0) << "\"";
    output = ss.str();

    return S_OK;
}

HRESULT MIProtocol::VariablesHandle::ListChildren(std::shared_ptr<IDebugger> &sharedDebugger, int childStart, int childEnd,
                                                  const MIVariable &miVariable, int print_values, std::string &output)
{
    HRESULT Status;
    std::vector<Variable> variables;

    bool has_more = false;

    if (miVariable.variable.variablesReference > 0)
    {
        IfFailRet(sharedDebugger->GetVariables(miVariable.variable.variablesReference, VariablesNamed, childStart, childEnd - childStart, variables));
        has_more =


\x01\x00\x06\x29\x03\
\x00\x00\x01\x80\xc1\xef\x7f\x20\
\x00\x00\x27\xb2\x00\x00\x00\x00\x00\x01\x00\x07\x68\xb8\
\x00\x00\x01\x80\xc1\xef\x7f\x20\
\x00\x00\x0f\x48\x00\x00\x00\x00\x00\x01\x00\x03\x22\xd9\
\x00\x00\x01\x80\xc1\xef\x7f\x20\
\x00\x00\x1e\x6e\x00\x00\x00\x00\x00\x01\x00\x05\xbf\xbf\
\x00\x00\x01\x80\xc1\xef\x7f\x20\
"

qt_version = [int(v) for v in QtCore.qVersion().split('.')]
if qt_version < [5, 8, 0]:
    rcc_version = 1
    qt_resource_struct = qt_resource_struct_v1
else:
    rcc_version = 2
    qt_resource_struct = qt_resource_struct_v2

def qInitResources():
    QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)

def qCleanupResources():
    QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)

qInitResources()


_range.split_once("..").unwrap();

    let (x_l, x_r) = (
        x_l_str.parse::<isize>().unwrap(),
        x_r_str.parse::<isize>().unwrap(),
    );

    let (y_l, y_r) = (
        y_l_str.parse::<isize>().unwrap(),
        y_r_str.parse::<isize>().unwrap(),
    );

    [[x_l, x_r], [y_l, y_r]]
}

pub fn part_1(input: &Input) -> usize {
    let best_y = find_max_y(input);

    (best_y * (best_y + 1)) / 2
}

pub fn part_2(input: &Input) -> usize {
    // min x when x=0 on target boundary
    // => x(x+1)/2 = min x
    let min_x = (((1.0 + (8.0 * input[0][0] as f64)).sqrt() - 1.0) / 2.0).ceil() as isize;

    let max_y = find_max_y(input) as isize;

    let valid_xs = (min_x..=input[0][1])
        .filter(|x| can_x_achieve_range(input, x))
        .collect::<Vec<isize>>();

    let valid_ys = (input[1][0]..=max_y)
        .filter(|y| can_y_achieve_range(input, y))
        .collect::<Vec<isize>>();

    valid_xs
        .iter()
        .flat_map(|x| std::iter::repeat(x).zip(&valid_ys))
        .filter(|&(x, y)| {
            let (mut v_x, mut v_y) = (*x, *y);
            let (mut s_x, mut s_y) = (0, 0);

            loop {
                s_x += v_x;
                s_y += v_y;
                if (input[0][0]..=input[0][1]).contains(&s_x)
                    && (input[1][0]..=input[1][1]).contains(&s_y)
                {
                    return true;
                }
                if s_x.gt(&input[0][1]) || s_y.lt(&input[1][0]) {
                    return false;
                }
                v_x -= v_x.signum();
                v_y -= 1;
            }
        })
        .count()
}

fn find_max_y(input: &Input) -> usize {
    for y in (0..-input[1][0]).rev() {
        let mut v_y = -(y + 1);
        let mut y_sum = 0;
        while y_sum.ge(&input[1][0]) {
            y_sum += v_y;
            v_y -= 1;
            if (input[1][0]..=input[1][1]).contains(&y_sum) {
                return y as usize;
            }
        }
    }
    0
}

fn can_x_achieve_range(input: &Input, x: &isize) -> bool {
    let mut v_x = *x;
    let mut s_x = 0;
    loop {
        s_x += v_x;
        if (input[0][0]..=input[0][1]).contains(&s_x) {
            return true;
        }
        if v_x == 0 || s_x.gt(&input[0][1]) {
            return false;
        }
        v_x -= v_x.signum();
    }
}

fn can_y_achieve_range(input: &Input, y: &isize) -> bool {
    let mut v_y = *y;
    let mut s_y


pPessoa, br.gov.jfrj.siga.dp.DpLotacao, br.gov.jfrj.siga.ex.ExTipoDocumento, br.gov.jfrj.siga.ex.ExFormaDocumento, br.gov.jfrj.siga.ex.ExModelo, br.gov.jfrj.siga.ex.ExClassificacao, br.gov.jfrj.siga.ex.ExNivelAcesso, java.lang.Long)" alt=""><area shape="rect" coords="-1172,703,-814,719" href="#podePorConfiguracao(br.gov.jfrj.siga.dp.DpPessoa, br.gov.jfrj.siga.dp.DpLotacao, long)" alt=""><area shape="rect" coords="-1172,719,-784,736" href="#podePorConfiguracao(br.gov.jfrj.siga.dp.DpPessoa, br.gov.jfrj.siga.dp.DpLotacao, long, long)" alt=""><area shape="rect" coords="-1172,736,-880,753" href="#podePorConfiguracao(br.gov.jfrj.siga.dp.DpPessoa, long)" alt=""><area shape="rect" coords="-1172,753,-886,769" href="#podePorConfiguracao(br.gov.jfrj.siga.ex.ExModelo, long)" alt=""><area shape="rect" coords="-1172,769,-856,786" href="#podePorConfiguracao(br.gov.jfrj.siga.ex.ExModelo, long, long)" alt=""><area shape="rect" coords="-1172,786,-605,803" href="#podePorConfiguracao(br.gov.jfrj.siga.ex.ExTipoFormaDoc, br.gov.jfrj.siga.ex.ExPapel, br.gov.jfrj.siga.dp.DpLotacao, br.gov.jfrj.siga.ex.ExTipoMovimentacao, long)" alt=""><area shape="rect" coords="-1172,803,-606,819" href="#podePorConfiguracao(br.gov.jfrj.siga.ex.ExTipoFormaDoc, br.gov.jfrj.siga.ex.ExPapel, br.gov.jfrj.siga.dp.DpPessoa, br.gov.jfrj.siga.ex.ExTipoMovimentacao, long)" alt=""><area shape="rect" coords="-1172,819,-671,836" href="#podePorConfiguracao(br.gov.jfrj.siga.ex.ExTipoFormaDoc, br.gov.jfrj.siga.ex.ExPapel, br.gov.jfrj.siga.ex.ExTipoMovimentacao, long)" alt=""><area shape="rect" coords="-1180,111,-1064,129" href="package-summary.html" alt=""><area shape="rect" coords="411,205,577,229" href="../../../../../../br/gov/jfrj/siga/cp/CpSituacaoConfiguracao.html" alt=""><area shape="rect" coords="410,171,483,195" href="../../../../../../br/gov/jfrj/siga/cp/CpServico.html" alt=""><area shape="rect" coords="410,138,520,161" href="../../../../../../br/gov/jfrj/siga/cp/CpConfiguracao.html" alt=""><area shape="rect" coords="401,111,505,129" href="../../../../../../br/gov/jfrj/siga/cp/package-summary.html" alt=""><area shape="rect" coords="410,430,480,454" href="../../../../../../br/gov/jfrj/siga/dp/DpPessoa.html" alt=""><area shape="rect" coords="410,396,486,420" href="../../../../../../br/gov/jfrj/siga/dp/DpLotacao.html" alt=""><area shape="rect" coords="411,362,547,386" href="../../../../../../br/gov/jfrj/siga/dp/DpFuncaoConfianca.html" alt="">


 process_else.call(r, next_2.take().unwrap());
    });
  }
}

impl<S, P1, P2, PV, SV, E> ProcessMut for PresentProcess<S, P1, P2, PV, SV, E>
where
  S: Signal<SV, E> + Sized + Clone + 'static,
  P1: ProcessMut<Value = PV>,
  P2: ProcessMut<Value = PV>,
  PV: 'static,
  SV:Clone +  'static,
  E: Clone + 'static
{
  fn call_mut<C>(self, runtime: &mut Runtime, next: C) where C: Continuation<(Self, Self::Value)> {
    //println!("Call mut in PresentProcess");

    let signal_1 = self.signal;
    let signal_2 = signal_1.clone();
    let signal_3 = signal_1.clone();

    let signal_4 = Rc::new(Cell::new(Some(signal_3)));
    let signal_5 = signal_4.clone();

    let next_1 = Rc::new(Cell::new(Some(next)));
    let next_2 = next_1.clone();

    let process_if_1 = Rc::new(Cell::new(Some(self.process_if)));
    let process_if_2 = process_if_1.clone();

    let process_else_1 = Rc::new(Cell::new(Some(self.process_else)));
    let process_else_2 = process_else_1.clone();

    // Case 1: the signal is present during current instant
    signal_1.runtime().on_present(runtime, move |r: &mut Runtime, v: ()| {
      process_if_1.take().unwrap().call_mut(r, move |r: &mut Runtime, (p, v): (P1, PV)| {
        let present = signal_4.take().unwrap().present(p, process_else_1.take().unwrap());
        next_1.take().unwrap().call(r, (present, v));
      });
    });

    // Case 2: the signal is absent during current instant
    signal_2.runtime().later_on_absent(runtime, move |r: &mut Runtime, v: ()| {
      process_else_2.take().unwrap().call_mut(r, move |r: &mut Runtime, (p, v): (P2, PV)| {
        let present = signal_5.take().unwrap().present(process_if_2.take().unwrap(), p);
        next_2.take().unwrap().call(r, (present, v));
      });
    });
  }
}
<filename>01_magoney/magoney_backend/src/routes/fc_route/entities/create_entity.rs
use serde::{Deserialize, Serialize};

#[derive(Debug, Deserialize, Serialize)]
pub struct CreateEntity {
    congregation_name: String,
    city_name: String,
    state_name: String,
    month: i8,
    year: i16,
}

impl CreateEntity {
    pub fn congregation_name(&self) -> &str {
        self.congregation_name.as_ref()
    }

    pub fn city_name(&self) -> &str {
        self.city_name.as_ref()
    }

    pub fn state_name(&self) -> &str {
        self.state_name.as_ref()
    }

    pub fn month(&self) -> i8 {
        self.month
    }

    pub fn year(&self) -> i16 {
        self.year
    }
}
<reponame>komaeda/rust
// we need to make sure that intra-doc links on trait impls get resolved in the right scope

#![deny(intra_doc_link_resolution_failure)]

pub mod inner {
    pub struct SomethingOutOfScope;
}

pub mod other {
    use inner::SomethingOutOfScope;
    use SomeTrait;

    pub struct OtherStruct;

    /// Let's link to [SomethingOutOfScope] while we're at it.


key, int op, long arg1, void *arg2);
    /* Legacy functions for old PEM */
    int (*old_priv_decode) (EVP_PKEY *pkey,
                            const unsigned char **pder, int derlen);
    int (*old_priv_encode) (const EVP_PKEY *pkey, unsigned char **pder);
    /* Custom ASN1 signature verification */
    int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
                        X509_ALGOR *a, ASN1_BIT_STRING *sig, EVP_PKEY *pkey);
    int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
                      X509_ALGOR *alg1, X509_ALGOR *alg2,
                      ASN1_BIT_STRING *sig);
} /* EVP_PKEY_ASN1_METHOD */ ;

/*
 * Method to handle CRL access. In general a CRL could be very large (several
 * Mb) and can consume large amounts of resources if stored in memory by
 * multiple processes. This method allows general CRL operations to be
 * redirected to more efficient callbacks: for example a CRL entry database.
 */

#define X509_CRL_METHOD_DYNAMIC         1

struct x509_crl_method_st {
    int flags;
    int (*crl_init) (X509_CRL *crl);
    int (*crl_free) (X509_CRL *crl);
    int (*crl_lookup) (X509_CRL *crl, X509_REVOKED **ret,
                       ASN1_INTEGER *ser, X509_NAME *issuer);
    int (*crl_verify) (X509_CRL *crl, EVP_PKEY *pk);
};


 30s
			    foo{A="1"} 1+1x40
			    foo{A="2"} 2+2x40`,
			query: `sinh(foo or exp(foo))`,
		},
		{
			name: "vector binary op one-to-one left multiple matches",
			load: `load 30s
			    foo{method="get", code="500"} 1
			    foo{method="get", code="200"} 1
			    bar{method="get", code="200"} 1`,
			query: `foo / ignoring (code) bar`,
		},
		{
			name: "vector binary operation with many-to-many matching rhs high card",
			load: `load 30s
			    foo{code="200", method="get"} 1+1x20
			    foo{code="200", method="post"} 1+1x20
			    bar{code="200", method="get"} 1+1x20
			    bar{code="200", method="post"} 1+1x20`,
			query: `foo + on (code) group_right () bar`,
		},
		{
			name: "vector binary op > scalar",
			load: `load 30s
			    foo{method="get", code="500"} 1+2x40
			    bar{method="get", code="404"} 1+1x30`,
			query: `sum by (method) (foo) > 10`,
		},
		{
			name: "scalar < vector binary op",
			load: `load 30s
			    foo{method="get", code="500"} 1+2x40
			    bar{method="get", code="404"} 1+1x30`,
			query: `10 < sum by (method) (foo)`,
		},
		{
			name:  "scalar binary op == true",
			load:  ``,
			query: `1 == bool 1`,
		},
		{
			name:  "scalar binary op == false",
			load:  ``,
			query: `1 != bool 2`,
		},
		{
			name:  "scalar binary op !=",
			load:  ``,
			query: `1 != bool 1`,
		},
		{
			name:  "scalar binary op >",
			load:  ``,
			query: `1 > bool 0`,
		},
		{
			name:  "scalar binary op <",
			load:  ``,
			query: `1 > bool 2`,
		},
		{
			name:  "scalar binary op >=",
			load:  ``,
			query: `1 >= bool 0`,
		},
		{
			name:  "scalar binary op <=",
			load:  ``,
			query: `1 <= bool 2`,
		},
		{
			name:  "scalar binary op % 0",
			load:  ``,
			query: `2 % 2`,
		},
		{
			name:  "scalar binary op % 1",
			load:  ``,
			query: `1 % 2`,
		},
		{
			name:  "scalar binary op ^",
			load:  ``,
			query: `2 ^ 2`,
		},
		{
			name:  "empty series",
			load:  "",
			query: `http_requests_total`,
		},
		{
			name:  "empty series with func",
			load:  "",
			query: `sum(http_requests_total)`,
		},
		{
			name: "empty result",
			load: `load 30s
			    http_requests_total{pod="nginx-1"} 1+1x15
			    http_requests_total{pod="nginx-2"} 1+2x18`,
			query: `http_requests_total{pod="nginx-3"}`,
		},
		{
			name: "last_over_time",
			load: `load 30s
			    http_requests_total{pod="nginx-1"} 1+1x15
			    http_requests_total{pod="nginx-2"} 1+2x18`,
			query: `last_over_time(http_requests_total[30s])`,
		},
		{
			name: "group",
			load: `load 30s
			    http_requ


for (int scc=0; scc<N_SCC; scc++) {
    //         if (section_of(scc) == D) { // Internal
    //             verify(mvars[D][scc] >= 1);
    //             numSectComps = std::max(numSectComps, compId_t(mvars[D][scc]));
    //             compIds[scc] = numComps + compId_t(mvars[D][scc] - 1);
    //         }
    //     }
    //     if (verboseLvl >= VL_BASIC) {
    //         cout << "SECTION " << D << " HAS " << numSectComps << " COMPONENTS." << endl;
    //     }
    //     numComps += compId_t(numSectComps);
    //     for (int j=0; j<numSectComps; j++)
    //         compSection.push_back(D);
    // }
    // if (verboseLvl >= VL_VERBOSE) {
    //     cout << "COMPONENT IDS: " << print_vec(compIds) << endl;
    // }
    // if (verboseLvl >= VL_BASIC) {
    //     cout << "THERE ARE " << numComps << " COMPONENTS.\n\n" << endl;
    // }

    // // Get the edges in the component graph
    // std::set<std::pair<compId_t, compId_t>> EC;
    // for (auto e : EJ)
    //     if (compIds[e.second] != compIds[e.first])
    //         EC.insert(make_pair(compIds[e.second], compIds[e.first]));
    // for (auto e : EN)
    //     if (compIds[e.second] != compIds[e.first])
    //         EC.insert(make_pair(compIds[e.second], compIds[e.first]));

    // cout << "\nCOMPONENT EDGES:" << endl;
    // for (auto e : EC)
    //     cout << "comp(" << e.first << ") -> comp(" << e.second << ")" << endl;
    // cout << "\n" << endl;

    // Print the SCC graph in Graphviz format
    if (print_in_dot) {
        cout << "\nWRITING DOT FILE..." <<endl;
        ofstream dot("/Users/elvio/Desktop/dag.dot");
        dot << "\n\n\ndigraph G{\n  rankdir=LR;\n";
        bool components_as_clusters=false;
        for (compId_t c(0); c<numComps; c++) {
            dot << "  subgraph " << (components_as_clusters?"cluster_":"") << "c" << c << " {\n";
            // Write all SCCs in component s
            int compD = 0;
            for (int scc=0; scc<N_SCC; scc++) {
                if (compIds[scc] == c) {
                    compD = section_of(scc);
                    dot << "    scc" << scc << " [label=\"scc "<<scc<<"\\n"
                         // << minSccVal[scc]<<","
                         // <<(maxSccVal[scc]==numeric_limits<int>::max()?"inf":to_string(maxSccVal[scc]))
                         // <<"] : " << sectionVal[scc]
                         <<"c"<<c
                         <<" : D"<<section_of(scc)
                         <<" : " << x_vars[scc]
                         << "\", "
                        "style=filled, colorscheme=pastel19, color="
                         <<(compD+1)<< "];\n";
                }
            }

            dot << "    label = \"c" << c << " : ";
            printSectionName(compD, dot) << "\";\n";
            dot << "  }\n";
        }
        // Joinable edges
        dot << "  edge [style=dotted];\n  ";


sOnly(EntryPoint = "Start")]
    public static StatusCode Start(int index)
    {
        if (Contexts.Count <= index)
        {
            return StatusCode.InvalidIndex;
        }

        if (Contexts[index].BotContext.IsOnline)
        {
            return StatusCode.AlreadyStarted;
        }

        Task.Run(async () =>
        {
            await Contexts[index].BotContext.Login();
            await Task.Delay(Timeout.Infinite);
        });

        return StatusCode.Success;
    }

    [UnmanagedCallersOnly(EntryPoint = "Stop")]
    public static StatusCode Stop(int index)
    {
        if (Contexts.Count <= index)
        {
            return StatusCode.InvalidIndex;
        }

        Contexts[index].BotContext.Dispose();
        Contexts.RemoveAt(index);
        return StatusCode.Success;
    }

    [UnmanagedCallersOnly(EntryPoint = "FreeMemory")]
    public static void FreeMemory(IntPtr ptr)
    {
        if (ptr != IntPtr.Zero)
        {
            Marshal.FreeHGlobal(ptr);
        }
    }
}


        })
    });
}

fn memcache_decode_benchmark(c: &mut Criterion, label: &str, msg: &[u8]) {
    let codec = Memcache::new();
    let mut buf = BytesMut::with_capacity(1024);
    buf.extend_from_slice(msg);
    let buf = buf.freeze();
    c.bench_function(label, move |b| b.iter(|| codec.decode(&buf)));
}

fn decode_ok_benchmark(c: &mut Criterion) {
    memcache_decode_benchmark(c, "memcache decode ok", b"OK\r\n");
}

fn decode_incomplete_benchmark(c: &mut Criterion) {
    memcache_decode_benchmark(
        c,
        "memcache decode incomplete",
        b"VALUE 0 0 0\r\nSOME DATA GOES HERE\r\n",
    );
}

fn decode_hit_benchmark(c: &mut Criterion) {
    memcache_decode_benchmark(
        c,
        "memcache decode hit",
        b"VALUE 0 0 8\r\nDEADBEEF\r\nEND\r\n",
    );
}

fn decode_miss_benchmark(c: &mut Criterion) {
    memcache_decode_benchmark(c, "memcache decode miss", b"NOT_FOUND\r\n");
}

criterion_group!(
    benches,
    decode_hit_benchmark,
    decode_incomplete_benchmark,
    decode_miss_benchmark,
    decode_ok_benchmark,
    encode_get_benchmark,
    encode_set_benchmark,
);
criterion_main!(benches);
/*!
# converge
This crate facilitates defaulting values in a similar way to
[Option's or method](`core::option::Option::or`) but for each field in a
structure. The traits defined in this crate can be derived using [converge_derive].
Both [converge](crate) and [converge_derive] where created to separate order of
precedence from configuration content.

## Motivation

Both the [Unix philosophy](https://en.wikipedia.org/wiki/Unix_philosophy) and
the idea of [micro services](https://en.wikipedia.org/wiki/Microservices) lead
to writing lots of applications with configuration
[boiler plate code](https://en.wikipedia.org/wiki/Boilerplate_code).

It is reasonable to expect these applications will take configuration from the
command line arguments, environment and one or more configuration files. It is
also expected that the more specific configuration files will override the more
general. The environment configuration overrides the configuration files,
and the command line arguments overrides the environment and file based
configuration. Also the command line and environment configuration, may specify
the location of a configuration file, that overrides all the other configuration
files.

As applications mature the number of configuration options also tends to
grow adding to the complexity. Testing of configuration overriding for each
configuration option further increases the quantity of
[boiler plate code](https://en.wikipedia.org/wiki/Boilerplate_code).

This crate keeps the configuration override precedence separate from
configuration content reducing the quantity and complexity of the code base, and
with it the amount of testing needed.

    use converge::Converge;

    #[derive(Converge)]
    struct Simple {
        number: Option<i32>,
    }

*/
pub use converge_derive::Converge;
pub mod strategies;
pub trait Converge<Rhs = Self> {
    /*! # The Converge Trait.

    Structures can be coupled together to derive new instances with clear and
    simple prescience. Converge can be implemented for any type. The type of
    `default` is defined as the same as self and Self.

    # Example
    ```
    use converge::Converge;

    fn config_precedence<T>(cli_cfg: T, env_cfg: T, file_cfg: T) -> T
    where
        T: Converge,
    {
        cli_cfg.converge(env_cfg).converge(file_cfg)
    }
    ```


roc-hunter-jenkinsx-serverless/blob/9eea262/charts/croc-hunter-jenkinsx/templates/canary.yaml)。

![canary_yaml2.png](canary_yaml2.png)

然后往 `charts/myapp/values.yaml` 追加如下内容，将 `myapp.example.com` 修改为你的主机名或域名：

![values_yaml_0.png](values_yaml_0.png)

不久，当你从 Jenkins X 快速开始创建你的应用，将不再需要修改 `canary.yaml` 和 `values.yaml` 这两个文件，因为它们默认启用金丝雀部署。

就这样！现在当使用 `jx promote myapp --version 1.0 --env production` 将你的应用 promote 到生产环境，它将执行一次金丝雀部署。
请注意，第一次被 promote 时，它不会执行金丝雀部署，因为它需要与以前的版本数据进行比较，但从第二次 promotion 开始，它将起作用。

根据上面 `values.yaml` 文件中的配置，它看起来像：
- 第 1 分钟：将 10% 的流量发送到新版本
- 第 2 分钟：将 20% 的流量发送到新版本
- 第 3 分钟：将 30% 的流量发送到新版本
- 第 4 分钟：将 40% 的流量发送到新版本
- 第 5 分钟：将 100% 的流量发送到新版本

如果我们配置的指标（请求持续时间超过 500 毫秒或超过 1% 的响应返回 500 错误）失败，Flagger 将注意到失败，并且如果重复 5 次，它将回滚这次发布，将 100% 的流量发送到旧版本。

获得金丝雀事件输出，执行如下命令：
1. $ kubectl -n jx-production get events --watch\
2. --field-selector involvedObject.kind=Canary
3. 23m ... New revision detected! Scaling up jx-production-myapp.jx-production
4. 22m ... Starting canary analysis forjx-production-myapp.jx-production
5. 22m ... Advance jx-production-myapp.jx-production canary weight 10
6. 21m ... Advance jx-production-myapp.jx-production canary weight 20
7. 20m ... Advance jx-production-myapp.jx-production canary weight 30
8. 19m ... Advance jx-production-myapp.jx-production canary weight 40
9. 18m ... Advance jx-production-myapp.jx-production canary weight 50
10. 18m ... Copying jx-production-myapp.jx-production template spec to jx-productio


ations under the License.
*/

package addon

import (
	"context"
	"fmt"
	"strings"
	"sync"
	"time"

	"k8s.io/klog/v2"

	"github.com/oam-dev/kubevela/pkg/utils"
	"github.com/oam-dev/kubevela/pkg/utils/common"
)

// We have three addon layer here
// 1. List metadata for all file path of one registry
// 2. UIData: Read file content that including README.md and other necessary things being used in UI apiserver
// 3. InstallPackage: All file content that used to be installation

// Cache package only cache for 1 and 2, we don't cache InstallPackage, and it only read for real installation
type Cache struct {

	// uiData caches all the decoded UIData addons
	// the key in the map is the registry name
	uiData map[string][]*UIData

	// registryMeta caches the addon metadata of every registry
	// the key in the map is the registry name
	registryMeta map[string]map[string]SourceMeta

	registry map[string]Registry

	versionedUIData map[string]map[string]*UIData

	mutex *sync.RWMutex

	ds RegistryDataStore
}

// NewCache will build a new cache instance
func NewCache(ds RegistryDataStore) *Cache {
	return &Cache{
		uiData:          make(map[string][]*UIData),
		registryMeta:    make(map[string]map[string]SourceMeta),
		registry:        make(map[string]Registry),
		versionedUIData: make(map[string]map[string]*UIData),
		mutex:           new(sync.RWMutex),
		ds:              ds,
	}
}

// DiscoverAndRefreshLoop will run a loop to automatically discovery and refresh addons from registry
func (u *Cache) DiscoverAndRefreshLoop(ctx context.Context, cacheTime time.Duration) {
	ticker := time.NewTicker(cacheTime)
	defer ticker.Stop()

	// This is infinite loop, we can receive a channel for close
	for {
		select {
		case <-ticker.C:
			u.discoverAndRefreshRegistry()
		case <-ctx.Done():
			return
		}
	}
}

// ListAddonMeta will list metadata from registry, if cache not found, it will find from source
func (u *Cache) ListAddonMeta(r Registry) (map[string]SourceMeta, error) {
	registryMeta := u.getCachedAddonMeta(r.Name)
	if registryMeta == nil {
		return r.ListAddonMeta()
	}
	return registryMeta, nil
}

// GetUIData get addon data for UI display from cache, if cache not found, it will find from source
func (u *Cache) GetUIData(r Registry, addonName, version string) (*UIData, error) {
	addon := u.getCachedUIData(r, addonName, version)
	if addon != nil {
		return addon, nil
	}
	var err error
	if !IsVersionRegistry(r) {
		registryMeta, err := u.ListAddonMeta(r)
		if err != nil {
			return nil, err
		}
		meta, ok := registryMeta[addonName]
		if !ok {
			return nil, ErrNotExist
		}
		addon, err = r.GetUIData(&meta, UIMetaOptions)
		if err != nil {
			return nil, err
		}
	} else {
		versionedRegistry := BuildVersionedRegistry(r.Name, r.Helm.URL, &common.HTTPOption{
			Username:        r.Helm.Username,
			Password:        r.Helm.Password,
			Ins


мы (собственный капитал владельцев BHB)',
        content1: 'Как описано в официальном документе, EPBTC будет распределять 80% дохода платформы (после уплаты налогов и сборов) держателям EPBTC, а 20% дохода будет использоваться для поддержки разработки и эксплуатации платформы',
        content2: 'День распределения доходов представляет собой цикл распределения, а 6 июня 2018 года является первым днем распределения. Каждый день после этого весь доход, который будет распределен с предыдущего дня, будет распределяться между держателями BHB единовременно. пропорция. ',
        content3: "(Примечание: 1. BHB здесь относится только к выпущенным / распространенным BHB, см. [",
        content3_1: 'Объяснение доли обращения / участия BHB в распределении доходов',
        content3_2: "2. Снимки делаются каждый час (по часам) и рассчитываются один раз, а распределение доходов выполняется один раз в день).",
        hourFenpei: "Сегодняшний эквивалент дохода от распределения",
        hourTotal: 'Эквивалент общей выручки от сегодняшней платформы',
        xiangqing: 'Сегодняшнее распределение доходов',
        yesterdaytit: "Эквивалент вчерашнего ежедневного дохода от распределения",
        yesterdaytotal: "Эквивалент вчерашнего общего дохода от платформы",
        yesterdayxiangqing: "Сведения о вчерашнем распределении доходов",
        /*yesterday: {
          total: "Общая плата за платформу",
          allocated: "Распределенный доход",
        }*/
    },
    feereturn: {
        ruletitle: "Правила возврата",
        rulecontent: 'Коэффициент распределения BHB был подробно объяснен в официальном документе. 51% BHB постепенно вознаграждается торговым пользователям с помощью метода" транзакция - это добыча ". Как только 51% BHB полностью вознагражден," майнинг "автоматическое прекращение.',
        recordtitle: 'Вернуть записи',
        recordcontent: 'Каждый день (UTC + 8, то же самое ниже) 100% комиссий за транзакции, сгенерированные пользователями за предыдущий день, будут конвертированы в BHB и возвращены пользователям. Конвертированная цена основана на средней цене BHB на предыдущей торговле. день (средняя цена рассчитывается как общая сумма транз


from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse_lazy
from django.views.generic import CreateView, DeleteView, ListView, UpdateView

from .forms import BudgetForm
from .models import Budget

class BudgetListView(LoginRequiredMixin, ListView):
    model = Budget
    template_name = "budgeting/budget_list.html"
    context_object_name = "budgets"

    def get_queryset(self):
        return Budget.objects.filter(user=self.request.user)

class BudgetCreateView(LoginRequiredMixin, CreateView):
    model = Budget
    form_class = BudgetForm
    template_name = "budgeting/budget_form.html"
    success_url = reverse_lazy("budgeting:budget_list")

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super().form_valid(form)

class BudgetUpdateView(LoginRequiredMixin, UpdateView):
    model = Budget
    form_class = BudgetForm
    template_name = "budgeting/budget_form.html"
    success_url = reverse_lazy("budgeting:budget_list")

class BudgetDeleteView(LoginRequiredMixin, DeleteView):
    model = Budget
    template_name = "budgeting/budget_confirm_delete.html"
    success_url = reverse_lazy("budgeting:budget_list")


8 02 BF B5 */	bl func_802EA65C
/* 802BE6AC 002BB4AC  38 1F 01 24 */	addi r0, r31, 0x124
/* 802BE6B0 002BB4B0  7F C3 05 2E */	stfsx f30, r3, r0
/* 802BE6B4 002BB4B4  80 7C 06 00 */	lwz r3, 0x600(r28)
/* 802BE6B8 002BB4B8  7C 63 F8 2E */	lwzx r3, r3, r31
/* 802BE6BC 002BB4BC  80 83 00 54 */	lwz r4, 0x54(r3)
/* 802BE6C0 002BB4C0  28 04 00 00 */	cmplwi r4, 0
/* 802BE6C4 002BB4C4  41 82 00 0C */	beq lbl_802BE6D0
/* 802BE6C8 002BB4C8  C3 C4 00 00 */	lfs f30, 0(r4)
/* 802BE6CC 002BB4CC  48 00 00 08 */	b lbl_802BE6D4
lbl_802BE6D0:
/* 802BE6D0 002BB4D0  C3 C3 00 58 */	lfs f30, 0x58(r3)
lbl_802BE6D4:
/* 802BE6D4 002BB4D4  48 02 BF 89 */	bl func_802EA65C
/* 802BE6D8 002BB4D8  38 1F 01 38 */	addi r0, r31, 0x138
/* 802BE6DC 002BB4DC  7F C3 05 2E */	stfsx f30, r3, r0
/* 802BE6E0 002BB4E0  80 7C 06 C0 */	lwz r3, 0x6c0(r28)
/* 802BE6E4 002BB4E4  7C 63 F8 2E */	lwzx r3, r3, r31
/* 802BE6E8 002BB4E8  80 83 00 54 */	lwz r4, 0x54(r3)
/* 802BE6EC 002BB4EC  28 04 00 00 */	cmplwi r4, 0
/* 802BE6F0 002BB4F0  41 82 00 0C */	beq lbl_802BE6FC
/* 802BE6F4 002BB4F4  C3 C4 00 00 */	lfs f30, 0(r4)
/* 802BE6F8 002BB4F8  48 00 00 08 */	b lbl_802BE700
lbl_802BE6FC:
/* 802BE6FC 002BB4FC  C3 C3 00 58 */	lfs f30, 0x58(r3)
lbl_802BE700:
/* 802BE700 002BB500  48 02 BF 5D */	bl func_802EA65C
/* 802BE704 002BB504  38 1F 01 4C */	addi r0, r31, 0x14c
/* 802BE708 002BB508  7F C3 05 2E */	stfsx f30, r3, r0
/* 802BE70C 002BB50C  80 7C 07 80 */	lwz r3, 0x780(r28)
/* 802BE710 002BB510  7C 63 F8 2E */	lwzx r3, r3, r31
/* 802BE714 002BB514  80 83 00 54 */	lwz r4, 0x54(r3)
/* 802BE718 002BB518  28 04 00 00 */	cmplwi r4, 0
/* 802BE71C 002BB51C  41 82 00 0C */	beq lbl_802BE728
/* 802BE720 002BB520  C3 C4 00 00 */	lfs f30, 0(r4)
/* 802BE724 002BB524  48 00 00 08 */	b lbl_802BE72C
lbl_802BE728:
/* 802BE728 002BB528  C3 C3 00 58 */	lfs f30, 0x58(r3)
lbl_802


Რ', '𒇖', 'ᮟ', '𥥼', 'ᩏ',
    '𝘫', '⸐', '𝐝', '𐠋', 'Ἁ', '\u{18b75}', 'ᝫ', '🔪', '\u{2e50}', '\u{18cb9}',
    'ꈙ', '🙁', 'ꔞ', '𑋞', '㈸', '꤁', '⽺', '秫', '\u{1e029}', '𞠾',
    '\u{1fb89}', '⚸', '☻', '⬸', 'ⱓ', '𖨐', 'Ǝ', '𑁬', '\u{e012b}', 'ᅦ', '𓍱',
    '⍞', '⸏', '𝑭', '🝗', 'Ⱖ', '⢓', '🡻', 'ᰥ', '况', 'ꅞ', '\u{11916}',
    '𔑜', '𐆘', 'ﾫ', 'ｻ', '⠄', '𖤫', 'ᓴ', '\u{1fbb4}', '𘢐', '\u{cbf}',
    '\u{aaf6}', '𐫵', '\u{1f10f}', '⣉', '\u{e0162}', '\u{1da2f}', '🠩', '𒐻', '𓐄',
    '⼸', '🌸', 'ꂅ', '𖧜', 'ắ', '𘢢', '\u{7ad}', '𖧛', '𑊠', 'ʹ', '𐓘',
    '😉', '𑁒', '𘠎', '𝈌', 'ഈ', '\u{11c32}', '\u{18bca}', '𑄣', '𑇓', '𖥕',
    '𑀔', '𐫢', '🈡', '㊵', '𑒲', 'ʵ', 'ꢒ', '\u{e01e1}', '𘪝', '𒀩', 'ஜ',
    '𒋜', '𐌕', '➶', 'ὸ', '🛣', '🏼', '𐝊', 'ट', '\u{10fc8}', '𘪩', 'ꗠ',
    '𑅨', '⡓', 'ෂ', '\u{8f1}', '𓉿', 'Ʃ', '🠇', 'Ἥ', '𑫴', '𝌣', 'ꠣ',
    '\u{a826}', 'ꬍ', '𑋈', '𛋗', '⩍', '⮔', '𛋜', '凉', '🌼', '☗',
    '\u{e01b5}', '𐕝', '⬃', '𑱕', 'സ', 'ⁿ', '𝒵', '\u{fe23}', '𐕑', 'വ',
    '\u{1fb7c}', '➒', '𞠍', 'ꨔ', 'ꃻ', '𝍮', '🝝', 'ꡀ', '𝗨', '𖠼', '𐌱',
    '\u{1f8b0}', '𓄠', '𐄀', 'ᨱ', '\u{59a}', '\u{e010a}', '❔', '🠋', 'ﶗ', 'ᄀ',
    'Ꮸ', '\u{18b7c}', '𖹟', 'ꇡ', '\u{18b77}', '𓐍', '


 height: u32| {
                let mut state = state.borrow_mut();
                state.camera_width = width.into();
                state.camera_height = height.into();
            }
        },
        {
            let state = Rc::clone(&state);
            move |_time, webgl_renderer| {
                let state = state.borrow();
                let State {
                    camera_width: _,
                    camera_height: _,
                    program_id,
                    vao_id,
                    texture_id,
                } = *state;

                webgl_renderer
                    .activate_program(program_id.unwrap())
                    .unwrap();

                //enable texture
                webgl_renderer
                    .activate_texture_for_sampler_name(texture_id.unwrap(), "u_sampler")
                    .unwrap();

                //Build our matrices (must cast to f32)
                // Our camera looks toward the point (1.0, 0.0, 0.0).
                // It is located at (0.0, 0.0, 1.0).
                let eye = Point3::new(0.0, 0.0, 0.0);
                let target = Point3::new(0.0, 0.0, 1000.0);
                let view = Isometry3::look_at_rh(&eye, &target, &Vector3::y());

                // A perspective projection.
                let projection = Perspective3::new(
                    state.camera_width as f32 / state.camera_height as f32,
                    std::f32::consts::PI / 2.0,
                    1.0,
                    3000.0,
                );

                let mvp_mat = projection.to_homogeneous() * (view.to_homogeneous());

                let size = 900.0f32;
                let scaling_mat = Matrix4::new_nonuniform_scaling(&Vector3::new(size, size, size));

                //Upload them to the GPU
                webgl_renderer
                    .upload_uniform_mat_4_name("u_modelViewProjection", &mvp_mat.as_slice())
                    .unwrap();
                webgl_renderer
                    .upload_uniform_mat_4_name("u_size", &scaling_mat.as_slice())
                    .unwrap();

                //activate buffers
                webgl_renderer
                    .activate_vertex_array(vao_id.unwrap())
                    .unwrap();

                //draw!
                webgl_renderer.clear(&[
                    BufferMask::ColorBufferBit,
                    BufferMask::DepthBufferBit,
                ]);

                webgl_renderer.draw_elements(
                    BeginMode::Triangles,
                    N_BOX_ELEMENTS,
                    DataType::UnsignedByte,
                    0,
                );
            }
        }
    )
}
use super::BuildSetup;
use std::{ffi::OsString, io::Error};

/// Provides a `memory.x` file to be included by the linker script of
/// `cortex-m-rt`.
pub struct RtLdscriptSetup {
    dir: tempdir::TempDir,
}

impl RtLdscriptSetup {
    pub async fn new(memory_x_contents: &[u8]) -> Result<Self, Error> {
        let dir = tokio::task::spawn_blocking(|| tempdir::TempDir::new("farcri-rs"))
            .await
            .unwrap()?;

        tokio::fs::write(dir.path().join("memory.x"), memory_x_contents).a


antala mula sa oras na makatanggap ng mga pondo ang isang user hanggang sa kung kailan nila magagamit ang mga ito nang pribado.
\n
Ang privacy na ibinibigay ng isang transaksyon sa CoinJoin ay bumababa sa paglipas ng panahon habang ang ibang mga kalahok ay gumagastos ng mga pondo o ini-link ang kanilang mga output sa kanilang pagkakakilanlan sa pamamagitan ng KYC exchanges, ID na nangangailangan ng mga merchant, atbp. Nangangahulugan ito na ang mga user ay perpektong panatilihin ang kanilang mga pondo na patuloy na umiikot sa mga transaksyon sa CoinJoin upang mapanatili ang kanilang anonymity set (\"crowd to hide in\") bilang bago hangga\'t maaari.
\n
Sa karamihan ng mga diskarte sa CoinJoin, ang mga kalahok ay dapat gumamit ng fixed-size na UTXO (i.e. 0.1 BTC) para mas mahirap ikonekta ang mga input at output ng mga transaksyon sa CoinJoin. Ito ay humahantong sa mas mataas na mga bayarin (mas hiwalay na mga transaksyon na kinakailangan sa bawat malaking input), mas \"nakakalason na pagbabago\" (mga pondo na hindi magastos nang walang malubhang panganib sa privacy), at maaaring mag-udyok sa mas maliliit na user na hindi makapaghalo sa lahat kung wala silang kinakailangang minimum na balanse.
\n
';

  @override
  String get knowledge250Sbcoinjoin250Sb1250Sbtitle => 'Ano ang transaksyon ng CoinJoin?';

  @override
  String get knowledge250Sbcoinjoin250Sb2250Sbtext => '
Bilang malalim naming tinitingnan kung ano ang mga pirma ng singsing sa nakaraan, hindi ko na idedetalye ang mga teknikal na aspeto kung paano gumagana ang mga ito sa post sa blog na ito. Sa halip, titingnan natin kung paano nireresolba ng mga diskarte na ginawa sa Monero ang mga isyu sa CoinJoin na tinatalakay sa itaas.
\n
\n
Ang CoinJoin ay opt-in at nangangailangan ng pakikilahok
\n
\n
Ang mga ring signature ng Monero ay isang pangunahing feature ng privacy protocol, at bawat na transaksyon sa network ay gumagamit ng mga ito. Nangangahulugan ito na walang mga transaksyon ng user ang namumukod-tangi para sa paghahanap ng higit na privacy kaysa sa \"normal\" na mga user ng Monero, at ang lahat ng mga user ay nakakakuha ng kapani-paniwalang pagtatanggi na gumastos sila ng mga pondo sa anumang partikular na transaksyon. Dahil ang mga pondo sa paggastos ng isang user ay hindi nakikipag-ugnayan o nakikilahok sa mga input ng decoy sa isang transaksyon, ang mga user na nagmamay-ari ng mga input na nangyari na napili bilang mga decoy ay maaaring matapat na sabihin na hindi sila nakikilahok sa transaksyon na iyon, na nagpapatibay sa kanilang privacy.
\n
\n
Paggamit ng isang sentralisadong coordinator
\n
\n
Dahil ang mga ring signature ng Monero ay ganap na hindi mag


== gtBall) then
		--	turningSpeed = 0.2*fMod
		end

		dx, dy = GetGearVelocity(gear)

		--WriteLnToConsole("I'm trying to track currenthedge with shell ID: " .. getGearValue(gear,"ID"))
		--WriteLnToConsole("I just got the velocity of the shell. It is dx: " .. dx .. "; dy: " .. dy)
		--WriteLnToConsole("CurrentHedgehog is at X: " .. GetX(CurrentHedgehog) .. "; Y: " .. GetY(CurrentHedgehog) )

        if CurrentHedgehog ~= nil then
            if GetX(gear) > GetX(CurrentHedgehog) then
                dx = dx - turningSpeed--0.1
            else
                dx = dx + turningSpeed--0.1
            end

            if GetY(gear) > GetY(CurrentHedgehog) then
                dy = dy - turningSpeed--0.1
            else
                dy = dy + turningSpeed--0.1


16-16-16v-16c0-8.84 7.16-16 16-16h192c8.84 0 16 7.16 16 16v16z"; // Folder Minus

        public const string Folder_Open_Solid =
            "M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z"; // Folder Open

        public const string Folder_Open_Regular =
            "M527.9 224H480v-48c0-26.5-21.5-48-48-48H272l-64-64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h400c16.5 0 31.9-8.5 40.7-22.6l79.9-128c20-31.9-3-73.4-40.7-73.4zM48 118c0-3.3 2.7-6 6-6h134.1l64 64H426c3.3 0 6 2.7 6 6v42H152c-16.8 0-32.4 8.8-41.1 23.2L48 351.4zm400 282H72l77.2-128H528z"; // Folder Open

        public const string Folder_Plus_Solid =
            "M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-96 168c0 8.84-7.16 16-16 16h-72v72c0 8.84-7.16 16-16 16h-16c-8.84 0-16-7.16-16-16v-72h-72c-8.84 0-16-7.16-16-16v-16c0-8.84 7.16-16 16-16h72v-72c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v72h72c8.84 0 16 7.16 16 16v16z"; // Folder Plus

        public const string Font_Solid =
            "M432 416h-23.41L277.88 53.69A32 32 0 0 0 247.58 32h-47.16a32 32 0 0 0-30.3 21.69L39.41 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-19.58l23.3-64h152.56l23.3 64H304a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM176.85 272L224 142.51 271.15 272z"; // font

        public const string Font_Awesome_Brands =
            "M397.8 32H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2


an Klein
 * @author Michel Galley (AT&T FSM library format printing)
 * @author Sarah Spikes (sdspikes@cs.stanford.edu) - cleanup and filling in types
 */
public final class DFSA<T,S> implements Scored {

  Object dfsaID;
  DFSAState<T,S> initialState;

  public DFSA(DFSAState<T,S> initialState, double score) {
    this.initialState = initialState;
    this.score = score;
  }

  public DFSA(DFSAState<T,S> initialState) {
    this.initialState = initialState;
    this.score = Double.NaN;
  }

  public double score;

  public double score() {
    return score;
  }

  public DFSAState<T,S> initialState() {
    return initialState;
  }

  public void setInitialState(DFSAState<T,S> initialState) {
    this.initialState = initialState;
  }

  public Set<DFSAState<T, S>> states() {
    Set<DFSAState<T, S>> visited = new HashSet<DFSAState<T, S>>();
    List<DFSAState<T,S>> toVisit = new ArrayList<DFSAState<T,S>>();
    toVisit.add(initialState());
    exploreStates(toVisit, visited);
    return visited;
  }

  private static <T, S> void exploreStates(List<DFSAState<T, S>> toVisit, Set<DFSAState<T, S>> visited) {
    while (!toVisit.isEmpty()) {
      DFSAState<T, S> state = toVisit.get(toVisit.size() - 1);
      toVisit.remove(toVisit.size() - 1);
      if (!visited.contains(state)) {
        toVisit.addAll(state.successorStates());
        visited.add(state);
      }
    }
  }

  public DFSA(Object dfsaID) {
    this.dfsaID = dfsaID;
    this.score = 0;
  }

  private static <T, S> void printTrieDFSAHelper(DFSAState<T, S> state, int level) {
    if (state.isAccepting()) {
      return;
    }
    Set<T> inputs = state.continuingInputs();
    for (T input : inputs) {
      DFSATransition<T, S> transition = state.transition(input);
      System.out.print(level);
      System.out.print(input);
      for (int i = 0; i < level; i++) {
        System.out.print("   ");
      }
      System.out.print(transition.score());
      System.out.print(" ");
      System.out.println(input);
      printTrieDFSAHelper(transition.target(), level + 1);
    }
  }

  public static <T, S> void printTrieDFSA(DFSA<T, S> dfsa) {
    System.err.println("DFSA: " + dfsa.dfsaID);
    printTrieDFSAHelper(dfsa.initialState(), 2);
  }

  public void printAttFsmFormat(Writer w) throws IOException {
    Queue<DFSAState<T,S>> q = new LinkedList<DFSAState<T,S>>();
    Set<DFSAState<T,S>> visited = new HashSet<DFSAState<T,S>>();
    q.offer(initialState);
    while(q.peek() != null) {
      DFSAState<T, S> state = q.poll();
      if(state == null || visited.contains(state))
        continue;
      visited.add(state);
      if (state.isAccepting()) {
        w.write(state.toString()+"\t"+state.score()+"\n");
        continue;
      }
      TreeSet<T> inputs = new TreeSet<T>(state.continuingInputs());
      for (T input : inputs) {
        DFSATransition<T, S> transition = state.transition(input);
        DFSAState<T,S> target = transition.target();
        if(!visited.contains(target))
          q.add(target);
        w.write


     32,
				TerminalSupportedMaxNumberOfAudioPhysicalChannels: 8,
				TerminalSupportedMaxNumberOfVideoPhysicalChannels: 8,
			},
		},
		{
			name: "P0x9101 平台-实时音视频传输请求",
			args: args{
				msg:      "7e9101001712345678901200010f3132332e3132332e3132332e313233030440c60c0100a17e",
				Handler:  &P0x9101{},
				bodyLens: []int{0, 2},
			},
			fields: &P0x9101{
				ServerIPLen:  15,
				ServerIPAddr: "123.123.123.123",
				TcpPort:      772,
				UdpPort:      16582,
				ChannelNo:    12,
				DataType:     1,
				StreamType:   0,
			},
		},
		{
			name: "T0x1005 终端-上传乘客流量",
			args: args{
				msg:      "7E100500101234567890120001241001000000241002001001000200138D7E",
				Handler:  &T0x1005{},
				bodyLens: []int{15},
			},
			fields: &T0x1005{
				StartTime:    "2024-10-01 00:00:00",
				EndTime:      "2024-10-02 00:10:01",
				BoardNumber:  2,
				AlightNumber: 19,
			},
		},
		{
			name: "P0x9102 平台-音视频实时传输控制",
			args: args{
				msg:      "7e910240040112345678901234567890ffff08010203de7e",
				Handler:  &P0x9102{},
				bodyLens: []int{3},
			},
			fields: &P0x9102{
				ChannelNo:           8,
				ControlCmd:          1,
				CloseAudioVideoData: 2,
				StreamType:          3,
			},
		},
		{
			name: "P0x9201 平台-下发远程录像回放请求",
			args: args{
				msg:      "7e9201002412345678901200010d31322e31322e3132332e313233a7b93c6c320200000000200707192359200707192359617e",
				Handler:  &P0x9201{},
				bodyLens: []int{0, 3},
			},
			fields: &P0x9201{
				BaseHandle:   BaseHandle{},
				ServerIPLen:  13,
				ServerIPAddr: "12.12.123.123",
				TcpPort:      42937,
				UdpPort:      15468,
				ChannelNo:    50,
				MediaType:    2,
				StreamType:   0,
				MemoryType:   0,
				PlaybackWay:  0,
				PlaySpeed:    0,
				StartTime:    "2020-07-07 19:23:59",
				EndTime:      "2020-07-07 19:23:59",
			},
		},
		{
			name: "P0x9205 平台-查询资源列表",
			args: args{
				msg:      "7e920500181234567890120001e720070719235920070719235900000000000000009b6e00167e",
				Handler:  &P0x9205{},
				bodyLens: []int{1},
			},
			fields: &P0x9205{
				BaseHandle:  BaseHandle{},
				ChannelNo:   231,
				StartTime:   "2020-07-07 19:23:59",
				EndTime:     "2020-07-07 19:23:59",
				AlarmFlag:   0,
				MediaType:   155,
				StreamType:  110,
				StorageType: 0,
			},
		},
		{
			name: "T0x1205 终端-上传音视频资源列表",
			args


:1.5;"/>
   </g>
   <g id="line2d_18">
    <path clip-path="url(#pa24695896e)" d="M 62.183807 128.666246
L 63.097812 128.508511
L 64.621153 128.468267
L 65.839826 128.182498
L 66.144495 127.910456
L 66.449163 127.886369
L 67.0585 127.597438
L 68.277173 127.510128
L 69.191178 127.368581
L 69.495846 127.447545
L 70.105183 127.305608
L 70.409851 127.192957
L 70.714519 127.316775
L 71.628524 127.153793
L 71.933193 127.301975
L 72.542529 127.202122
L 74.370539 127.041778
L 75.284544 127.062307
L 78.940564 127.174913
L 79.5499 127.21852
L 80.159237 127.115144
L 81.682578 127.014047
L 82.596583 126.809705
L 84.119925 126.405201
L 84.424593 126.491963
L 85.338598 126.252044
L 85.947935 126.133434
L 87.166608 124.968691
L 87.775944 124.067955
L 88.080613 122.46569
L 88.994618 120.681864
L 89.603954 120.120085
L 90.213291 117.937061
L 90.517959 118.014345
L 92.345969 114.623848
L 92.650637 114.601297
L 92.955306 114.2195
L 93.259974 114.096456
L 93.564642 113.805839
L 93.869311 113.290307
L 94.173979 111.839464
L 94.478647 113.15363
L 95.087984 111.711913
L 96.001989 110.526583
L 96.306657 110.494799
L 96.611325 110.276841
L 96.915994 109.786485
L 97.220662 109.967802
L 97.52533 109.217736
L 97.829998 109.157619
L 98.744003 108.428054
L 99.35334 108.558026
L 99.658008 108.389897
L 99.962677 108.390666
L 100.267345 108.580351
L 102.704691 108.128635
L 103.314028 108.080681
L 105.446706 107.644265
L 105.751374 107.679715
L 106.665379 107.455887
L 107.884053 107.143646
L 108.188721 106.584746
L 108.798057 104.980263
L 109.102726 103.266529
L 109.407394 102.414816
L 109.712062 102.584436
L 110.016731 101.66933
L 110.626067 100.738588
L 110.930736 100.764774
L 111.540072 100.219243
L 112.149409 100.130847
L 112.758745 98.449367
L 113.368082 97.665585
L 113.67275 97.6139
L 113.977419 96.894349
L 114.282087 96.64993
L 114.586755 96.924178
L 115.196092 96.278448
L 115.50076 96.147


 0x8888, false, TodDrawTriangle_8888_TEX1_TALPHA1_MOD1_GLOB0_BLEND0);		//0x49E400
	SWTri_AddDrawTriFunc(true, true, true, false, 0x8888, true, TodDrawTriangle_8888_TEX1_TALPHA1_MOD1_GLOB0_BLEND1);		//0x49FC10
	SWTri_AddDrawTriFunc(true, true, true, true, 0x8888, false, TodDrawTriangle_8888_TEX1_TALPHA1_MOD1_GLOB1_BLEND0);		//0x4A1DF0
	SWTri_AddDrawTriFunc(true, true, true, true, 0x8888, true, TodDrawTriangle_8888_TEX1_TALPHA1_MOD1_GLOB1_BLEND1);		//0x4A3710

	SWTri_AddDrawTriFunc(true, false, false, false, 0x0888, false, TodDrawTriangle_0888_TEX1_TALPHA0_MOD0_GLOB0_BLEND0);	//0x4A59B0
	SWTri_AddDrawTriFunc(true, false, false, false, 0x0888, true, TodDrawTriangle_0888_TEX1_TALPHA0_MOD0_GLOB0_BLEND1);		//0x48E6F0
	SWTri_AddDrawTriFunc(true, false, false, true, 0x0888, false, TodDrawTriangle_0888_TEX1_TALPHA0_MOD0_GLOB1_BLEND0);		//0x4A63C0
	SWTri_AddDrawTriFunc(true, false, false, true, 0x0888, true, TodDrawTriangle_0888_TEX1_TALPHA0_MOD0_GLOB1_BLEND1);		//0x4A7D70
	SWTri_AddDrawTriFunc(true, false, true, false, 0x0888, false, TodDrawTriangle_0888_TEX1_TALPHA0_MOD1_GLOB0_BLEND0);		//0x4AAAA0
	SWTri_AddDrawTriFunc(true, false, true, false, 0x0888, true, TodDrawTriangle_0888_TEX1_TALPHA0_MOD1_GLOB0_BLEND1);		//0x4AD590
	SWTri_AddDrawTriFunc(true, false, true, true, 0x0888, false, TodDrawTriangle_0888_TEX1_TALPHA0_MOD1_GLOB1_BLEND0);		//0x4B1580
	SWTri_AddDrawTriFunc(true, false, true, true, 0x0888, true, TodDrawTriangle_0888_TEX1_TALPHA0_MOD1_GLOB1_BLEND1);		//0x4B42D0

	SWTri_AddDrawTriFunc(true, true, false, false, 0x0888, false, TodDrawTriangle_0888_TEX1_TALPHA1_MOD0_GLOB0_BLEND0);		//0x4B84F0
	SWTri_AddDrawTriFunc(true, true, false, false, 0x0888, true, TodDrawTriangle_0888_TEX1_TALPHA1_MOD0_GLOB0_BLEND1);		//0x4B9D30
	SWTri_AddDrawTriFunc(true, true, false, true, 0x0888, false, TodDrawTriangle_0888_TEX1_TALPHA1_MOD0_GLOB1_BLEND0);		//0x4BC670
	SWTri_AddDrawTriFunc(true, true, false, true, 0x0888, true, TodDrawTriangle_0888_TEX1_TALPHA1_MOD0_GLOB1_BLEND1);		//0x4BE040
	SWTri_AddDrawTriFunc(true, true, true, false, 0x0888, false, TodDrawTriangle_0888_TE


45.34|Z|Abyssal Depths|CS|N|Turn in the quest at L'ghorek's brain.|
A Runestones of Binding|QID|26141|PRE|26140|M|38.44,45.34|Z|Abyssal Depths|N|From L'ghorek|
A Ascend No More!|QID|26142|PRE|26140|M|38.44,45.34|Z|Abyssal Depths|N|From L'ghorek|
A Prisoners|QID|26144|RANK|2|S|U|57102|N|One of the Twilight-Mobs will drop a Twilight Key. Use it to accept the quest.|
C Prisoners|QID|26144|RANK|2|M|31.2,58.8|Z|Abyssal Depths|N|Free Prisoners.|S|O|
C Runestones of Binding|QID|26141|S|N|Kill any Twilight Candidates you see until you get 7 Runestones of Binding.|
C Ascend No More!|QID|26142|M|28.1,57.5|Z|Abyssal Depths|N|Avoid the center of the room, as it is guarded by elites. Run along the outside wall of the main chamber, to the ridge opposite the Brain Room. Destroy Ancient Conduits.|
C Runestones of Binding|QID|26141|US|M|30.4,58.8;28,56.3;28.8,61.9;33.1,65.9;35.6,64.6;33.5,59.8|Z|Abyssal Depths|CN|N|Collect remaining Runestones.|
C Prisoners|QID|26144|RANK|2|M|31.2,58.8|Z|Abyssal Depths|N|Free Prisoners.|US|O|
T Prisoners|QID|26144|RANK|2|M|31.2,58.8|Z|Abyssal Depths|N|(UI Alert)|
T Runestones of Binding|QID|26141|M|38.7,44.8|Z|Abyssal Depths|N|To L'ghorek.|
T Ascend No More!|QID|26142|M|38.7,44.8|Z|Abyssal Depths|N|To L'ghorek.|
A Twilight Extermination|QID|26154|PRE|26141&26142|M|38.7,44.8|Z|Abyssal Depths|N|From L'ghorek.|
C Twilight Extermination|QID|26154|U|57172|M|33.83,52.78;34.4,50.3;31.3,50.5;35.4,53.0|Z|Abyssal Depths|CN|N|Head to the temple at the center of the main chamber. Everybody will ignore you, so don't panic. Go up to


GROUP_CONFIG) {
                this.loadingConfigList = null;
                RES.ResourceEvent.dispatchResourceEvent(this, RES.ResourceEvent.CONFIG_LOAD_ERROR);
            }
            else {
                this.dispatchEvent(event);
            }
        };
        /**
         * 检查配置文件里是否含有指定的资源
         * @method RES.hasRes
         * @param key {string} 对应配置文件里的name属性或sbuKeys属性的一项。
         * @returns {boolean}
         */
        p.hasRes = function (key) {
            var type = this.resConfig.getType(key);
            if (type == "") {
                var prefix = RES.AnalyzerBase.getStringTail(key);
                type = this.resConfig.getType(prefix);
                if (type == "") {
                    return false;
                }
            }
            return true;
        };
        /**
         * 运行时动态解析一个配置文件,
         * @param data {any} 配置文件数据，请参考resource.json的配置文件格式。传入对应的json对象即可。
         * @param folder {string} 加载项的路径前缀。
         */
        p.parseConfig = function (data, folder) {
            this.resConfig.parseConfig(data, folder);
            if (!this.configComplete && !this.loadingConfigList) {
                this.configComplete = true;
                this.loadDelayGroups();
            }
        };
        /**
         * 通过key同步获取资源
         * @method RES.getRes
         * @param key {string}
         * @returns {any}
         */
        p.getRes = function (key) {
            var type = this.resConfig.getType(key);
            if (type == "") {
                var prefix = RES.AnalyzerBase.getStringPrefix(key);
                type = this.resConfig.getType(prefix);
                if (type == "") {
                    return null;
                }
            }
            var analyzer = this.$getAnalyzerByType(type);
            return analyzer.getRes(key);
        };
        /**
         * 通过key异步获取资源
         * @method RES.getResAsync
         * @param key {string}
         * @param compFunc {Function} 回调函数。示例：compFunc(data,url):void。
         * @param thisObject {any}
         */
        p.getResAsync = function (key, compFunc, thisObject) {
            var type = this.resConfig.getType(key);
            var name = this.resConfig.getName(key);
            if (type == "") {
                name = RES.AnalyzerBase.getStringPrefix(key);
                type = this.resConfig.getType(name);
                if (type == "") {
                    egret.$callAsync(compFunc, thisObject);
                    return;
                }
            }
            var analyzer = this.$getAnalyzerByType(type);
            var res = analyzer.getRes(key);
            if (res) {
                egret.$callAsync(compFunc, thisObject, res, key);
                return;
            }
            var args = { key: key, compFunc: compFunc, thisObject: thisObject };
            if (this.asyncDic[name]) {
                this.asyncDic[name].push(args);
            }
            else {
                this.asyncDic[name] = [args];
                var resItem = this.resConfig.getResourceItem(name);
                this.resLoader.loadItem(resItem);
            }
        };
        /**
         * 通过url获取资源
         * @method RES.getResByUrl
         * @param url {string}
         * @param compFunc {Function}
         * @param thisObject {any}
         * @param type {string}
         */
        p.getResByUrl = function (url, compFunc, thisObject, type) {
            if (type === void 0


i>No Frames

All Classes

Summary:

Nested |

Field |

Constr |

Method

Detail:

Field |

Constr |

Method

com.fasterxml.jackson.module.jsonSchema.types

Class AdditionalItemsDeserializer

java.lang.Object

com.fasterxml.jackson.databind.JsonDeserializer<ArraySchema.AdditionalItems>

com.fasterxml.jackson.module.jsonSchema.types.AdditionalItemsDeserializer

public class AdditionalItemsDeserializer
extends com.fasterxml.jackson.databind.JsonDeserializer<ArraySchema.AdditionalItems>

Author:

Yoann Rodière (adapted from AdditionalPropertiesDeserializer, by Ignacio del Valle Alles)

Nested


require("sc.synthdefSCRead")

function openSynthdefGuiA(synthfile,panel,params,notified,dontusedefaults,usetext)
	return openSynthdefGuiB(SynthDefs_path..synthfile..".scsyndef",panel,params,notified,dontusedefaults,usetext)
end
function openSynthdefGui(fx,panel,dontusedefaults,usetext,minrows)
	return openSynthdefGuiB(SynthDefs_path..fx.name..".scsyndef",panel,fx.params,fx,dontusedefaults,usetext,minrows)
end
function closeSynthdefGuiControls(parameterCtl)
	for i,v in ipairs(parameterCtl) do
		local res=deleteControl(v)
		--print("deletecontrol "..res.."\n")
	end
end
function closeSynthdefGui(panel)
	emptyPanel(panel)
end
function openSynthdefGuiB(synthfile,panelC,params,notified,dontusedefaults,usetext,minrows)
	--print("openSynthdefGuiB")

	--addPanel{type="vbox",name=synthfile,parent=panelC}
	minrows=minrows or 3
	local panel=addPanel{type="gridbag",parent=panelC}
	if dontusedefaults==nil then dontusedefaults=true end

	local parameterCtl={}
	syntdef=readSCSynthFile(synthfile)
	parameterCtl.syntdef=syntdef
	--prtable(syntdef.parameters)

	params= params or {}
	-------------clean params
	-- delete params not in syntdef.paramnames and in the typical group freq,etc
	local parnames={}
	for i,v in pairs(syntdef.paramnames) do
		if v~="freq" and v~="gate" and v~="out" and v~="amp" and v~="pan" and v~="busin" and v~="busout" then
			parnames[v]=true
		end
	end
	--prtable("xxxxxxxparnames",parnames)
	for k,v in pairs(params) do
		if not parnames[k] then params[k]=nil end
	end
	-------------------------------------
	-- hallar las longitudes de los parametross
	local longitudes={}
	local lasti=0
	local lastv=""
	-- not consecutive number keys
	for i,v in	pairsByKeys(syntdef.paramnames) do
		--println(i," : ",v)
		if lasti > 0 then longitudes[lastv]=i-lasti end
		lasti=i
		lastv=v
	end
	longitudes[lastv]=#syntdef.parameters-lasti+1
	--prtable(longitudes)
	-- get the longest param
	local maxlongi=minrows
	for k,longi in pairs(longitudes) do
		if longi > maxlongi then
			maxlongi = longi
		end
	end
--  print("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
--	prtable(params)
--	prtable(syntdef.paramnames)
--	prtable(syntdef.parameters)
--	prtable(longitudes)
	---------------------------------

	local row=0
	local col=-1
	local function compst(a,b) return a:upper() < b:upper() end
	--for i,v in pairsByKeys(syntdef.paramnames) do
	for i,v in pairsByValues(syntdef.paramnames,compst) do
		--print("xxxxxxxxxxxparamnames ",i," ",v)
		--prtable(params)
		local defval, defval_s
		if v~="freq" and v~="gate" and v~="out" and v~="amp" and v~="pan" and v~="busin" and v~="busout" then
			if longitudes[v]>1 then compuesto=true else compuesto=


.dart';
import 'package:fast_immutable_collections/fast_immutable_collections.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:lichess_mobile/src/model/auth/auth_session.dart';
import 'package:lichess_mobile/src/model/common/id.dart';
import 'package:lichess_mobile/src/model/game/exported_game.dart';
import 'package:lichess_mobile/src/model/game/game_repository.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

part 'game_bookmarks.freezed.dart';
part 'game_bookmarks.g.dart';

const _nbPerPage = 20;

/// A provider that paginates the game bookmarks for the current app user.
@riverpod
class GameBookmarksPaginator extends _$GameBookmarksPaginator {
  final _list = <LightExportedGameWithPov>[];

  GameRepository get _gameRepository => ref.read(gameRepositoryProvider);

  @override
  Future<GameBookmarksPaginatorState> build() async {
    ref.onDispose(() {
      _list.clear();
    });

    final session = ref.watch(authSessionProvider);

    if (session == null) {
      return GameBookmarksPaginatorState(
        gameList: <LightExportedGameWithPov>[].toIList(),
        isLoading: false,
        hasMore: false,
        hasError: false,
      );
    }

    final games = _gameRepository.getBookmarkedGames(session);

    _list.addAll(await games);

    return GameBookmarksPaginatorState(
      gameList: _list.toIList(),
      isLoading: false,
      hasMore: true,
      hasError: false,
    );
  }

  /// Fetches the next page of games.
  Future<void> getNext() async {
    if (!state.hasValue) return;

    final session = ref.read(authSessionProvider);

    if (session == null) return;

    final currentVal = state.requireValue;
    state = AsyncData(currentVal.copyWith(isLoading: true));
    try {
      final value = await _gameRepository.getBookmarkedGames(
        session,
        max: _nbPerPage,
        until: _list.last.game.createdAt,
      );
      if (value.isEmpty) {
        state = AsyncData(currentVal.copyWith(hasMore: false, isLoading: false));
        return;
      }

      _list.addAll(value);

      state = AsyncData(
        currentVal.copyWith(
          gameList: _list.toIList(),
          isLoading: false,
          hasMore: value.length == _nbPerPage,
        ),
      );
    } catch (e) {
      state = AsyncData(currentVal.copyWith(isLoading: false, hasError: true));
    }
  }

  void removeBookmark(GameId id) {
    if (!state.hasValue) return;

    final gameList = state.requireValue.gameList;
    final entry = gameList.firstWhereOrNull((e) => e.game.id == id);
    if (entry == null) return;

    final index = gameList.indexOf(entry);

    state = AsyncData(state.requireValue.copyWith(gameList: gameList.removeAt(index)));
  }
}

@freezed
sealed class GameBookmarksPaginatorState with _$GameBookmarksPaginatorState {
  const factory GameBookmarksPaginatorState({
    required IList<LightExportedGameWithPov> gameList,
    required bool isLoading,
    required bool hasMore,
    required bool hasError,
  }) = _GameBookmarksPaginatorState;
}
import 'package:clock/clock.dart';
import 'package:dartchess/dartchess.dart';
import 'package:deep_pick/d