diff --git a/.changeset/cold-carrots-relate.md b/.changeset/cold-carrots-relate.md
new file mode 100644
index 0000000000..2fd582f8b8
--- /dev/null
+++ b/.changeset/cold-carrots-relate.md
@@ -0,0 +1,5 @@
+---
+"create-lz-oapp": patch
+---
+
+Add OVault evm example to create-lz-oapp
diff --git a/.changeset/few-dots-dance.md b/.changeset/few-dots-dance.md
new file mode 100644
index 0000000000..e5bcbb6268
--- /dev/null
+++ b/.changeset/few-dots-dance.md
@@ -0,0 +1,7 @@
+---
+"create-lz-oapp": patch
+"@layerzerolabs/ovault-evm-example": patch
+"@layerzerolabs/ovault-evm": patch
+---
+
+publishing ovault
diff --git a/examples/ovault-evm/.env.example b/examples/ovault-evm/.env.example
new file mode 100644
index 0000000000..197ba1d67a
--- /dev/null
+++ b/examples/ovault-evm/.env.example
@@ -0,0 +1,15 @@
+# .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-
+# / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \
+# `-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-'
+#
+# Example environment configuration
+#
+# .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-. .-.-
+# / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \
+# `-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-' `-`-'
+
+# By default, the examples support both mnemonic-based and private key-based authentication
+#
+# You don't need to set both of these values, just pick the one that you prefer and set that one
+MNEMONIC=
+PRIVATE_KEY=
\ No newline at end of file
diff --git a/examples/ovault-evm/.eslintignore b/examples/ovault-evm/.eslintignore
new file mode 100644
index 0000000000..ee9f768fda
--- /dev/null
+++ b/examples/ovault-evm/.eslintignore
@@ -0,0 +1,10 @@
+artifacts
+cache
+dist
+node_modules
+out
+*.log
+*.sol
+*.yaml
+*.lock
+package-lock.json
\ No newline at end of file
diff --git a/examples/ovault-evm/.eslintrc.js b/examples/ovault-evm/.eslintrc.js
new file mode 100644
index 0000000000..30bd543101
--- /dev/null
+++ b/examples/ovault-evm/.eslintrc.js
@@ -0,0 +1,12 @@
+require('@rushstack/eslint-patch/modern-module-resolution');
+
+module.exports = {
+ root: true,
+ extends: ['@layerzerolabs/eslint-config-next/recommended'],
+ rules: {
+ // @layerzerolabs/eslint-config-next defines rules for turborepo-based projects
+ // that are not relevant for this particular project
+ 'turbo/no-undeclared-env-vars': 'off',
+ 'import/no-unresolved': 'warn', // Updated to warn to avoid erratic popping up of this particular error for '@layerzerolabs/metadata-tools' even when the package has been installed correctly
+ },
+};
diff --git a/examples/ovault-evm/.gitignore b/examples/ovault-evm/.gitignore
new file mode 100644
index 0000000000..9c1833ddcb
--- /dev/null
+++ b/examples/ovault-evm/.gitignore
@@ -0,0 +1,27 @@
+node_modules
+.env
+coverage
+coverage.json
+typechain
+typechain-types
+
+# Hardhat files
+cache
+artifacts
+
+
+# LayerZero specific files
+.layerzero
+
+# foundry test compilation files
+out
+
+# pnpm
+pnpm-error.log
+
+# Editor and OS files
+.DS_Store
+.idea
+
+broadcast
+deployments
diff --git a/examples/ovault-evm/.nvmrc b/examples/ovault-evm/.nvmrc
new file mode 100644
index 0000000000..b714151ef9
--- /dev/null
+++ b/examples/ovault-evm/.nvmrc
@@ -0,0 +1 @@
+v18.18.0
\ No newline at end of file
diff --git a/examples/ovault-evm/.prettierignore b/examples/ovault-evm/.prettierignore
new file mode 100644
index 0000000000..4445ae512a
--- /dev/null
+++ b/examples/ovault-evm/.prettierignore
@@ -0,0 +1,11 @@
+artifacts/
+cache/
+dist/
+node_modules/
+out/
+*.log
+*ignore
+*.yaml
+*.lock
+package-lock.json
+package.json
\ No newline at end of file
diff --git a/examples/ovault-evm/.prettierrc.js b/examples/ovault-evm/.prettierrc.js
new file mode 100644
index 0000000000..6f55b4019a
--- /dev/null
+++ b/examples/ovault-evm/.prettierrc.js
@@ -0,0 +1,3 @@
+module.exports = {
+ ...require('@layerzerolabs/prettier-config-next'),
+};
diff --git a/examples/ovault-evm/README.md b/examples/ovault-evm/README.md
new file mode 100644
index 0000000000..dbbd961a63
--- /dev/null
+++ b/examples/ovault-evm/README.md
@@ -0,0 +1,731 @@
+
+
+
+
+
+
+
+ Homepage | Docs | Developers
+
+
+Omnichain Vault Example (with Composer)
+
+Deploy **omnichain ERC-4626 vaults** that enable users to deposit assets from any chain and receive shares on their preferred network through a single transaction.
+
+## Table of Contents
+
+- [Prerequisite Knowledge](#prerequisite-knowledge)
+- [Introduction](#introduction)
+- [Requirements](#requirements)
+- [Scaffold this Example](#scaffold-this-example)
+- [Helper Tasks](#helper-tasks)
+- [Setup](#setup)
+- [Build](#build)
+- [Deploy](#deploy)
+- [Enable Messaging](#enable-messaging)
+- [Cross-Chain Operations](#cross-chain-operations)
+- [Next Steps](#next-steps)
+- [Production Deployment Checklist](#production-deployment-checklist)
+- [Appendix](#appendix)
+
+## Prerequisite Knowledge
+
+Before using this example, you should understand:
+
+- [**OFT Standard**](https://docs.layerzero.network/v2/developers/evm/oft/quickstart): How to deploy and configure Omnichain Fungible Tokens
+- [**Composer Pattern**](https://docs.layerzero.network/v2/developers/evm/composer/overview): How to implement cross-chain composer messages
+- [**ERC-4626 Vaults**](https://eips.ethereum.org/EIPS/eip-4626): How the tokenized vault standard interface works for `deposit`/`redeem` operations
+
+## Introduction
+
+OVault extends the ERC-4626 tokenized vault standard with LayerZero's omnichain messaging. The architecture uses a **hub-and-spoke model** where:
+
+- **Hub Chain**: Hosts the ERC-4626 vault, OVault Composer, and Share OFT Adapter (lockbox model)
+- **Spoke Chains**: Host Asset OFTs and Share OFTs that connect to the hub
+
+OVault makes it extremely easy to move assets and shares between any supported chains, while also enabling cross-chain vault operations. Users can deposit assets from any chain to receive shares on any destination chain, redeem shares from any chain to receive assets on any destination chain, or simply transfer these tokens between chains - all through a unified interface.
+
+## Requirements
+
+- **git**
+- **Node.js** ≥ 18.18
+- **pnpm** ≥ 8.0 (with `corepack` enabled)
+- **Testnet funds** on at least 2 chains
+
+## Scaffold this Example
+
+```bash
+npx create-lz-oapp@latest --example ovault-evm
+```
+
+## Helper Tasks
+
+This example includes LayerZero Hardhat helper tasks. [See all available tasks](#layerzero-hardhat-helper-tasks-detailed).
+
+## Setup
+
+### 1. Environment Configuration
+
+Copy and configure your environment:
+
+```bash
+cp .env.example .env
+```
+
+Fill in your `.env`:
+
+```bash
+PRIVATE_KEY="YOUR_PRIVATE_KEY_HERE"
+```
+
+### 2. Network Configuration
+
+Update `hardhat.config.ts` to include your desired networks:
+
+```typescript
+const config: HardhatUserConfig = {
+ networks: {
+ base: {
+ eid: EndpointId.BASESEP_V2_TESTNET,
+ url:
+ process.env.RPC_URL_BASESEP_TESTNET ||
+ "https://base-sepolia.gateway.tenderly.co",
+ accounts,
+ },
+ arbitrum: {
+ eid: EndpointId.ARBSEP_V2_TESTNET,
+ url:
+ process.env.RPC_URL_ARBSEP_TESTNET ||
+ "https://arbitrum-sepolia.gateway.tenderly.co",
+ accounts,
+ },
+ optimism: {
+ eid: EndpointId.OPTSEP_V2_TESTNET,
+ url:
+ process.env.RPC_URL_OPTSEP_TESTNET ||
+ "https://optimism-sepolia.gateway.tenderly.co",
+ accounts,
+ },
+ },
+ // ... rest of config
+};
+```
+
+### 3. Deployment Configuration
+
+Configure your vault deployment in `devtools/deployConfig.ts`. This file controls which chains get which contracts and their deployment settings:
+
+> **Note**: If your asset is already an OFT, you do not need to deploy a separate mesh. The only requirement is that the asset OFT supports the hub chain you are deploying to.
+
+Asset and share token networks don't need to perfectly overlap. Configure based on your requirements:
+
+```typescript
+import { EndpointId } from "@layerzerolabs/lz-definitions";
+
+export const DEPLOYMENT_CONFIG = {
+ // Vault chain configuration (where the ERC4626 vault lives)
+ vault: {
+ eid: EndpointId.ARBSEP_V2_TESTNET, // Your hub chain
+ contracts: {
+ vault: "MyERC4626",
+ shareAdapter: "MyShareOFTAdapter",
+ composer: "MyOVaultComposer",
+ },
+ // IF YOU HAVE A PRE-DEPLOYED ASSET, SET THE ADDRESS HERE
+ assetAddress: undefined, // Set to '0x...' to use existing asset
+ },
+
+ // Asset OFT configuration (deployed on all chains)
+ asset: {
+ contract: "MyAssetOFT",
+ metadata: {
+ name: "MyAssetOFT",
+ symbol: "ASSET",
+ },
+ chains: [
+ EndpointId.OPTSEP_V2_TESTNET,
+ EndpointId.BASESEP_V2_TESTNET,
+ EndpointId.ARBSEP_V2_TESTNET, // Include hub chain
+ ],
+ },
+
+ // Share OFT configuration (only on spoke chains)
+ share: {
+ contract: "MyShareOFT",
+ metadata: {
+ name: "MyShareOFT",
+ symbol: "SHARE",
+ },
+ chains: [
+ EndpointId.OPTSEP_V2_TESTNET,
+ EndpointId.BASESEP_V2_TESTNET,
+ // Do NOT include hub chain (it uses ShareOFTAdapter)
+ ],
+ },
+};
+```
+
+**Key Configuration Points:**
+
+- **Hub Chain**: Set `vault.eid` to your chosen hub chain's endpoint ID
+- **Asset Chains**: Include all chains where you want asset OFTs (including the hub chain)
+- **Share Chains**: Include only spoke chains (exclude hub, which uses the ShareOFTAdapter)
+- **Pre-deployed Asset**: Set `vault.assetAddress` if using an existing asset token
+
+The deployment scripts automatically determine what to deploy based on:
+
+- Vault contracts (ERC4626, ShareOFTAdapter, Composer) deploy only on the hub chain
+- Asset OFTs deploy on chains listed in `asset.chains` (unless using pre-deployed asset)
+- Share OFTs deploy on chains listed in `share.chains`
+
+## Build
+
+Compile your contracts:
+
+```bash
+pnpm compile`
+```
+
+> **Testing Note**: If you're deploying the asset OFT from scratch for testing purposes, you'll need to mint an initial supply. Uncomment the `_mint` line in the `MyAssetOFT` constructor to provide initial liquidity. This ensures you have tokens to test deposit and cross-chain transfer functionality.
+>
+> **⚠️ Warning**: Do NOT mint share tokens directly in `MyShareOFT`. Share tokens must only be minted by the vault contract during deposits to maintain the correct share-to-asset ratio. Manually minting share tokens breaks the vault's accounting and can lead to incorrect redemption values. The mint line in `MyShareOFT` should only be uncommented for UI/integration testing, never in production.
+
+## Deploy
+
+Deploy all vault contracts across all configured chains:
+
+```bash
+pnpm hardhat lz:deploy --tags ovault
+```
+
+This single command will:
+
+- Deploy `AssetOFTs` to all chains in `deployConfig.asset.chains`
+- Deploy the vault system (`ERC4626`, `ShareOFTAdapter`, `Composer`) on the hub chain
+- Deploy `ShareOFTs` to all spoke chains in `deployConfig.share.chains`
+
+The deployment scripts automatically skip existing deployments, so you can safely run this command when expanding to new chains. Simply add the new chain endpoints to your `deployConfig.ts` and run the deploy command again.
+
+> **Tip**: To deploy to specific networks only, use the `--networks` flag:
+>
+> ```bash
+> pnpm hardhat lz:deploy --tags ovault --networks arbitrum,optimism
+> ```
+
+## Enable Messaging
+
+### 1. Configure Asset OFT Network
+
+Set up your Asset OFT configuration in `layerzero.asset.config.ts`. The example uses the `TwoWayConfig` pattern for simplified bidirectional connections:
+
+```typescript
+import { EndpointId } from "@layerzerolabs/lz-definitions";
+import { ExecutorOptionType } from "@layerzerolabs/lz-v2-utilities";
+import {
+ TwoWayConfig,
+ generateConnectionsConfig,
+} from "@layerzerolabs/metadata-tools";
+import { OAppEnforcedOption } from "@layerzerolabs/toolbox-hardhat";
+
+const optimismContract: OmniPointHardhat = {
+ eid: EndpointId.OPTSEP_V2_TESTNET.valueOf(),
+ contractName: "MyAssetOFT",
+};
+
+const arbitrumContract: OmniPointHardhat = {
+ eid: EndpointId.ARBSEP_V2_TESTNET.valueOf(),
+ contractName: "MyAssetOFT",
+};
+
+const baseContract: OmniPointHardhat = {
+ eid: EndpointId.BASESEP_V2_TESTNET.valueOf(),
+ contractName: "MyAssetOFT",
+};
+
+// Configure gas limits for message execution
+const EVM_ENFORCED_OPTIONS: OAppEnforcedOption[] = [
+ {
+ msgType: 1,
+ optionType: ExecutorOptionType.LZ_RECEIVE,
+ gas: 100_000,
+ value: 0,
+ },
+ {
+ msgType: 2,
+ optionType: ExecutorOptionType.LZ_RECEIVE,
+ gas: 100_000,
+ value: 0,
+ },
+];
+
+// Pathway configuration (automatically bidirectional)
+const pathways: TwoWayConfig[] = [
+ [
+ optimismContract, // Chain A
+ arbitrumContract, // Chain B
+ [["LayerZero Labs"], []], // DVN configuration
+ [1, 1], // Confirmations [A→B, B→A]
+ [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS], // Gas options
+ ],
+ [
+ optimismContract,
+ baseContract,
+ [["LayerZero Labs"], []],
+ [1, 1],
+ [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS],
+ ],
+ [
+ arbitrumContract,
+ baseContract,
+ [["LayerZero Labs"], []],
+ [1, 1],
+ [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS],
+ ],
+];
+
+export default async function () {
+ const connections = await generateConnectionsConfig(pathways);
+ return {
+ contracts: [
+ { contract: optimismContract },
+ { contract: arbitrumContract },
+ { contract: baseContract },
+ ],
+ connections,
+ };
+}
+```
+
+**To modify for your networks:**
+
+1. Update the contract definitions with your target chain EIDs
+2. Adjust gas limits in `EVM_ENFORCED_OPTIONS` based on your contract requirements
+3. Configure DVN settings in pathways (currently using LayerZero Labs DVN)
+4. Update confirmations based on your security requirements
+
+### 2. Configure Share OFT Network
+
+Set up your Share OFT configuration in `layerzero.share.config.ts`. **Critical**: The hub chain must use `MyShareOFTAdapter` (lockbox model):
+
+```typescript
+import { EndpointId } from "@layerzerolabs/lz-definitions";
+import { ExecutorOptionType } from "@layerzerolabs/lz-v2-utilities";
+import {
+ TwoWayConfig,
+ generateConnectionsConfig,
+} from "@layerzerolabs/metadata-tools";
+import { OAppEnforcedOption } from "@layerzerolabs/toolbox-hardhat";
+
+const optimismContract: OmniPointHardhat = {
+ eid: EndpointId.OPTSEP_V2_TESTNET.valueOf(),
+ contractName: "MyShareOFT", // Standard OFT (spoke)
+};
+
+const arbitrumContract: OmniPointHardhat = {
+ eid: EndpointId.BASESEP_V2_TESTNET.valueOf(), // Note: Base is the hub chain
+ contractName: "MyShareOFTAdapter", // Adapter (hub/lockbox)
+};
+
+const baseContract: OmniPointHardhat = {
+ eid: EndpointId.ARBSEP_V2_TESTNET.valueOf(),
+ contractName: "MyShareOFT", // Standard OFT (spoke)
+};
+
+// Same enforced options as asset config
+const EVM_ENFORCED_OPTIONS: OAppEnforcedOption[] = [
+ {
+ msgType: 1,
+ optionType: ExecutorOptionType.LZ_RECEIVE,
+ gas: 100_000,
+ value: 0,
+ },
+ {
+ msgType: 2,
+ optionType: ExecutorOptionType.LZ_RECEIVE,
+ gas: 100_000,
+ value: 0,
+ },
+];
+
+// Same pathway structure as asset config
+const pathways: TwoWayConfig[] = [
+ [
+ optimismContract, // Spoke
+ arbitrumContract, // Hub (Base chain with adapter)
+ [["LayerZero Labs"], []],
+ [1, 1],
+ [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS],
+ ],
+ [
+ optimismContract, // Spoke
+ baseContract, // Spoke (Arbitrum)
+ [["LayerZero Labs"], []],
+ [1, 1],
+ [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS],
+ ],
+ [
+ arbitrumContract, // Hub (Base)
+ baseContract, // Spoke (Arbitrum)
+ [["LayerZero Labs"], []],
+ [1, 1],
+ [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS],
+ ],
+];
+
+export default async function () {
+ const connections = await generateConnectionsConfig(pathways);
+ return {
+ contracts: [
+ { contract: optimismContract },
+ { contract: arbitrumContract },
+ { contract: baseContract },
+ ],
+ connections,
+ };
+}
+```
+
+**Important Notes:**
+
+- **Hub Chain**: In this example, Base is the hub (uses `MyShareOFTAdapter`)
+- **Contract Types**: Only the hub chain uses `MyShareOFTAdapter`; all other chains use `MyShareOFT`
+
+### 3. Customizing for Your Networks
+
+To use different chains or network configurations:
+
+**For Testnet Deployment:**
+
+- Replace `EndpointId.OPTSEP_V2_TESTNET` with `EndpointId.OPTSEP_V2_TESTNET`
+- Replace `EndpointId.BASESEP_V2_TESTNET` with `EndpointId.BASESEP_V2_TESTNET`
+- Replace `EndpointId.ARBSEP_V2_TESTNET` with `EndpointId.ARBSEP_V2_TESTNET`
+
+**For Different Hub Chain:**
+
+- Move the `MyShareOFTAdapter` contract name to your hub chain deployment
+
+**For Additional Chains:**
+
+- Add new contract definitions with appropriate EIDs
+- Add pathway configurations between the new chain and existing chains
+- Deploy Asset OFTs and Share OFTs to the new chains
+
+### 4. Wire Asset OFT Network
+
+Configure and wire the Asset OFT connections:
+
+```bash
+# Wire Asset OFT network
+pnpm hardhat lz:oapp:wire --oapp-config layerzero.asset.config.ts
+```
+
+### 5. Wire Share OFT Network
+
+Configure and wire the Share OFT connections:
+
+```bash
+# Wire Share OFT network
+pnpm hardhat lz:oapp:wire --oapp-config layerzero.share.config.ts
+```
+
+## Cross-Chain Operations
+
+The `lz:ovault:send` task handles four different operation types automatically based on source and destination chains. Here's how to use each:
+
+### 1. Cross-Chain Vault Operations (Different Chains)
+
+**Asset Deposit (Any Chain → Any Other Chain)**
+
+Send assets from any spoke chain to receive vault shares on any other chain:
+
+```bash
+# Send 1.0 asset from Arbitrum to get shares on Optimism
+npx hardhat lz:ovault:send \
+ --src-eid 30110 \
+ --dst-eid 30111 \
+ --amount 1.0 \
+ --to 0xYourRecipientAddress \
+ --token-type asset
+```
+
+**Flow**: Arbitrum (asset) → Base Hub (vault deposit) → Optimism (shares)
+
+**Share Redemption (Any Chain → Any Other Chain)**
+
+Send shares from any spoke chain to receive underlying assets on any other chain:
+
+```bash
+# Send 0.9 shares from Optimism to get assets on Arbitrum
+npx hardhat lz:ovault:send \
+ --src-eid 30111 \
+ --dst-eid 30110 \
+ --amount 0.9 \
+ --to 0xYourRecipientAddress \
+ --token-type share
+```
+
+**Flow**: Optimism (shares) → Base Hub (vault redeem) → Arbitrum (assets)
+
+### 2. Hub Chain Vault Operations (Same Chain)
+
+**Direct Vault Deposit (Hub → Hub)**
+
+Deposit assets directly into the vault on the hub chain:
+
+```bash
+# Deposit 2.0 assets into vault on hub chain (Base)
+npx hardhat lz:ovault:send \
+ --src-eid 30184 \
+ --dst-eid 30184 \
+ --amount 2.0 \
+ --to 0xYourRecipientAddress \
+ --token-type asset
+```
+
+**Flow**: Direct vault interaction (no LayerZero messaging)
+
+- Automatically handles ERC20 approval
+- Calls `vault.deposit()` directly
+- Most gas-efficient option
+
+**Direct Vault Redemption (Hub → Hub)**
+
+Redeem shares directly from the vault on the hub chain:
+
+```bash
+# Redeem 1.5 shares from vault on hub chain (Base)
+npx hardhat lz:ovault:send \
+ --src-eid 30184 \
+ --dst-eid 30184 \
+ --amount 1.5 \
+ --to 0xYourRecipientAddress \
+ --token-type share
+```
+
+**Flow**: Direct vault interaction (no LayerZero messaging)
+
+- Calls `vault.redeem()` directly
+- Most gas-efficient option
+
+### 3. Hub-to-Spoke Operations (Send from Hub)
+
+**Send Assets from Hub to Spoke Chain**
+
+Send asset tokens from the hub chain to any spoke chain:
+
+```bash
+# Send 1.0 asset tokens from hub (Base) to Arbitrum
+npx hardhat lz:ovault:send \
+ --src-eid 30184 \
+ --dst-eid 30110 \
+ --amount 1.0 \
+ --to 0xYourRecipientAddress \
+ --token-type asset
+```
+
+**Flow**: Direct OFT transfer (no composer needed)
+
+- More efficient than composer pattern
+- Standard LayerZero OFT send
+
+**Send Shares from Hub to Spoke Chain**
+
+Send share tokens from the hub chain to any spoke chain:
+
+```bash
+# Send 0.8 share tokens from hub (Base) to Optimism
+npx hardhat lz:ovault:send \
+ --src-eid 30184 \
+ --dst-eid 30111 \
+ --amount 0.8 \
+ --to 0xYourRecipientAddress \
+ --token-type share
+```
+
+**Flow**: Direct OFT transfer (no composer needed)
+
+### 4. Spoke-to-Hub Operations (With Vault Interaction)
+
+**Send Assets to Hub for Vault Deposit**
+
+Send assets from any spoke chain to the hub for vault deposit:
+
+```bash
+# Send 1.5 assets from Arbitrum to hub for vault deposit
+npx hardhat lz:ovault:send \
+ --src-eid 30110 \
+ --dst-eid 30184 \
+ --amount 1.5 \
+ --to 0xYourRecipientAddress \
+ --token-type asset
+```
+
+**Flow**: Arbitrum (asset) → Base Hub (vault deposit → shares to recipient)
+
+- Uses composer for vault interaction
+- Optimized gas limits for hub-only operations
+
+**Send Shares to Hub for Vault Redemption**
+
+Send shares from any spoke chain to the hub for vault redemption:
+
+```bash
+# Send 1.2 shares from Optimism to hub for vault redemption
+npx hardhat lz:ovault:send \
+ --src-eid 30111 \
+ --dst-eid 30184 \
+ --amount 1.2 \
+ --to 0xYourRecipientAddress \
+ --token-type share
+```
+
+**Flow**: Optimism (shares) → Base Hub (vault redeem → assets to recipient)
+
+- Uses composer for vault interaction
+- Optimized gas limits for hub-only operations
+
+### Advanced Parameters
+
+**Basic Parameters:**
+
+- `--src-eid`: Source chain [Endpoint ID](https://docs.layerzero.network/v2/developers/evm/technical-reference/deployed-contracts)
+- `--dst-eid`: Destination chain Endpoint ID
+- `--amount`: Amount to send (human readable, e.g., "1.5")
+- `--to`: Recipient address (20-byte hex for EVM)
+- `--token-type`: Either `asset` or `share`
+
+**Optional Parameters:**
+
+- `--min-amount`: Minimum amount to receive (slippage protection)
+- `--lz-receive-gas`: Gas for lzReceive operation
+- `--lz-receive-value`: Value for lzReceive operation (in wei)
+- `--lz-compose-gas`: Gas for lzCompose operation (auto-optimized by default)
+- `--lz-compose-value`: Value for lzCompose operation (in wei)
+- `--oft-address`: Override source OFT address
+
+**Gas Optimization:**
+
+The task automatically optimizes gas limits based on operation type:
+
+- **Hub-only operations**: 175,000 gas (local transfers)
+- **Cross-chain operations**: 395,000 gas (LayerZero messaging)
+- **No compose needed**: 0 gas (direct OFT sends)
+
+### Example Workflows
+
+**Complete Deposit Cycle:**
+
+```bash
+# 1. Deposit assets cross-chain (Arbitrum → Hub → Optimism)
+npx hardhat lz:ovault:send --src-eid 30110 --dst-eid 30111 --amount 10.0 --to 0xRecipient --token-type asset
+
+# 2. Later redeem shares back (Optimism → Hub → Arbitrum)
+npx hardhat lz:ovault:send --src-eid 30111 --dst-eid 30110 --amount 9.5 --to 0xRecipient --token-type share
+```
+
+**Hub Chain Management:**
+
+```bash
+# 1. Deposit directly on hub (most efficient)
+npx hardhat lz:ovault:send --src-eid 30184 --dst-eid 30184 --amount 5.0 --to 0xRecipient --token-type asset
+
+# 2. Send shares to other chains as needed
+npx hardhat lz:ovault:send --src-eid 30184 --dst-eid 30110 --amount 2.0 --to 0xRecipient --token-type share
+```
+
+## Next Steps
+
+After completing your deployment:
+
+1. **Monitor Transactions**: Use [LayerZero Scan](https://testnet.layerzeroscan.com) to track cross-chain operations
+2. **Production Checklist**: Review the [Production Deployment Checklist](#production-deployment-checklist)
+3. **Security Configuration**: Set up [DVN and Executor configuration](https://docs.layerzero.network/v2/developers/evm/oft/quickstart#2-wire-messaging-libraries-and-configurations)
+
+## Production Deployment Checklist
+
+- [ ] **Security Stack Configuration**
+
+ - [ ] Configure [DVNs](https://docs.layerzero.network/v2/developers/evm/oft/quickstart#2-wire-messaging-libraries-and-configurations) for your security requirements
+ - [ ] Set appropriate [confirmation blocks](https://docs.layerzero.network/v2/developers/evm/oft/quickstart#2-wire-messaging-libraries-and-configurations)
+ - [ ] Configure [Executors](https://docs.layerzero.network/v2/developers/evm/oft/quickstart#2-wire-messaging-libraries-and-configurations) with proper gas settings
+
+- [ ] **Gas & Options Configuration**
+
+ - [ ] Profile gas usage with [Message Options](https://docs.layerzero.network/v2/developers/evm/configuration/options)
+ - [ ] Set proper `lzReceive` gas limits for vault operations
+ - [ ] Configure `lzCompose` gas limits for second hop transfers
+ - [ ] Test gas estimation across all supported routes
+
+- [ ] **Vault Configuration**
+
+ - [ ] Ensure Share OFT on hub uses OFTAdapter (lockbox model)
+ - [ ] Configure appropriate slippage tolerances for vault volatility
+ - [ ] Set up vault access controls and admin functions
+ - [ ] Test vault preview functions (`previewDeposit`/`previewRedeem`)
+
+## Appendix
+
+### Running Tests
+
+Run the test suite to verify your deployment:
+
+```bash
+# Run all tests
+pnpm test
+```
+
+### Adding Other Chains
+
+To add additional chains to your OVault:
+
+1. **Update Hardhat Config**: Add new network to `hardhat.config.ts`
+2. **Deploy Contracts**: Deploy Asset OFT and Share OFT to new chain
+3. **Update Configs**: Add new chain to both `layerzero.asset.config.ts` and `layerzero.share.config.ts`
+4. **Add Connections**: Define peer connections from/to new chain
+5. **Wire Networks**: Re-run wiring commands with updated configs
+
+### LayerZero Hardhat Helper Tasks (Detailed)
+
+This example includes several built-in tasks. View all available tasks:
+
+```bash
+# List all tasks
+pnpm hardhat
+
+# OFT-specific tasks
+pnpm hardhat lz:oft:send # Send OFT tokens cross-chain
+pnpm hardhat lz:ovault:send # Send through OVault composer
+
+# OApp configuration tasks
+pnpm hardhat lz:oapp:wire # Wire OApp connections
+
+# General LayerZero tasks
+pnpm hardhat lz:deploy # Deploy contracts
+```
+
+### Troubleshooting
+
+**Common Issues:**
+
+1. **"Share adapter must be lockbox" Error**
+
+ - **Cause**: Share OFT on hub chain is not configured as OFTAdapter
+ - **Solution**: Ensure `MyShareOFTAdapter` is deployed on hub, not `MyShareOFT`
+
+2. **Cross-chain vault operation fails**
+
+ - **Diagnostic**: Check [LayerZero Scan](https://testnet.layerzeroscan.com) for message status
+ - **Solutions**: Verify composer gas allowances, check vault liquidity, increase slippage tolerance
+
+3. **"Slippage exceeded during vault operation"**
+
+ - **Cause**: Share price changed during cross-chain operation
+ - **Solution**: Increase slippage tolerance with `--min-amount` parameter
+
+4. **Gas estimation errors**
+ - **Cause**: Insufficient gas limits for complex operations
+ - **Solution**: Increase `lzReceive` and `lzCompose` gas limits in configuration
+
+---
+
+**Need help?** Reach out in the [LayerZero Discord](https://discord-layerzero.netlify.app/discord) or check the [Developer Docs](https://docs.layerzero.network/).
diff --git a/examples/ovault-evm/contracts/MyAssetOFT.sol b/examples/ovault-evm/contracts/MyAssetOFT.sol
new file mode 100644
index 0000000000..4c068070fd
--- /dev/null
+++ b/examples/ovault-evm/contracts/MyAssetOFT.sol
@@ -0,0 +1,36 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.20;
+
+import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
+import { OFT } from "@layerzerolabs/oft-evm/contracts/OFT.sol";
+
+/**
+ * @title MyAssetOFT
+ * @notice ERC20 representation of the vault's asset token on a spoke chain for cross-chain functionality
+ * @dev This contract represents the vault's underlying asset on spoke chains. It inherits from
+ * LayerZero's OFT (Omnichain Fungible Token) to enable seamless cross-chain transfers of the
+ * vault's asset tokens between the hub chain and spoke chains.
+ *
+ * The asset OFT acts as a bridgeable ERC20 representation of the vault's collateral asset, allowing
+ * users to move their assets across supported chains while maintaining fungibility.
+ */
+contract MyAssetOFT is OFT {
+ /**
+ * @notice Constructs the Asset OFT contract
+ * @dev Initializes the OFT with LayerZero endpoint and sets up ownership
+ * @param _name The name of the asset token
+ * @param _symbol The symbol of the asset token
+ * @param _lzEndpoint The address of the LayerZero endpoint on this chain
+ * @param _delegate The address that will have owner privileges
+ */
+ constructor(
+ string memory _name,
+ string memory _symbol,
+ address _lzEndpoint,
+ address _delegate
+ ) OFT(_name, _symbol, _lzEndpoint, _delegate) Ownable(_delegate) {
+ // NOTE: Uncomment the line below if you need to mint initial supply
+ // This can be useful for testing or if the asset needs initial liquidity
+ // _mint(msg.sender, 1 ether);
+ }
+}
diff --git a/examples/ovault-evm/contracts/MyERC4626.sol b/examples/ovault-evm/contracts/MyERC4626.sol
new file mode 100644
index 0000000000..a7fda958d2
--- /dev/null
+++ b/examples/ovault-evm/contracts/MyERC4626.sol
@@ -0,0 +1,57 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.22;
+
+import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
+import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
+import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+import { ERC4626 } from "@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol";
+
+import { OFTAdapter } from "@layerzerolabs/oft-evm/contracts/OFTAdapter.sol";
+
+/**
+ * @title MyERC4626
+ * @notice ERC4626 tokenized vault implementation for cross-chain vault operations
+ * @dev SECURITY CONSIDERATIONS:
+ * - Donation/inflation attacks on empty or low-liquidity vaults
+ * - Share price manipulation via large donations before first deposit
+ * - Slippage during deposit/redeem operations in low-liquidity conditions
+ * - First depositor advantage scenarios
+ *
+ * See OpenZeppelin ERC4626 documentation for full risk analysis:
+ * https://docs.openzeppelin.com/contracts/4.x/erc4626#inflation-attack
+ *
+ * MITIGATIONS:
+ * - OpenZeppelin v4.9+ includes virtual assets/shares to mitigate inflation attacks
+ * - Deployers should consider initial deposits to prevent manipulation
+ */
+contract MyERC4626 is ERC4626 {
+ /**
+ * @notice Creates a new ERC4626 vault
+ * @dev Initializes the vault with virtual assets/shares protection against inflation attacks
+ * @param _name The name of the vault token
+ * @param _symbol The symbol of the vault token
+ * @param _asset The underlying asset that the vault accepts
+ */
+ constructor(string memory _name, string memory _symbol, IERC20 _asset) ERC20(_name, _symbol) ERC4626(_asset) {}
+}
+
+/**
+ * @title MyShareOFTAdapter
+ * @notice OFT adapter for vault shares enabling cross-chain transfers
+ * @dev The share token MUST be an OFT adapter (lockbox).
+ * @dev A mint-burn adapter would not work since it transforms `ShareERC20::totalSupply()`
+ */
+contract MyShareOFTAdapter is OFTAdapter {
+ /**
+ * @notice Creates a new OFT adapter for vault shares
+ * @dev Sets up cross-chain token transfer capabilities for vault shares
+ * @param _token The vault share token to adapt for cross-chain transfers
+ * @param _lzEndpoint The LayerZero endpoint for this chain
+ * @param _delegate The account with administrative privileges
+ */
+ constructor(
+ address _token,
+ address _lzEndpoint,
+ address _delegate
+ ) OFTAdapter(_token, _lzEndpoint, _delegate) Ownable(_delegate) {}
+}
diff --git a/examples/ovault-evm/contracts/MyOVaultComposer.sol b/examples/ovault-evm/contracts/MyOVaultComposer.sol
new file mode 100644
index 0000000000..b8bbb20fc5
--- /dev/null
+++ b/examples/ovault-evm/contracts/MyOVaultComposer.sol
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.22;
+
+import { VaultComposerSync } from "@layerzerolabs/ovault-evm/contracts/VaultComposerSync.sol";
+
+/**
+ * @title MyOVaultComposer
+ * @notice Cross-chain vault composer enabling omnichain vault operations via LayerZero
+ */
+contract MyOVaultComposer is VaultComposerSync {
+ /**
+ * @notice Creates a new cross-chain vault composer
+ * @dev Initializes the composer with vault and OFT contracts for omnichain operations
+ * @param _ovault The vault contract implementing ERC4626 for deposit/redeem operations
+ * @param _assetOFT The OFT contract for cross-chain asset transfers
+ * @param _shareOFT The OFT contract for cross-chain share transfers
+ */
+ constructor(
+ address _ovault,
+ address _assetOFT,
+ address _shareOFT
+ ) VaultComposerSync(_ovault, _assetOFT, _shareOFT) {}
+}
diff --git a/examples/ovault-evm/contracts/MyShareOFT.sol b/examples/ovault-evm/contracts/MyShareOFT.sol
new file mode 100644
index 0000000000..69203688ea
--- /dev/null
+++ b/examples/ovault-evm/contracts/MyShareOFT.sol
@@ -0,0 +1,39 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.20;
+
+import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
+import { OFT } from "@layerzerolabs/oft-evm/contracts/OFT.sol";
+
+/**
+ * @title MyShareOFT
+ * @notice ERC20 representation of the vault's share token on a spoke chain for cross-chain functionality
+ * @dev This contract represents the vault's share tokens on spoke chains. It inherits from
+ * LayerZero's OFT (Omnichain Fungible Token) to enable seamless cross-chain transfers of
+ * vault shares between the hub chain and spoke chains. This contract is designed to work
+ * with ERC4626-compliant vaults, enabling standardized cross-chain vault interactions.
+ *
+ * Share tokens represent ownership in the vault and can be redeemed for the underlying
+ * asset on the hub chain. The OFT mechanism ensures that shares maintain their value and can be freely
+ * moved across supported chains while preserving the vault's accounting integrity.
+ */
+contract MyShareOFT is OFT {
+ /**
+ * @notice Constructs the Share OFT contract
+ * @dev Initializes the OFT with LayerZero endpoint and sets up ownership
+ * @param _name The name of the share token
+ * @param _symbol The symbol of the share token
+ * @param _lzEndpoint The address of the LayerZero endpoint on this chain
+ * @param _delegate The address that will have owner privileges
+ */
+ constructor(
+ string memory _name,
+ string memory _symbol,
+ address _lzEndpoint,
+ address _delegate
+ ) OFT(_name, _symbol, _lzEndpoint, _delegate) Ownable(_delegate) {
+ // WARNING: Do NOT mint share tokens directly as this breaks the vault's share-to-asset ratio
+ // Share tokens should only be minted by the vault contract during deposits to maintain
+ // the correct relationship between shares and underlying assets
+ // _mint(msg.sender, 1 ether); // ONLY uncomment for testing UI/integration, never in production
+ }
+}
diff --git a/examples/ovault-evm/deploy/MyOvault.ts b/examples/ovault-evm/deploy/MyOvault.ts
new file mode 100644
index 0000000000..33f25ff61b
--- /dev/null
+++ b/examples/ovault-evm/deploy/MyOvault.ts
@@ -0,0 +1,125 @@
+import assert from 'assert'
+
+import { type DeployFunction } from 'hardhat-deploy/types'
+
+import { DEPLOYMENT_CONFIG, isVaultChain, shouldDeployAsset, shouldDeployShare } from '../devtools'
+
+const deploy: DeployFunction = async (hre) => {
+ const { getNamedAccounts, deployments } = hre
+ const { deployer } = await getNamedAccounts()
+ const networkEid = hre.network.config?.eid
+
+ assert(deployer, 'Missing named deployer account')
+ assert(networkEid, `Network ${hre.network.name} is missing 'eid' in config`)
+
+ console.log(`Network: ${hre.network.name}`)
+ console.log(`Deployer: ${deployer}`)
+
+ // Sanity check: Ensure Share OFT never deploys on vault chain
+ if (isVaultChain(networkEid) && shouldDeployShare(networkEid)) {
+ throw new Error(
+ `Configuration error: Share OFT should not deploy on vault chain (EID: ${networkEid}). ` +
+ `Vault chain uses Share Adapter instead. Check your configuration.`
+ )
+ }
+
+ const endpointV2 = await hre.deployments.get('EndpointV2')
+ const deployedContracts: Record = {}
+
+ // Deploy Asset OFT (on all configured chains)
+ if (shouldDeployAsset(networkEid)) {
+ const assetOFT = await deployments.deploy(DEPLOYMENT_CONFIG.asset.contract, {
+ from: deployer,
+ args: [
+ DEPLOYMENT_CONFIG.asset.metadata.name,
+ DEPLOYMENT_CONFIG.asset.metadata.symbol,
+ endpointV2.address,
+ deployer,
+ ],
+ log: true,
+ skipIfAlreadyDeployed: true,
+ })
+ deployedContracts.assetOFT = assetOFT.address
+ console.log(
+ `Deployed contract: ${DEPLOYMENT_CONFIG.asset.contract}, network: ${hre.network.name}, address: ${assetOFT.address}`
+ )
+ }
+
+ // Deploy Share OFT (only on spoke chains)
+ if (shouldDeployShare(networkEid)) {
+ const shareOFT = await deployments.deploy(DEPLOYMENT_CONFIG.share.contract, {
+ from: deployer,
+ args: [
+ DEPLOYMENT_CONFIG.share.metadata.name,
+ DEPLOYMENT_CONFIG.share.metadata.symbol,
+ endpointV2.address,
+ deployer,
+ ],
+ log: true,
+ skipIfAlreadyDeployed: true,
+ })
+ deployedContracts.shareOFT = shareOFT.address
+ console.log(
+ `Deployed contract: ${DEPLOYMENT_CONFIG.share.contract}, network: ${hre.network.name}, address: ${shareOFT.address}`
+ )
+ }
+
+ // Deploy Vault Chain Components (vault, adapter, composer)
+ if (isVaultChain(networkEid)) {
+ // 🎯 Get asset address (existing or deployed)
+ let assetOFTAddress: string
+
+ if (DEPLOYMENT_CONFIG.vault.assetAddress) {
+ assetOFTAddress = DEPLOYMENT_CONFIG.vault.assetAddress
+ console.log(`Using existing asset address: ${assetOFTAddress}`)
+ } else {
+ // Use deployed address or get from deployments
+ assetOFTAddress =
+ deployedContracts.assetOFT || (await hre.deployments.get(DEPLOYMENT_CONFIG.asset.contract)).address
+ console.log(`Using deployed asset address: ${assetOFTAddress}`)
+ }
+
+ // Deploy ERC4626 Vault
+ const vault = await deployments.deploy(DEPLOYMENT_CONFIG.vault.contracts.vault, {
+ from: deployer,
+ args: [DEPLOYMENT_CONFIG.share.metadata.name, DEPLOYMENT_CONFIG.share.metadata.symbol, assetOFTAddress],
+ log: true,
+ skipIfAlreadyDeployed: true,
+ })
+ console.log(
+ `Deployed contract: ${DEPLOYMENT_CONFIG.vault.contracts.vault}, network: ${hre.network.name}, address: ${vault.address}`
+ )
+
+ // Deploy Share Adapter
+ const shareAdapter = await deployments.deploy(DEPLOYMENT_CONFIG.vault.contracts.shareAdapter, {
+ from: deployer,
+ args: [vault.address, endpointV2.address, deployer],
+ log: true,
+ skipIfAlreadyDeployed: true,
+ })
+ console.log(
+ `Deployed contract: ${DEPLOYMENT_CONFIG.vault.contracts.shareAdapter}, network: ${hre.network.name}, address: ${shareAdapter.address}`
+ )
+
+ // Deploy OVault Composer
+ const composer = await deployments.deploy(DEPLOYMENT_CONFIG.vault.contracts.composer, {
+ from: deployer,
+ args: [vault.address, assetOFTAddress, shareAdapter.address],
+ log: true,
+ skipIfAlreadyDeployed: true,
+ })
+ console.log(
+ `Deployed contract: ${DEPLOYMENT_CONFIG.vault.contracts.composer}, network: ${hre.network.name}, address: ${composer.address}`
+ )
+
+ deployedContracts.vault = vault.address
+ deployedContracts.shareAdapter = shareAdapter.address
+ deployedContracts.composer = composer.address
+ }
+
+ console.log(`Deployment complete on ${hre.network.name}`)
+}
+
+deploy.tags = ['ovault']
+
+export default deploy
diff --git a/examples/ovault-evm/devtools/deployConfig.ts b/examples/ovault-evm/devtools/deployConfig.ts
new file mode 100644
index 0000000000..7ebcfec7b5
--- /dev/null
+++ b/examples/ovault-evm/devtools/deployConfig.ts
@@ -0,0 +1,41 @@
+import { EndpointId } from '@layerzerolabs/lz-definitions'
+
+export const DEPLOYMENT_CONFIG = {
+ // Vault chain configuration (where the ERC4626 vault lives)
+ vault: {
+ eid: EndpointId.ARBSEP_V2_TESTNET,
+ contracts: {
+ vault: 'MyERC4626',
+ shareAdapter: 'MyShareOFTAdapter',
+ composer: 'MyOVaultComposer',
+ },
+ // IF YOU HAVE A PRE-DEPLOYED ASSET, SET THE ADDRESS HERE
+ // this will effectively skip the deployment of the asset OFT, and use this instead.
+ assetAddress: undefined, // Set to '0x...' to use existing asset
+ },
+
+ // Asset OFT configuration (deployed on all chains OR use existing address)
+ asset: {
+ contract: 'MyAssetOFT',
+ metadata: {
+ name: 'MyAssetOFT',
+ symbol: 'ASSET',
+ },
+ chains: [EndpointId.OPTSEP_V2_TESTNET, EndpointId.BASESEP_V2_TESTNET, EndpointId.ARBSEP_V2_TESTNET],
+ },
+
+ // Share OFT configuration (only on spoke chains)
+ share: {
+ contract: 'MyShareOFT',
+ metadata: {
+ name: 'MyShareOFT',
+ symbol: 'SHARE',
+ },
+ chains: [EndpointId.OPTSEP_V2_TESTNET, EndpointId.BASESEP_V2_TESTNET], // No vault chain
+ },
+} as const
+
+export const isVaultChain = (eid: number): boolean => eid === DEPLOYMENT_CONFIG.vault.eid
+export const shouldDeployAsset = (eid: number): boolean =>
+ !DEPLOYMENT_CONFIG.vault.assetAddress && DEPLOYMENT_CONFIG.asset.chains.includes(eid)
+export const shouldDeployShare = (eid: number): boolean => DEPLOYMENT_CONFIG.share.chains.includes(eid)
diff --git a/examples/ovault-evm/devtools/index.ts b/examples/ovault-evm/devtools/index.ts
new file mode 100644
index 0000000000..2263ac206a
--- /dev/null
+++ b/examples/ovault-evm/devtools/index.ts
@@ -0,0 +1,3 @@
+export * from './deployConfig'
+export * from './types'
+export * from './utils'
diff --git a/examples/ovault-evm/devtools/types.ts b/examples/ovault-evm/devtools/types.ts
new file mode 100644
index 0000000000..08874e5475
--- /dev/null
+++ b/examples/ovault-evm/devtools/types.ts
@@ -0,0 +1,32 @@
+export interface TokenConfig {
+ contract: string
+ metadata: {
+ name: string
+ symbol: string
+ }
+ chains: number[]
+}
+
+export interface VaultConfig {
+ eid: number
+ contracts: {
+ vault: string
+ shareAdapter: string
+ composer: string
+ }
+ assetAddress?: string // Optional pre-deployed asset address
+}
+
+export interface DeploymentConfig {
+ vault: VaultConfig
+ asset: TokenConfig
+ share: TokenConfig
+}
+
+export interface DeployedContracts {
+ assetOFT?: string
+ shareOFT?: string
+ vault?: string
+ shareAdapter?: string
+ composer?: string
+}
diff --git a/examples/ovault-evm/devtools/utils.ts b/examples/ovault-evm/devtools/utils.ts
new file mode 100644
index 0000000000..728a8a7bf5
--- /dev/null
+++ b/examples/ovault-evm/devtools/utils.ts
@@ -0,0 +1,48 @@
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+import { DeployResult } from 'hardhat-deploy/types'
+
+// Enhanced deployment helper with better logging
+export async function deployContract(
+ hre: HardhatRuntimeEnvironment,
+ contractName: string,
+ deployer: string,
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ args: any[],
+ options: {
+ skipIfAlreadyDeployed?: boolean
+ gasLimit?: number
+ log?: boolean
+ } = {}
+): Promise {
+ const { skipIfAlreadyDeployed = true, gasLimit, log = true } = options
+
+ console.log(`Deploying ${contractName}...`)
+ console.log(` Args: ${JSON.stringify(args, null, 2)}`)
+
+ const deployment = await hre.deployments.deploy(contractName, {
+ from: deployer,
+ args,
+ log,
+ skipIfAlreadyDeployed,
+ ...(gasLimit && { gasLimit }),
+ })
+
+ if (deployment.newlyDeployed) {
+ console.log(`${contractName} deployed to: ${deployment.address}`)
+ console.log(` Gas used: ${deployment.receipt?.gasUsed || 'N/A'}`)
+ console.log(` Tx hash: ${deployment.transactionHash}`)
+ } else {
+ console.log(`${contractName} already deployed at: ${deployment.address}`)
+ }
+
+ return deployment
+}
+
+// Network validation
+export function validateNetwork(hre: HardhatRuntimeEnvironment): { networkEid: number; deployer: string } {
+ const networkEid = hre.network.config?.eid
+ if (!networkEid) {
+ throw new Error(`Network ${hre.network.name} is missing 'eid' in config`)
+ }
+ return { networkEid, deployer: '' } // You'd get deployer from getNamedAccounts()
+}
diff --git a/examples/ovault-evm/foundry.toml b/examples/ovault-evm/foundry.toml
new file mode 100644
index 0000000000..586faed909
--- /dev/null
+++ b/examples/ovault-evm/foundry.toml
@@ -0,0 +1,37 @@
+[profile.default]
+solc-version = '0.8.22'
+src = 'contracts'
+out = 'out'
+test = 'test'
+cache_path = 'cache/foundry'
+verbosity = 3
+optimizer = true
+optimizer_runs = 20_000
+
+libs = [
+ # We provide a set of useful contract utilities
+ # in the lib directory of @layerzerolabs/toolbox-foundry:
+ #
+ # - forge-std
+ # - ds-test
+ # - solidity-bytes-utils
+ 'node_modules/@layerzerolabs/toolbox-foundry/lib',
+ 'node_modules',
+]
+
+remappings = [
+ # Due to a misconfiguration of solidity-bytes-utils, an outdated version
+ # of forge-std is being dragged in
+ #
+ # To remedy this, we'll remap the ds-test and forge-std imports to our own versions
+ 'ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test',
+ 'forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std',
+ '@layerzerolabs/=node_modules/@layerzerolabs/',
+ '@openzeppelin/=node_modules/@openzeppelin/',
+]
+
+[fuzz]
+runs = 1000
+
+[profile.ci.fuzz]
+runs = 16
diff --git a/examples/ovault-evm/hardhat.config.ts b/examples/ovault-evm/hardhat.config.ts
new file mode 100644
index 0000000000..95db905106
--- /dev/null
+++ b/examples/ovault-evm/hardhat.config.ts
@@ -0,0 +1,85 @@
+// Get the environment configuration from .env file
+//
+// To make use of automatic environment setup:
+// - Duplicate .env.example file and name it .env
+// - Fill in the environment variables
+import 'dotenv/config'
+
+import 'hardhat-deploy'
+import 'hardhat-contract-sizer'
+import '@nomiclabs/hardhat-ethers'
+import '@layerzerolabs/toolbox-hardhat'
+import { HardhatUserConfig, HttpNetworkAccountsUserConfig } from 'hardhat/types'
+
+import { EndpointId } from '@layerzerolabs/lz-definitions'
+
+import './tasks/sendOFT'
+import './tasks/sendOVaultComposer'
+
+// Set your preferred authentication method
+//
+// If you prefer using a mnemonic, set a MNEMONIC environment variable
+// to a valid mnemonic
+const MNEMONIC = process.env.MNEMONIC
+
+// If you prefer to be authenticated using a private key, set a PRIVATE_KEY environment variable
+const PRIVATE_KEY = process.env.PRIVATE_KEY
+
+const accounts: HttpNetworkAccountsUserConfig | undefined = MNEMONIC
+ ? { mnemonic: MNEMONIC }
+ : PRIVATE_KEY
+ ? [PRIVATE_KEY]
+ : undefined
+
+if (accounts == null) {
+ console.warn(
+ 'Could not find MNEMONIC or PRIVATE_KEY environment variables. It will not be possible to execute transactions in your example.'
+ )
+}
+
+const config: HardhatUserConfig = {
+ paths: {
+ cache: 'cache/hardhat',
+ },
+ solidity: {
+ compilers: [
+ {
+ version: '0.8.22',
+ settings: {
+ optimizer: {
+ enabled: true,
+ runs: 200,
+ },
+ },
+ },
+ ],
+ },
+ networks: {
+ optimism: {
+ eid: EndpointId.OPTSEP_V2_TESTNET,
+ url: process.env.RPC_URL_OPTIMISM_TESTNET || 'https://optimism.gateway.tenderly.co',
+ accounts,
+ },
+ base: {
+ eid: EndpointId.BASESEP_V2_TESTNET,
+ url: process.env.RPC_URL_BASE_TESTNET || 'https://base.gateway.tenderly.co',
+ accounts,
+ },
+ arbitrum: {
+ eid: EndpointId.ARBSEP_V2_TESTNET,
+ url: process.env.RPC_URL_ARBITRUM_TESTNET || 'https://arbitrum.gateway.tenderly.co',
+ accounts,
+ },
+ hardhat: {
+ // Need this for testing because TestHelperOz5.sol is exceeding the compiled contract size limit
+ allowUnlimitedContractSize: true,
+ },
+ },
+ namedAccounts: {
+ deployer: {
+ default: 0, // wallet address of index[0], of the mnemonic in .env
+ },
+ },
+}
+
+export default config
diff --git a/examples/ovault-evm/layerzero.asset.config.ts b/examples/ovault-evm/layerzero.asset.config.ts
new file mode 100644
index 0000000000..194a785261
--- /dev/null
+++ b/examples/ovault-evm/layerzero.asset.config.ts
@@ -0,0 +1,79 @@
+import { EndpointId } from '@layerzerolabs/lz-definitions'
+import { ExecutorOptionType } from '@layerzerolabs/lz-v2-utilities'
+import { TwoWayConfig, generateConnectionsConfig } from '@layerzerolabs/metadata-tools'
+import { OAppEnforcedOption } from '@layerzerolabs/toolbox-hardhat'
+
+import type { OmniPointHardhat } from '@layerzerolabs/toolbox-hardhat'
+
+const optimismContract: OmniPointHardhat = {
+ eid: EndpointId.OPTSEP_V2_TESTNET,
+ contractName: 'MyAssetOFT',
+}
+
+const arbitrumContract: OmniPointHardhat = {
+ eid: EndpointId.ARBSEP_V2_TESTNET,
+ contractName: 'MyAssetOFT',
+}
+
+const baseContract: OmniPointHardhat = {
+ eid: EndpointId.BASESEP_V2_TESTNET,
+ contractName: 'MyAssetOFT',
+}
+
+// To connect all the above chains to each other, we need the following pathways:
+// Optimism <-> Arb
+// Optimism <-> Base
+// Arbitrum <-> Base
+
+// For this example's simplicity, we will use the same enforced options values for sending to all chains
+// For production, you should ensure `gas` is set to the correct value through profiling the gas usage of calling OFT._lzReceive(...) on the destination chain
+// To learn more, read https://docs.layerzero.network/v2/concepts/applications/oapp-standard#execution-options-and-enforced-settings
+const EVM_ENFORCED_OPTIONS: OAppEnforcedOption[] = [
+ {
+ msgType: 1,
+ optionType: ExecutorOptionType.LZ_RECEIVE,
+ gas: 100_000,
+ value: 0,
+ },
+ {
+ msgType: 2,
+ optionType: ExecutorOptionType.LZ_RECEIVE,
+ gas: 100_000,
+ value: 0,
+ },
+]
+
+// With the config generator, pathways declared are automatically bidirectional
+// i.e. if you declare A,B there's no need to declare B,A
+const pathways: TwoWayConfig[] = [
+ [
+ optimismContract, // Chain A contract
+ arbitrumContract, // Chain B contract
+ [['LayerZero Labs'], []], // [ requiredDVN[], [ optionalDVN[], threshold ] ]
+ [1, 1], // [A to B confirmations, B to A confirmations]
+ [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS], // Chain B enforcedOptions, Chain A enforcedOptions
+ ],
+ [
+ optimismContract, // Chain A contract
+ baseContract, // Chain B contract
+ [['LayerZero Labs'], []], // [ requiredDVN[], [ optionalDVN[], threshold ] ]
+ [1, 1], // [A to B confirmations, B to A confirmations]
+ [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS], // Chain B enforcedOptions, Chain A enforcedOptions
+ ],
+ [
+ arbitrumContract, // Chain A contract
+ baseContract, // Chain B contract
+ [['LayerZero Labs'], []], // [ requiredDVN[], [ optionalDVN[], threshold ] ]
+ [1, 1], // [A to B confirmations, B to A confirmations]
+ [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS], // Chain B enforcedOptions, Chain A enforcedOptions
+ ],
+]
+
+export default async function () {
+ // Generate the connections config based on the pathways
+ const connections = await generateConnectionsConfig(pathways)
+ return {
+ contracts: [{ contract: optimismContract }, { contract: arbitrumContract }, { contract: baseContract }],
+ connections,
+ }
+}
diff --git a/examples/ovault-evm/layerzero.share.config.ts b/examples/ovault-evm/layerzero.share.config.ts
new file mode 100644
index 0000000000..c166265028
--- /dev/null
+++ b/examples/ovault-evm/layerzero.share.config.ts
@@ -0,0 +1,79 @@
+import { EndpointId } from '@layerzerolabs/lz-definitions'
+import { ExecutorOptionType } from '@layerzerolabs/lz-v2-utilities'
+import { TwoWayConfig, generateConnectionsConfig } from '@layerzerolabs/metadata-tools'
+import { OAppEnforcedOption } from '@layerzerolabs/toolbox-hardhat'
+
+import type { OmniPointHardhat } from '@layerzerolabs/toolbox-hardhat'
+
+const optimismContract: OmniPointHardhat = {
+ eid: EndpointId.OPTSEP_V2_TESTNET,
+ contractName: 'MyShareOFT',
+}
+
+const baseContract: OmniPointHardhat = {
+ eid: EndpointId.BASESEP_V2_TESTNET,
+ contractName: 'MyShareOFT',
+}
+
+const arbitrumContract: OmniPointHardhat = {
+ eid: EndpointId.ARBSEP_V2_TESTNET,
+ contractName: 'MyShareOFTAdapter',
+}
+
+// To connect all the above chains to each other, we need the following pathways:
+// Optimism <-> Arbitrum
+// Optimism <-> Base
+// Arbitrum <-> Base
+
+// For this example's simplicity, we will use the same enforced options values for sending to all chains
+// For production, you should ensure `gas` is set to the correct value through profiling the gas usage of calling OFT._lzReceive(...) on the destination chain
+// To learn more, read https://docs.layerzero.network/v2/concepts/applications/oapp-standard#execution-options-and-enforced-settings
+const EVM_ENFORCED_OPTIONS: OAppEnforcedOption[] = [
+ {
+ msgType: 1,
+ optionType: ExecutorOptionType.LZ_RECEIVE,
+ gas: 100_000,
+ value: 0,
+ },
+ {
+ msgType: 2,
+ optionType: ExecutorOptionType.LZ_RECEIVE,
+ gas: 100_000,
+ value: 0,
+ },
+]
+
+// With the config generator, pathways declared are automatically bidirectional
+// i.e. if you declare A,B there's no need to declare B,A
+const pathways: TwoWayConfig[] = [
+ [
+ optimismContract, // Chain A contract
+ arbitrumContract, // Chain B contract
+ [['LayerZero Labs'], []], // [ requiredDVN[], [ optionalDVN[], threshold ] ]
+ [1, 1], // [A to B confirmations, B to A confirmations]
+ [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS], // Chain B enforcedOptions, Chain A enforcedOptions
+ ],
+ [
+ optimismContract, // Chain A contract
+ baseContract, // Chain B contract
+ [['LayerZero Labs'], []], // [ requiredDVN[], [ optionalDVN[], threshold ] ]
+ [1, 1], // [A to B confirmations, B to A confirmations]
+ [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS], // Chain B enforcedOptions, Chain A enforcedOptions
+ ],
+ [
+ arbitrumContract, // Chain A contract
+ baseContract, // Chain B contract
+ [['LayerZero Labs'], []], // [ requiredDVN[], [ optionalDVN[], threshold ] ]
+ [1, 1], // [A to B confirmations, B to A confirmations]
+ [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS], // Chain B enforcedOptions, Chain A enforcedOptions
+ ],
+]
+
+export default async function () {
+ // Generate the connections config based on the pathways
+ const connections = await generateConnectionsConfig(pathways)
+ return {
+ contracts: [{ contract: optimismContract }, { contract: arbitrumContract }, { contract: baseContract }],
+ connections,
+ }
+}
diff --git a/examples/ovault-evm/package.json b/examples/ovault-evm/package.json
new file mode 100644
index 0000000000..c536ff75b7
--- /dev/null
+++ b/examples/ovault-evm/package.json
@@ -0,0 +1,85 @@
+{
+ "name": "@layerzerolabs/ovault-evm-example",
+ "version": "0.0.1",
+ "private": true,
+ "license": "MIT",
+ "scripts": {
+ "clean": "rm -rf artifacts cache out",
+ "compile": "concurrently -c auto --names forge,hardhat '$npm_execpath run compile:forge' '$npm_execpath run compile:hardhat'",
+ "compile:forge": "forge build",
+ "compile:hardhat": "hardhat compile",
+ "gas:lzCompose": "forge script GasProfilerScript --via-ir --sig 'run_lzCompose(string,address,uint32,address,uint32,address,address,bytes[],uint256,uint256)'",
+ "gas:lzReceive": "forge script GasProfilerScript --via-ir --sig 'run_lzReceive(string,address,uint32,address,uint32,address,bytes[],uint256,uint256)'",
+ "gas:run": "forge script OFTProfilerExample --via-ir --sig 'run(uint256)'",
+ "lint": "$npm_execpath run lint:js && $npm_execpath run lint:sol",
+ "lint:fix": "eslint --fix '**/*.{js,ts,json}' && prettier --write . && solhint 'contracts/**/*.sol' --fix --noPrompt",
+ "lint:js": "eslint '**/*.{js,ts,json}' && prettier --check .",
+ "lint:sol": "solhint 'contracts/**/*.sol'",
+ "test": "$npm_execpath run test:forge && $npm_execpath run test:hardhat",
+ "test:forge": "forge test",
+ "test:hardhat": "hardhat test"
+ },
+ "resolutions": {
+ "ethers": "^5.7.2",
+ "hardhat-deploy": "^0.12.1"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.23.9",
+ "@layerzerolabs/devtools-evm-hardhat": "^3.0.0",
+ "@layerzerolabs/eslint-config-next": "~2.3.39",
+ "@layerzerolabs/io-devtools": "~0.3.0",
+ "@layerzerolabs/lz-definitions": "^3.0.59",
+ "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12",
+ "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12",
+ "@layerzerolabs/lz-evm-sdk-v2": "^3.0.75",
+ "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12",
+ "@layerzerolabs/lz-v2-utilities": "^3.0.12",
+ "@layerzerolabs/metadata-tools": "^2.0.0",
+ "@layerzerolabs/oapp-evm": "^0.3.1",
+ "@layerzerolabs/oft-evm": "^3.1.2",
+ "@layerzerolabs/ovault-evm": "^0.0.1",
+ "@layerzerolabs/prettier-config-next": "^2.3.39",
+ "@layerzerolabs/script-devtools-evm-foundry": "^1.0.0",
+ "@layerzerolabs/solhint-config": "^3.0.12",
+ "@layerzerolabs/test-devtools-evm-foundry": "~6.0.2",
+ "@layerzerolabs/toolbox-foundry": "~0.1.12",
+ "@layerzerolabs/toolbox-hardhat": "~0.6.10",
+ "@nomicfoundation/hardhat-ethers": "^3.0.5",
+ "@nomiclabs/hardhat-ethers": "^2.2.3",
+ "@openzeppelin/contracts": "^5.0.2",
+ "@openzeppelin/contracts-upgradeable": "^5.0.2",
+ "@rushstack/eslint-patch": "^1.7.0",
+ "@types/chai": "^4.3.11",
+ "@types/mocha": "^10.0.6",
+ "@types/node": "~18.18.14",
+ "chai": "^4.4.1",
+ "concurrently": "~9.1.0",
+ "dotenv": "^16.4.1",
+ "eslint": "^8.55.0",
+ "eslint-plugin-jest-extended": "~2.0.0",
+ "ethers": "^5.7.2",
+ "hardhat": "^2.22.10",
+ "hardhat-contract-sizer": "^2.10.0",
+ "hardhat-deploy": "^0.12.1",
+ "inquirer": "^12.3.3",
+ "mocha": "^10.2.0",
+ "prettier": "^3.2.5",
+ "solhint": "^4.1.1",
+ "solidity-bytes-utils": "^0.8.2",
+ "ts-node": "^10.9.2",
+ "typescript": "^5.4.4"
+ },
+ "engines": {
+ "node": ">=18.16.0"
+ },
+ "pnpm": {
+ "overrides": {
+ "ethers": "^5.7.2",
+ "hardhat-deploy": "^0.12.1"
+ }
+ },
+ "overrides": {
+ "ethers": "^5.7.2",
+ "hardhat-deploy": "^0.12.1"
+ }
+}
diff --git a/examples/ovault-evm/script/DebugExecutorCompose302.s.sol b/examples/ovault-evm/script/DebugExecutorCompose302.s.sol
new file mode 100644
index 0000000000..c9f610f5ed
--- /dev/null
+++ b/examples/ovault-evm/script/DebugExecutorCompose302.s.sol
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.13;
+
+import { Script, console } from "forge-std/Script.sol";
+
+/// @dev Debug script that takes in the same parameters as the compose302 message
+/// and simulates the execution of the compose302 message.
+/// @dev This is useful to debug failed messages. The "trace" will contain information such as the error or events and can be decoded
+/// The following points to the interface that the executor implements and has the errors documented.
+/// https://github.com/LayerZero-Labs/devtools/blob/main/packages/ovault-evm/contracts/interfaces/IVaultComposerSync.sol
+/// @notice Most composer will be custom implementations so the above may not have all errors or events and you would have to reference the composer's implmentation.
+contract DebugExecutorCompose302 is Script {
+ address public executorCaller;
+ address public executorContractAddress;
+ address public fromAddress;
+ address public toAddress;
+ bytes32 public guid;
+ uint16 public index;
+ bytes public message;
+ bytes public extraData;
+ uint256 public gasLimit;
+ uint256 public msgValue;
+
+ uint256 public constant executorOverheadGas = 30_000; // Overhead gas for the executor since the contract will consume some gas
+
+ function setUp() public {
+ /// @dev Ex: https://sepolia.arbiscan.io/tx/0xbcace8c9d6c460e272a2693c9271b6bb1da70207beaa175bd0a9d925703396cf
+ /// @dev This is the address that that sends the failed transaction on etherscan -
+ /// From the example this would be: 0xF5E8A439C599205C1aB06b535DE46681Aed1007a
+ executorCaller = vm.envAddress("EXECUTOR_CALLER_ADDRESS");
+ /// @dev This would be the to address: 0x5Df3a1cEbBD9c8BA7F8dF51Fd632A9aef8308897
+ executorContractAddress = vm.envAddress("EXECUTOR_ADDRESS");
+
+ /// @dev This information is from the payload of the compose302 message.
+ /// etherscan transaction (the example above) -> more details -> input data -> decode input data
+ /// @dev If you do not have that you can use `cast call $ADDR --rpc-url $RPC_URL --trace` to get the payload
+ fromAddress = vm.envAddress("FROM_ADDRESS");
+ toAddress = vm.envAddress("TO_ADDRESS");
+ guid = vm.envBytes32("GUID");
+ index = 0; /// @note This is usually 0 unless you have multiple compose messages in the same transaction
+ message = vm.envBytes("MESSAGE"); // This is the payload that was sent in the compose302 message
+ extraData = "";
+
+ gasLimit = vm.envUint("GAS_LIMIT"); // a vanilla ERC4626 consumes about 500_000 gas
+ /// @dev If the composer needs to send a layerzero transaction this will have to be something non 0
+ msgValue = vm.envUint("MSG_VALUE");
+ }
+ function run() public {
+ vm.prank(executorCaller);
+ IExecutor(executorContractAddress).compose302{ value: msgValue, gas: gasLimit + executorOverheadGas }(
+ fromAddress,
+ toAddress,
+ guid,
+ index,
+ message,
+ extraData,
+ gasLimit
+ );
+ }
+}
+
+interface IExecutor {
+ function compose302(
+ address _from,
+ address _to,
+ bytes32 _guid,
+ uint16 _index,
+ bytes calldata _message,
+ bytes calldata _extraData,
+ uint256 _gasLimit
+ ) external payable;
+}
diff --git a/examples/ovault-evm/script/DebugSendScript.sol b/examples/ovault-evm/script/DebugSendScript.sol
new file mode 100644
index 0000000000..109fb8fc40
--- /dev/null
+++ b/examples/ovault-evm/script/DebugSendScript.sol
@@ -0,0 +1,131 @@
+// SPDX-License-Identifier: LZBL-1.2
+pragma solidity ^0.8.0;
+
+import { AddressCast } from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol";
+import { OptionsBuilder } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol";
+
+import { IOFT, SendParam, OFTReceipt, MessagingReceipt, MessagingFee } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+import { OFT } from "@layerzerolabs/oft-evm/contracts/OFT.sol";
+
+import { Script, console } from "forge-std/Script.sol";
+/**
+ * @title Lets the user send an LZ OFT transfer to transfer an amount of OFT from a source EVM chain to OVault testnet or mainnet
+ * @notice There are 3 supported modes that correspond to , , in the forge script below:
+ * @notice forge script script/SendScript.s.sol --private-key $PRIVATE_KEY --rpc-url $RPC_URL_BASE_TESTNET --sig "exec(address oft,string dstChain,uint256 amt,uint256 minAmt,uint128 lzComposeGas,uint128 lzComposeValue)" $SHARE_OFT_BASE_SEP "base-sep" 1ether 500000 0.000025ether [--broadcast]
+ */
+
+contract DebugSendScript is Script {
+ using AddressCast for address;
+
+ using OptionsBuilder for bytes;
+
+ address payable public addressComposer;
+
+ OFT public srcOFT;
+
+ mapping(uint256 => uint32) public chainIdToSrcEid;
+ mapping(string => uint32) public chainNameToDstEid;
+
+ uint32 public HUB_EID = 40231;
+
+ function setUp() public {
+ chainIdToSrcEid[421614] = 40231; // arb sep
+ chainIdToSrcEid[11155420] = 40232; // opt sep
+ chainIdToSrcEid[84532] = 40245; // base sep
+
+ chainNameToDstEid["arb-sep"] = 40231; // arb sep
+ chainNameToDstEid["opt-sep"] = 40232; // opt sep
+ chainNameToDstEid["base-sep"] = 40245; // base sep
+ chainNameToDstEid["bad-eid"] = 100000; // bad eid
+
+ addressComposer = payable(vm.envAddress("OVAULT_COMPOSER_ADDRESS"));
+ }
+
+ function exec(
+ address _fromOFT,
+ string memory _dstChain,
+ uint256 _amount,
+ uint256 _minAmount,
+ uint128 _lzComposeGas,
+ uint128 _lzComposeValue
+ ) public {
+ uint32 srcEid = chainIdToSrcEid[block.chainid];
+ if (srcEid == 0) {
+ revert("Source chain is not Arbitrum Sepolia, Optimism Sepolia, or Base Sepolia");
+ }
+
+ uint32 dstEid = chainNameToDstEid[_dstChain];
+ if (dstEid == 0) {
+ revert("Destination chain is not Arbitrum Sepolia, Optimism Sepolia, or Base Sepolia");
+ }
+
+ srcOFT = OFT(_fromOFT);
+
+ SendParam memory sendParam = buildSendParam(
+ addressComposer,
+ msg.sender,
+ _amount,
+ _minAmount,
+ dstEid,
+ _lzComposeGas,
+ _lzComposeValue
+ );
+
+ vm.startBroadcast();
+
+ MessagingFee memory msgFee = quoteSend(sendParam);
+
+ _send(sendParam, msgFee);
+
+ vm.stopBroadcast();
+ }
+
+ function buildSendParam(
+ address _composer,
+ address _receiver,
+ uint256 _tokenAmount,
+ uint256 _minAmount,
+ uint32 _dstEid,
+ uint128 _lzComposeGas,
+ uint128 _lzComposeValue
+ ) public view returns (SendParam memory sendParam) {
+ bytes memory options;
+ bytes memory composeMsg = "";
+ uint32 dstEid = _dstEid;
+ bytes32 to = _receiver.toBytes32();
+
+ if (_lzComposeGas > 0) {
+ options = OptionsBuilder.newOptions().addExecutorLzComposeOption(0, _lzComposeGas, _lzComposeValue);
+ SendParam memory hopSendParam = SendParam({
+ dstEid: dstEid,
+ to: to,
+ amountLD: _tokenAmount,
+ minAmountLD: _minAmount,
+ extraOptions: hex"",
+ composeMsg: composeMsg,
+ oftCmd: hex""
+ });
+ composeMsg = abi.encode(hopSendParam);
+ to = _composer.toBytes32();
+ dstEid = HUB_EID;
+ }
+
+ sendParam = SendParam({
+ dstEid: dstEid,
+ to: to,
+ amountLD: _tokenAmount,
+ minAmountLD: _tokenAmount,
+ extraOptions: options,
+ composeMsg: composeMsg,
+ oftCmd: ""
+ });
+ }
+
+ function quoteSend(SendParam memory _sendParam) public view returns (MessagingFee memory) {
+ return srcOFT.quoteSend(_sendParam, false);
+ }
+
+ function _send(SendParam memory _sendParam, MessagingFee memory _fee) internal {
+ srcOFT.send{ value: _fee.nativeFee }(_sendParam, _fee, msg.sender);
+ }
+}
diff --git a/examples/ovault-evm/script/LZScript.s.sol b/examples/ovault-evm/script/LZScript.s.sol
new file mode 100644
index 0000000000..27fd950082
--- /dev/null
+++ b/examples/ovault-evm/script/LZScript.s.sol
@@ -0,0 +1,12 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.0;
+
+import { console } from "forge-std/console.sol";
+
+import { LZScripts } from "@layerzerolabs/script-devtools-evm-foundry/scripts/LZScripts.s.sol";
+
+contract LZScript is LZScripts {
+ function run() public pure override {
+ console.log("Hello, World!");
+ }
+}
diff --git a/examples/ovault-evm/solhint.config.js b/examples/ovault-evm/solhint.config.js
new file mode 100644
index 0000000000..f7f9bcf936
--- /dev/null
+++ b/examples/ovault-evm/solhint.config.js
@@ -0,0 +1,9 @@
+const config = require('@layerzerolabs/solhint-config');
+
+module.exports = {
+ ...config,
+ rules: {
+ ...config.rules,
+ 'one-contract-per-file': 'off',
+ },
+};
diff --git a/examples/ovault-evm/tasks/sendEvm.ts b/examples/ovault-evm/tasks/sendEvm.ts
new file mode 100644
index 0000000000..7a9cf98959
--- /dev/null
+++ b/examples/ovault-evm/tasks/sendEvm.ts
@@ -0,0 +1,242 @@
+import path from 'path'
+
+import { BigNumber, ContractTransaction } from 'ethers'
+import { parseUnits } from 'ethers/lib/utils'
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import { OmniPointHardhat, createGetHreByEid } from '@layerzerolabs/devtools-evm-hardhat'
+import { createLogger } from '@layerzerolabs/io-devtools'
+import { ChainType, endpointIdToChainType, endpointIdToNetwork } from '@layerzerolabs/lz-definitions'
+import { Options, addressToBytes32 } from '@layerzerolabs/lz-v2-utilities'
+
+import { SendResult } from './types'
+import { DebugLogger, KnownErrors, getLayerZeroScanLink } from './utils'
+
+const logger = createLogger()
+
+export interface EvmArgs {
+ srcEid: number
+ dstEid: number
+ amount: string
+ to: string
+ oappConfig: string
+ minAmount?: string
+ extraLzReceiveOptions?: string[]
+ extraLzComposeOptions?: string[]
+ extraNativeDropOptions?: string[]
+ composeMsg?: string
+ oftAddress?: string
+}
+
+export async function sendEvm(
+ {
+ srcEid,
+ dstEid,
+ amount,
+ to,
+ oappConfig,
+ minAmount,
+ extraLzReceiveOptions,
+ extraLzComposeOptions,
+ extraNativeDropOptions,
+ composeMsg,
+ oftAddress,
+ }: EvmArgs,
+ hre: HardhatRuntimeEnvironment
+): Promise {
+ if (endpointIdToChainType(srcEid) !== ChainType.EVM) {
+ throw new Error(`non-EVM srcEid (${srcEid}) not supported here`)
+ }
+
+ const getHreByEid = createGetHreByEid(hre)
+ let srcEidHre: HardhatRuntimeEnvironment
+ try {
+ srcEidHre = await getHreByEid(srcEid)
+ } catch (error) {
+ DebugLogger.printErrorAndFixSuggestion(
+ KnownErrors.ERROR_GETTING_HRE,
+ `For network: ${endpointIdToNetwork(srcEid)}, OFT: ${oftAddress}`
+ )
+ throw error
+ }
+ const signer = (await srcEidHre.ethers.getSigners())[0]
+
+ // 1️⃣ resolve the OFT wrapper address
+ let wrapperAddress: string
+ if (oftAddress) {
+ wrapperAddress = oftAddress
+ } else {
+ const layerZeroConfig = (await import(path.resolve('./', oappConfig))).default
+ const { contracts } = typeof layerZeroConfig === 'function' ? await layerZeroConfig() : layerZeroConfig
+ const wrapper = contracts.find((c: { contract: OmniPointHardhat }) => c.contract.eid === srcEid)
+ if (!wrapper) throw new Error(`No config for EID ${srcEid}`)
+ wrapperAddress = wrapper.contract.contractName
+ ? (await srcEidHre.deployments.get(wrapper.contract.contractName)).address
+ : wrapper.contract.address || ''
+ }
+
+ // 2️⃣ load IOFT ABI, extend it with token()
+ const ioftArtifact = await srcEidHre.artifacts.readArtifact('IOFT')
+
+ // now attach
+ const oft = await srcEidHre.ethers.getContractAt(ioftArtifact.abi, wrapperAddress, signer)
+
+ // 3️⃣ fetch the underlying ERC-20
+ const underlying = await oft.token()
+
+ // 4️⃣ fetch decimals from the underlying token
+ const erc20 = await srcEidHre.ethers.getContractAt('ERC20', underlying, signer)
+ const decimals: number = await erc20.decimals()
+
+ // 5️⃣ normalize the user-supplied amount
+ const amountUnits: BigNumber = parseUnits(amount, decimals)
+
+ // 6️⃣ Check if approval is required (for OFT Adapters) and handle approval
+ try {
+ const approvalRequired = await oft.approvalRequired()
+ if (approvalRequired) {
+ logger.info('OFT Adapter detected - checking ERC20 allowance...')
+
+ // Check current allowance
+ const currentAllowance = await erc20.allowance(signer.address, wrapperAddress)
+ logger.info(`Current allowance: ${currentAllowance.toString()}`)
+ logger.info(`Required amount: ${amountUnits.toString()}`)
+
+ if (currentAllowance.lt(amountUnits)) {
+ logger.info('Insufficient allowance - approving ERC20 tokens...')
+ const approveTx = await erc20.approve(wrapperAddress, amountUnits)
+ logger.info(`Approval transaction hash: ${approveTx.hash}`)
+ await approveTx.wait()
+ logger.info('ERC20 approval confirmed')
+ } else {
+ logger.info('Sufficient allowance already exists')
+ }
+ }
+ } catch (error) {
+ // If approvalRequired() doesn't exist or fails, assume it's a regular OFT (not an adapter)
+ logger.info('No approval required (regular OFT detected)')
+ }
+
+ // 7️⃣ hex string → Uint8Array → zero-pad to 32 bytes
+ const toBytes = addressToBytes32(to)
+
+ // 8️⃣ Build options dynamically using Options.newOptions()
+ let options = Options.newOptions()
+
+ // Add lzReceive options
+ if (extraLzReceiveOptions && extraLzReceiveOptions.length > 0) {
+ // Handle case where Hardhat's CSV parsing splits "gas,value" into separate elements
+ if (extraLzReceiveOptions.length % 2 !== 0) {
+ throw new Error(
+ `Invalid lzReceive options: received ${extraLzReceiveOptions.length} values, but expected pairs of gas,value`
+ )
+ }
+
+ for (let i = 0; i < extraLzReceiveOptions.length; i += 2) {
+ const gas = Number(extraLzReceiveOptions[i])
+ const value = Number(extraLzReceiveOptions[i + 1]) || 0
+ options = options.addExecutorLzReceiveOption(gas, value)
+ logger.info(`Added lzReceive option: ${gas} gas, ${value} value`)
+ }
+ }
+
+ // Add lzCompose options
+ if (extraLzComposeOptions && extraLzComposeOptions.length > 0) {
+ // Handle case where Hardhat's CSV parsing splits "index,gas,value" into separate elements
+ if (extraLzComposeOptions.length % 3 !== 0) {
+ throw new Error(
+ `Invalid lzCompose options: received ${extraLzComposeOptions.length} values, but expected triplets of index,gas,value`
+ )
+ }
+
+ for (let i = 0; i < extraLzComposeOptions.length; i += 3) {
+ const index = Number(extraLzComposeOptions[i])
+ const gas = Number(extraLzComposeOptions[i + 1])
+ const value = Number(extraLzComposeOptions[i + 2]) || 0
+ options = options.addExecutorComposeOption(index, gas, value)
+ logger.info(`Added lzCompose option: index ${index}, ${gas} gas, ${value} value`)
+ }
+ }
+
+ // Add native drop options
+ if (extraNativeDropOptions && extraNativeDropOptions.length > 0) {
+ // Handle case where Hardhat's CSV parsing splits "amount,recipient" into separate elements
+ if (extraNativeDropOptions.length % 2 !== 0) {
+ throw new Error(
+ `Invalid native drop options: received ${extraNativeDropOptions.length} values, but expected pairs of amount,recipient`
+ )
+ }
+
+ for (let i = 0; i < extraNativeDropOptions.length; i += 2) {
+ const amountStr = extraNativeDropOptions[i]
+ const recipient = extraNativeDropOptions[i + 1]
+
+ if (!amountStr || !recipient) {
+ throw new Error(
+ `Invalid native drop option: Both amount and recipient must be provided. Got amount="${amountStr}", recipient="${recipient}"`
+ )
+ }
+
+ try {
+ options = options.addExecutorNativeDropOption(amountStr.trim(), recipient.trim())
+ logger.info(`Added native drop option: ${amountStr.trim()} wei to ${recipient.trim()}`)
+ } catch (error) {
+ // Provide helpful context if the amount exceeds protocol limits
+ const maxUint128 = BigInt('340282366920938463463374607431768211455') // 2^128 - 1
+ const maxUint128Ether = Number(maxUint128) / 1e18 // Convert to ETH for readability
+
+ throw new Error(
+ `Failed to add native drop option with amount ${amountStr.trim()} wei. ` +
+ `LayerZero protocol constrains native drop amounts to uint128 maximum ` +
+ `(${maxUint128.toString()} wei ≈ ${maxUint128Ether.toFixed(2)} ETH). ` +
+ `Original error: ${error instanceof Error ? error.message : String(error)}`
+ )
+ }
+ }
+ }
+
+ const extraOptions = options.toHex()
+
+ // 9️⃣ build sendParam and dispatch
+ const sendParam = {
+ dstEid,
+ to: toBytes,
+ amountLD: amountUnits.toString(),
+ minAmountLD: minAmount ? parseUnits(minAmount, decimals).toString() : amountUnits.toString(),
+ extraOptions: extraOptions,
+ composeMsg: composeMsg ? composeMsg.toString() : '0x',
+ oftCmd: '0x',
+ }
+
+ // 10️⃣ Quote (MessagingFee = { nativeFee, lzTokenFee })
+ logger.info('Quoting the native gas cost for the send transaction...')
+ let msgFee: { nativeFee: BigNumber; lzTokenFee: BigNumber }
+ try {
+ msgFee = await oft.quoteSend(sendParam, false)
+ } catch (error) {
+ DebugLogger.printErrorAndFixSuggestion(
+ KnownErrors.ERROR_QUOTING_NATIVE_GAS_COST,
+ `For network: ${endpointIdToNetwork(srcEid)}, OFT: ${oftAddress}`
+ )
+ throw error
+ }
+ logger.info('Sending the transaction...')
+ let tx: ContractTransaction
+ try {
+ tx = await oft.send(sendParam, msgFee, signer.address, {
+ value: msgFee.nativeFee,
+ })
+ } catch (error) {
+ DebugLogger.printErrorAndFixSuggestion(
+ KnownErrors.ERROR_SENDING_TRANSACTION,
+ `For network: ${endpointIdToNetwork(srcEid)}, OFT: ${oftAddress}`
+ )
+ throw error
+ }
+ const receipt = await tx.wait()
+
+ const txHash = receipt.transactionHash
+ const scanLink = getLayerZeroScanLink(txHash, srcEid >= 40_000 && srcEid < 50_000)
+
+ return { txHash, scanLink }
+}
diff --git a/examples/ovault-evm/tasks/sendOFT.ts b/examples/ovault-evm/tasks/sendOFT.ts
new file mode 100644
index 0000000000..1de078940e
--- /dev/null
+++ b/examples/ovault-evm/tasks/sendOFT.ts
@@ -0,0 +1,108 @@
+import { task, types } from 'hardhat/config'
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import { types as cliTypes } from '@layerzerolabs/devtools-evm-hardhat'
+import { ChainType, endpointIdToChainType, endpointIdToNetwork } from '@layerzerolabs/lz-definitions'
+
+import { EvmArgs, sendEvm } from './sendEvm'
+import { SendResult } from './types'
+import { DebugLogger, KnownOutputs, KnownWarnings, getBlockExplorerLink } from './utils'
+
+interface MasterArgs {
+ srcEid: number
+ dstEid: number
+ amount: string
+ to: string
+ oappConfig: string
+ /** Minimum amount to receive in case of custom slippage or fees (human readable units, e.g. "1.5") */
+ minAmount?: string
+ /** Array of lzReceive options as comma-separated values "gas,value" - e.g. --extra-lz-receive-options "200000,0" */
+ extraLzReceiveOptions?: string[]
+ /** Array of lzCompose options as comma-separated values "index,gas,value" - e.g. --extra-lz-compose-options "0,500000,0" */
+ extraLzComposeOptions?: string[]
+ /** Array of native drop options as comma-separated values "amount,recipient" - e.g. --extra-native-drop-options "1000000000000000000,0x1234..." */
+ extraNativeDropOptions?: string[]
+ /** Arbitrary bytes message to deliver alongside the OFT */
+ composeMsg?: string
+ /** EVM: 20-byte hex address */
+ oftAddress?: string
+}
+
+task('lz:oft:send', 'Sends OFT tokens cross-chain from EVM chains')
+ .addParam('srcEid', 'Source endpoint ID', undefined, types.int)
+ .addParam('dstEid', 'Destination endpoint ID', undefined, types.int)
+ .addParam('amount', 'Amount to send (human readable units, e.g. "1.5")', undefined, types.string)
+ .addParam('to', 'Recipient address (20-byte hex for EVM)', undefined, types.string)
+ .addOptionalParam('oappConfig', 'Path to the LayerZero config file', 'layerzero.config.ts', types.string)
+ .addOptionalParam(
+ 'minAmount',
+ 'Minimum amount to receive in case of custom slippage or fees (human readable units, e.g. "1.5")',
+ undefined,
+ types.string
+ )
+ .addOptionalParam(
+ 'extraLzReceiveOptions',
+ 'Array of extra lzReceive options in format "gas,value" (e.g. ["200000,0", "100000,1000000000000000000"])',
+ undefined,
+ cliTypes.csv
+ )
+ .addOptionalParam(
+ 'extraLzComposeOptions',
+ 'Array of extra lzCompose options in format "index,gas,value" (e.g. ["0,500000,0", "1,300000,1000000000000000000"])',
+ undefined,
+ cliTypes.csv
+ )
+ .addOptionalParam(
+ 'extraNativeDropOptions',
+ 'Array of extra native drop options in format "amount,recipient" (e.g. ["1000000000000000000,0x1234..."])',
+ undefined,
+ cliTypes.csv
+ )
+ .addOptionalParam('composeMsg', 'Arbitrary bytes message to deliver alongside the OFT', undefined, types.string)
+ .addOptionalParam(
+ 'oftAddress',
+ 'Override the source local deployment OFT address (20-byte hex for EVM)',
+ undefined,
+ types.string
+ )
+ .setAction(async (args: MasterArgs, hre: HardhatRuntimeEnvironment) => {
+ const chainType = endpointIdToChainType(args.srcEid)
+ let result: SendResult
+
+ if (args.oftAddress) {
+ DebugLogger.printWarning(
+ KnownWarnings.USING_OVERRIDE_OFT,
+ `For network: ${endpointIdToNetwork(args.srcEid)}, OFT: ${args.oftAddress}`
+ )
+ }
+
+ // Only support EVM chains in this example
+ if (chainType === ChainType.EVM) {
+ result = await sendEvm(args as EvmArgs, hre)
+ } else {
+ throw new Error(
+ `The chain type ${chainType} is not supported in this OFT example. Only EVM chains are supported.`
+ )
+ }
+
+ DebugLogger.printLayerZeroOutput(
+ KnownOutputs.SENT_VIA_OFT,
+ `Successfully sent ${args.amount} tokens from ${endpointIdToNetwork(args.srcEid)} to ${endpointIdToNetwork(args.dstEid)}`
+ )
+
+ // print the explorer link for the srcEid from metadata
+ const explorerLink = await getBlockExplorerLink(args.srcEid, result.txHash)
+ // if explorer link is available, print the tx hash link
+ if (explorerLink) {
+ DebugLogger.printLayerZeroOutput(
+ KnownOutputs.TX_HASH,
+ `Explorer link for source chain ${endpointIdToNetwork(args.srcEid)}: ${explorerLink}`
+ )
+ }
+
+ // print the LayerZero Scan link from metadata
+ DebugLogger.printLayerZeroOutput(
+ KnownOutputs.EXPLORER_LINK,
+ `LayerZero Scan link for tracking all cross-chain transaction details: ${result.scanLink}`
+ )
+ })
diff --git a/examples/ovault-evm/tasks/sendOVaultComposer.ts b/examples/ovault-evm/tasks/sendOVaultComposer.ts
new file mode 100644
index 0000000000..0790b57653
--- /dev/null
+++ b/examples/ovault-evm/tasks/sendOVaultComposer.ts
@@ -0,0 +1,484 @@
+import path from 'path'
+
+import { parseUnits } from 'ethers/lib/utils'
+import { task, types } from 'hardhat/config'
+import { HardhatRuntimeEnvironment } from 'hardhat/types'
+
+import { OmniPointHardhat, createGetHreByEid } from '@layerzerolabs/devtools-evm-hardhat'
+import { createLogger } from '@layerzerolabs/io-devtools'
+import { ChainType, endpointIdToChainType, endpointIdToNetwork } from '@layerzerolabs/lz-definitions'
+import { Options, addressToBytes32 } from '@layerzerolabs/lz-v2-utilities'
+
+import { DEPLOYMENT_CONFIG } from '../devtools/deployConfig'
+
+import { EvmArgs, sendEvm } from './sendEvm'
+import { SendResult } from './types'
+import { DebugLogger, KnownOutputs, getBlockExplorerLink } from './utils'
+
+const logger = createLogger()
+
+interface OVaultComposerArgs {
+ srcEid: number // the source chain we're sending asset or share from
+ dstEid: number // the destination chain we're receiving asset or share on
+ amount: string // amount to send
+ to: string // receiver wallet address
+ tokenType: 'asset' | 'share' // Whether we're sending asset or share
+ assetOappConfig?: string // Path to asset OFT config
+ shareOappConfig?: string // Path to share OFT config
+ minAmount?: string
+ lzReceiveGas?: number
+ lzReceiveValue?: string
+ lzComposeGas?: number
+ lzComposeValue?: string
+ oftAddress?: string // Override source OFT address
+}
+
+task('lz:ovault:send', 'Sends assets or shares through OVaultComposer with automatic composeMsg creation')
+ .addParam('srcEid', 'Source endpoint ID', undefined, types.int)
+ .addParam('dstEid', 'Destination endpoint ID', undefined, types.int)
+ .addParam('amount', 'Amount to send (human readable units, e.g. "1.5")', undefined, types.string)
+ .addParam('to', 'Recipient address (20-byte hex for EVM)', undefined, types.string)
+ .addParam(
+ 'tokenType',
+ 'Token type to send: "asset" (to get shares) or "share" (to get assets)',
+ undefined,
+ types.string
+ )
+ .addOptionalParam('assetOappConfig', 'Path to the Asset OFT config file', 'layerzero.asset.config.ts', types.string)
+ .addOptionalParam('shareOappConfig', 'Path to the Share OFT config file', 'layerzero.share.config.ts', types.string)
+ .addOptionalParam(
+ 'minAmount',
+ 'Minimum amount to receive in case of custom slippage or fees (human readable units, e.g. "1.5")',
+ undefined,
+ types.string
+ )
+ .addOptionalParam('lzReceiveGas', 'Gas for lzReceive operation', undefined, types.int)
+ .addOptionalParam('lzReceiveValue', 'Value for lzReceive operation (in wei)', undefined, types.string)
+ .addOptionalParam(
+ 'lzComposeGas',
+ 'Gas for lzCompose operation (defaults: 175k for hub destination, 375k for cross-chain)',
+ undefined,
+ types.int
+ )
+ .addOptionalParam('lzComposeValue', 'Value for lzCompose operation (in wei)', undefined, types.string)
+ .addOptionalParam(
+ 'oftAddress',
+ 'Override the source local deployment OFT address (20-byte hex for EVM)',
+ undefined,
+ types.string
+ )
+ .setAction(async (args: OVaultComposerArgs, hre: HardhatRuntimeEnvironment) => {
+ // Validate tokenType
+ if (args.tokenType !== 'asset' && args.tokenType !== 'share') {
+ throw new Error(`Invalid tokenType "${args.tokenType}". Must be "asset" or "share"`)
+ }
+
+ // Auto-detect hub chain from deployment config
+ const hubEid = DEPLOYMENT_CONFIG.vault.eid
+ const hubNetwork = Object.entries(hre.config.networks).find(([networkName, networkConfig]) => {
+ return networkConfig.eid === hubEid
+ })
+
+ if (!hubNetwork) {
+ throw new Error(
+ `Could not find hub chain network with eid ${hubEid} in deploy config. Make sure the vault chain is configured.`
+ )
+ }
+
+ const [hubNetworkName, hubNetworkConfig] = hubNetwork
+
+ logger.info(`Hub: ${endpointIdToNetwork(hubEid)} (${hubNetworkName})`)
+
+ // Validate chain types
+ if (endpointIdToChainType(args.srcEid) !== ChainType.EVM) {
+ throw new Error(`Source EID ${args.srcEid} is not an EVM chain`)
+ }
+ if (endpointIdToChainType(hubEid) !== ChainType.EVM) {
+ throw new Error(`HUB EID ${hubEid} is not an EVM chain`)
+ }
+ if (endpointIdToChainType(args.dstEid) !== ChainType.EVM) {
+ throw new Error(`Destination EID ${args.dstEid} is not an EVM chain`)
+ }
+
+ const getHreByEid = createGetHreByEid(hre)
+ const hubHre = await getHreByEid(hubEid)
+
+ // Check if all chains are the same (hub) - if so, just do direct vault interaction
+ if (args.srcEid === hubEid && args.dstEid === hubEid) {
+ logger.info(
+ `All chains are hub chain - performing direct vault ${args.tokenType === 'asset' ? 'deposit' : 'redeem'}`
+ )
+
+ // Get vault address and create contract instance
+ const vaultDeployment = await hubHre.deployments.get('MyERC4626')
+ const vaultAddress = vaultDeployment.address
+ const hubSigner = (await hubHre.ethers.getSigners())[0]
+
+ const ierc4626Artifact = await hubHre.artifacts.readArtifact('IERC4626')
+ const vault = await hubHre.ethers.getContractAt(ierc4626Artifact.abi, vaultAddress, hubSigner)
+
+ // Convert amounts to proper units
+ const inputAmountUnits = parseUnits(args.amount, 18)
+ let minAmountOut = inputAmountUnits // Default to input amount
+
+ if (args.minAmount) {
+ minAmountOut = parseUnits(args.minAmount, 18)
+ }
+
+ let txHash: string
+
+ if (args.tokenType === 'asset') {
+ // Deposit assets to get shares
+ logger.info(`Depositing ${args.amount} assets to vault...`)
+
+ // Get asset token address for approval check
+ const assetAddress = await vault.asset()
+ const ierc20Artifact = await hubHre.artifacts.readArtifact('IERC20')
+ const assetToken = await hubHre.ethers.getContractAt(ierc20Artifact.abi, assetAddress, hubSigner)
+
+ // Check allowance and approve if needed
+ const currentAllowance = await assetToken.allowance(hubSigner.address, vaultAddress)
+ if (currentAllowance.lt(inputAmountUnits)) {
+ logger.info(`Approving vault to spend ${args.amount} assets...`)
+ const approveTx = await assetToken.approve(vaultAddress, inputAmountUnits)
+ await approveTx.wait()
+ logger.info('Approval confirmed')
+ }
+
+ // Preview the deposit to show expected output
+ try {
+ const previewedShares = await vault.previewDeposit(inputAmountUnits)
+ logger.info(`Expected output: ${(parseInt(previewedShares.toString()) / 1e18).toFixed(6)} shares`)
+
+ // Check if we need to handle slippage
+ if (previewedShares.lt(minAmountOut)) {
+ throw new Error(
+ `Expected output ${previewedShares.toString()} is less than minimum ${minAmountOut.toString()}`
+ )
+ }
+ } catch (error) {
+ logger.warn('Vault preview failed, proceeding with transaction...')
+ }
+
+ // Execute deposit: deposit(uint256 assets, address receiver)
+ const tx = await vault.deposit(inputAmountUnits, args.to)
+ const receipt = await tx.wait()
+ txHash = receipt.transactionHash
+
+ logger.info(`Deposit successful - shares sent to ${args.to}`)
+ } else {
+ // Redeem shares to get assets
+ logger.info(`Redeeming ${args.amount} shares from vault...`)
+
+ // Preview the redemption to show expected output
+ try {
+ const previewedAssets = await vault.previewRedeem(inputAmountUnits)
+ logger.info(`Expected output: ${(parseInt(previewedAssets.toString()) / 1e18).toFixed(6)} assets`)
+
+ // Check if we need to handle slippage
+ if (previewedAssets.lt(minAmountOut)) {
+ throw new Error(
+ `Expected output ${previewedAssets.toString()} is less than minimum ${minAmountOut.toString()}`
+ )
+ }
+ } catch (error) {
+ logger.warn('Vault preview failed, proceeding with transaction...')
+ }
+
+ // Execute redeem: redeem(uint256 shares, address receiver, address owner)
+ const tx = await vault.redeem(inputAmountUnits, args.to, hubSigner.address)
+ const receipt = await tx.wait()
+ txHash = receipt.transactionHash
+
+ logger.info(`Redeem successful - assets sent to ${args.to}`)
+ }
+
+ const operationText = args.tokenType === 'asset' ? 'deposit' : 'redeem'
+ DebugLogger.printLayerZeroOutput(
+ KnownOutputs.SENT_VIA_OFT,
+ `Successfully completed vault ${operationText} of ${args.amount} ${args.tokenType} on ${endpointIdToNetwork(hubEid)}`
+ )
+
+ // Print the explorer link
+ const explorerLink = await getBlockExplorerLink(hubEid, txHash)
+ if (explorerLink) {
+ DebugLogger.printLayerZeroOutput(
+ KnownOutputs.TX_HASH,
+ `Explorer link for ${endpointIdToNetwork(hubEid)}: ${explorerLink}`
+ )
+ }
+
+ logger.info(`Vault ${operationText} completed successfully`)
+
+ // Early return - skip all LayerZero logic
+ return { txHash }
+ }
+
+ // Check if we're already on the hub chain - if so, just do a normal OFT send
+ if (args.srcEid === hubEid) {
+ logger.info(`Source is already hub chain - performing direct OFT send without composer`)
+ logger.info(
+ `Direct transfer: ${endpointIdToNetwork(args.srcEid)} → ${endpointIdToNetwork(args.dstEid)} (${args.tokenType} tokens)`
+ )
+
+ // Choose the appropriate config based on token type
+ const configPath =
+ args.tokenType === 'asset'
+ ? args.assetOappConfig || 'layerzero.asset.config.ts'
+ : args.shareOappConfig || 'layerzero.share.config.ts'
+
+ // Call the existing sendEvm function with no compose message
+ const evmArgs: EvmArgs = {
+ srcEid: args.srcEid,
+ dstEid: args.dstEid,
+ amount: args.amount,
+ to: args.to, // Direct to recipient, not composer
+ oappConfig: configPath,
+ minAmount: args.minAmount,
+ extraLzReceiveOptions: args.lzReceiveGas
+ ? [args.lzReceiveGas.toString(), args.lzReceiveValue || '0']
+ : undefined,
+ extraLzComposeOptions: undefined, // No compose
+ extraNativeDropOptions: undefined,
+ composeMsg: undefined, // No compose message
+ oftAddress: args.oftAddress,
+ }
+
+ const result: SendResult = await sendEvm(evmArgs, hre)
+
+ // For direct sends from hub, it's just a token transfer, not deposit/redeem
+ const routeText = `${endpointIdToNetwork(args.srcEid)} → ${endpointIdToNetwork(args.dstEid)}`
+
+ DebugLogger.printLayerZeroOutput(
+ KnownOutputs.SENT_VIA_OFT,
+ `Successfully sent ${args.amount} ${args.tokenType} tokens: ${routeText}`
+ )
+
+ // Print the explorer link for the srcEid
+ const explorerLink = await getBlockExplorerLink(args.srcEid, result.txHash)
+ if (explorerLink) {
+ DebugLogger.printLayerZeroOutput(
+ KnownOutputs.TX_HASH,
+ `Explorer link for source chain ${endpointIdToNetwork(args.srcEid)}: ${explorerLink}`
+ )
+ }
+
+ // Print the LayerZero Scan link
+ DebugLogger.printLayerZeroOutput(
+ KnownOutputs.EXPLORER_LINK,
+ `LayerZero Scan link for tracking all cross-chain transaction details: ${result.scanLink}`
+ )
+
+ // Early return - skip all composer logic
+ return
+ }
+
+ // Get OVaultComposer address from deployments on HUB
+ const composerDeployment = await hubHre.deployments.get('MyOVaultComposer')
+ const composerAddress = composerDeployment.address
+
+ // Set gas limits based on whether destination is hub chain
+ // If destination is hub, only local transfer is needed (no cross-chain messaging)
+ const lzComposeGas =
+ args.lzComposeGas ||
+ (args.dstEid === hubEid
+ ? 175000 // Lower gas for local transfer only
+ : 395000) // Higher gas for cross-chain messaging
+
+ if (!args.lzComposeGas) {
+ logger.info(`Using ${args.dstEid === hubEid ? 'local transfer' : 'cross-chain'} gas limit: ${lzComposeGas}`)
+ }
+
+ const operationType = args.tokenType === 'asset' ? 'Deposit' : 'Redeem'
+ const outputType = args.tokenType === 'asset' ? 'shares' : 'assets'
+ const routeDescription =
+ args.dstEid === hubEid
+ ? `${endpointIdToNetwork(args.srcEid)} → ${endpointIdToNetwork(hubEid)}`
+ : `${endpointIdToNetwork(args.srcEid)} → ${endpointIdToNetwork(hubEid)} → ${endpointIdToNetwork(args.dstEid)}`
+ logger.info(`${operationType}: ${routeDescription} (${args.tokenType} → ${outputType})`)
+
+ // Choose the appropriate config based on token type
+ const configPath =
+ args.tokenType === 'asset'
+ ? args.assetOappConfig || 'layerzero.asset.config.ts'
+ : args.shareOappConfig || 'layerzero.share.config.ts'
+
+ // Get vault address and call preview functions to determine output amounts
+ const vaultDeployment = await hubHre.deployments.get('MyERC4626')
+ const vaultAddress = vaultDeployment.address
+ const hubSigner = (await hubHre.ethers.getSigners())[0]
+
+ // Get vault contract instance
+ const ierc4626Artifact = await hubHre.artifacts.readArtifact('IERC4626')
+ const vault = await hubHre.ethers.getContractAt(ierc4626Artifact.abi, vaultAddress, hubSigner)
+
+ // Convert input amount to proper units and preview vault operation
+ const inputAmountUnits = parseUnits(args.amount, 18) // Assuming 18 decimals
+ let expectedOutputAmount: string
+ let minAmountOut: string
+
+ if (args.tokenType === 'asset') {
+ // Depositing assets → getting shares
+ try {
+ const previewedShares = await vault.previewDeposit(inputAmountUnits)
+ expectedOutputAmount = previewedShares.toString()
+ logger.info(
+ `Vault preview: ${args.amount} ${args.tokenType} → ${(parseInt(expectedOutputAmount) / 1e18).toFixed(6)} ${outputType}`
+ )
+ } catch (error) {
+ logger.warn(`Vault preview failed, using 1:1 estimate`)
+ expectedOutputAmount = inputAmountUnits.toString()
+ }
+ } else {
+ // Redeeming shares → getting assets
+ try {
+ const previewedAssets = await vault.previewRedeem(inputAmountUnits)
+ expectedOutputAmount = previewedAssets.toString()
+ logger.info(
+ `Vault preview: ${args.amount} ${args.tokenType} → ${(parseInt(expectedOutputAmount) / 1e18).toFixed(6)} ${outputType}`
+ )
+ } catch (error) {
+ logger.warn(`Vault preview failed, using 1:1 estimate`)
+ expectedOutputAmount = inputAmountUnits.toString()
+ }
+ }
+
+ // Calculate min amount with slippage protection
+ if (args.minAmount) {
+ minAmountOut = parseUnits(args.minAmount, 18).toString()
+ } else {
+ minAmountOut = expectedOutputAmount
+ }
+
+ // Create the SendParam for second hop (hub → destination) - used for both quoting and composeMsg
+ const secondHopSendParam = {
+ dstEid: args.dstEid,
+ to: addressToBytes32(args.to),
+ amountLD: expectedOutputAmount, // Expected output from vault preview
+ minAmountLD: minAmountOut,
+ extraOptions: Options.newOptions().addExecutorLzReceiveOption(100000, 0).toHex(),
+ composeMsg: '0x',
+ oftCmd: '0x',
+ }
+
+ // Quote the second hop (hub → destination) using hub chain RPC to get accurate compose value
+ // Only needed if the final destination is not the hub itself
+ let lzComposeValue = args.lzComposeValue || '0'
+
+ if (!args.lzComposeValue && args.dstEid !== hubEid) {
+ // Determine which OFT to quote (opposite of what we're sending)
+ const outputTokenConfig =
+ args.tokenType === 'asset'
+ ? args.shareOappConfig || 'layerzero.share.config.ts' // Asset input → Share output
+ : args.assetOappConfig || 'layerzero.asset.config.ts' // Share input → Asset output
+
+ const outputLayerZeroConfig = (await import(path.resolve('./', outputTokenConfig))).default
+ const { contracts: outputContracts } =
+ typeof outputLayerZeroConfig === 'function' ? await outputLayerZeroConfig() : outputLayerZeroConfig
+
+ // Find the output OFT on hub chain
+ const hubOutputContract = outputContracts.find(
+ (c: { contract: OmniPointHardhat }) => c.contract.eid === hubEid
+ )
+ if (!hubOutputContract) {
+ throw new Error(`No output OFT config found for hub EID ${hubEid} in ${outputTokenConfig}`)
+ }
+
+ // Get the output OFT address from hub chain deployments
+ const outputOFTAddress = hubOutputContract.contract.contractName
+ ? (await hubHre.deployments.get(hubOutputContract.contract.contractName)).address
+ : hubOutputContract.contract.address || ''
+
+ // IMPORTANT: Use hub chain RPC/signer for quoting the second hop
+ const hubSigner = (await hubHre.ethers.getSigners())[0]
+ const ioftArtifact = await hubHre.artifacts.readArtifact('IOFT')
+ const outputOFT = await hubHre.ethers.getContractAt(ioftArtifact.abi, outputOFTAddress, hubSigner)
+
+ try {
+ // Quote using hub chain RPC with the expected output amount
+ const quoteFee = await outputOFT.quoteSend(secondHopSendParam, false)
+ lzComposeValue = quoteFee.nativeFee.toString()
+ logger.info(
+ `Hub chain quoted hop fee: ${lzComposeValue} wei (${(parseInt(lzComposeValue) / 1e18).toFixed(6)} ETH)`
+ )
+ } catch (error) {
+ logger.warn(`Quote failed, using default: 0.025 ETH`)
+ lzComposeValue = '25000000000000000' // 0.025 ETH default
+ }
+ }
+
+ // If destination is the hub, no cross-chain message is needed, so no compose value
+ if (args.dstEid === hubEid) {
+ lzComposeValue = '0'
+ logger.info(`Destination is hub chain - no cross-chain compose needed`)
+ }
+
+ // Create the final composeMsg with SendParam and minMsgValue
+ // This must match exactly: struct SendParam { uint32 dstEid; bytes32 to; uint256 amountLD; uint256 minAmountLD; bytes extraOptions; bytes composeMsg; bytes oftCmd; }
+ const composeMsg = hubHre.ethers.utils.defaultAbiCoder.encode(
+ ['tuple(uint32,bytes32,uint256,uint256,bytes,bytes,bytes)', 'uint256'],
+ [
+ [
+ secondHopSendParam.dstEid,
+ secondHopSendParam.to,
+ secondHopSendParam.amountLD,
+ secondHopSendParam.minAmountLD,
+ secondHopSendParam.extraOptions,
+ secondHopSendParam.composeMsg,
+ secondHopSendParam.oftCmd,
+ ],
+ lzComposeValue,
+ ]
+ )
+
+ // Create lzCompose options with proper gas limits and quoted value
+ const extraLzComposeOptions = ['0', lzComposeGas.toString(), lzComposeValue]
+
+ // Create lzReceive options if provided
+ const extraLzReceiveOptions = args.lzReceiveGas
+ ? [args.lzReceiveGas.toString(), args.lzReceiveValue || '0']
+ : undefined
+
+ // Call the existing sendEvm function with proper parameters
+ const evmArgs: EvmArgs = {
+ srcEid: args.srcEid,
+ dstEid: hubEid, // Send to HUB first
+ amount: args.amount,
+ to: composerAddress, // Send to composer
+ oappConfig: configPath,
+ minAmount: args.minAmount,
+ extraLzReceiveOptions: extraLzReceiveOptions, // Optional lzReceive options
+ extraLzComposeOptions: extraLzComposeOptions,
+ extraNativeDropOptions: undefined,
+ composeMsg: composeMsg,
+ oftAddress: args.oftAddress,
+ }
+
+ const result: SendResult = await sendEvm(evmArgs, hre)
+
+ const operationText = args.tokenType === 'asset' ? 'deposit (asset → shares)' : 'redeem (shares → assets)'
+ const routeText =
+ args.dstEid === hubEid
+ ? `${endpointIdToNetwork(args.srcEid)} → ${endpointIdToNetwork(hubEid)}`
+ : `${endpointIdToNetwork(args.srcEid)} → ${endpointIdToNetwork(hubEid)} → ${endpointIdToNetwork(args.dstEid)}`
+
+ DebugLogger.printLayerZeroOutput(
+ KnownOutputs.SENT_VIA_OFT,
+ `Successfully sent ${args.amount} ${args.tokenType} for ${operationText}: ${routeText}`
+ )
+
+ // Print the explorer link for the srcEid
+ const explorerLink = await getBlockExplorerLink(args.srcEid, result.txHash)
+ if (explorerLink) {
+ DebugLogger.printLayerZeroOutput(
+ KnownOutputs.TX_HASH,
+ `Explorer link for source chain ${endpointIdToNetwork(args.srcEid)}: ${explorerLink}`
+ )
+ }
+
+ // Print the LayerZero Scan link
+ DebugLogger.printLayerZeroOutput(
+ KnownOutputs.EXPLORER_LINK,
+ `LayerZero Scan link for tracking all cross-chain transaction details: ${result.scanLink}`
+ )
+ })
diff --git a/examples/ovault-evm/tasks/types.ts b/examples/ovault-evm/tasks/types.ts
new file mode 100644
index 0000000000..8d2b681692
--- /dev/null
+++ b/examples/ovault-evm/tasks/types.ts
@@ -0,0 +1,4 @@
+export interface SendResult {
+ txHash: string // EVM: receipt.transactionHash
+ scanLink: string // LayerZeroScan link for cross-chain tracking
+}
diff --git a/examples/ovault-evm/tasks/utils.ts b/examples/ovault-evm/tasks/utils.ts
new file mode 100644
index 0000000000..5e2fd9b3df
--- /dev/null
+++ b/examples/ovault-evm/tasks/utils.ts
@@ -0,0 +1,48 @@
+import { endpointIdToNetwork } from '@layerzerolabs/lz-definitions'
+import { Options } from '@layerzerolabs/lz-v2-utilities'
+
+export const deploymentMetadataUrl = 'https://metadata.layerzero-api.com/v1/metadata/deployments'
+
+/**
+ * Given a srcEid and on-chain tx hash, return
+ * `https://…blockExplorers[0].url/tx/`, or undefined.
+ */
+export async function getBlockExplorerLink(srcEid: number, txHash: string): Promise {
+ const network = endpointIdToNetwork(srcEid) // e.g. "ethereum-mainnet"
+ const res = await fetch(deploymentMetadataUrl)
+ if (!res.ok) return
+ const all = (await res.json()) as Record
+ const meta = all[network]
+ const explorer = meta?.blockExplorers?.[0]?.url
+ if (explorer) {
+ // many explorers use `/tx/`
+ return `${explorer.replace(/\/+$/, '')}/tx/${txHash}`
+ }
+ return
+}
+
+function formatBigIntForDisplay(n: bigint) {
+ return n.toLocaleString().replace(/,/g, '_')
+}
+
+export function decodeLzReceiveOptions(hex: string): string {
+ try {
+ // Handle empty/undefined values first
+ if (!hex || hex === '0x') return 'No options set'
+ const options = Options.fromOptions(hex)
+ const lzReceiveOpt = options.decodeExecutorLzReceiveOption()
+ return lzReceiveOpt
+ ? `gas: ${formatBigIntForDisplay(lzReceiveOpt.gas)} , value: ${formatBigIntForDisplay(lzReceiveOpt.value)} wei`
+ : 'No executor options'
+ } catch (e) {
+ return `Invalid options (${hex.slice(0, 12)}...)`
+ }
+}
+
+// Get LayerZero scan link
+export function getLayerZeroScanLink(txHash: string, isTestnet = false): string {
+ const baseUrl = isTestnet ? 'https://testnet.layerzeroscan.com' : 'https://layerzeroscan.com'
+ return `${baseUrl}/tx/${txHash}`
+}
+
+export { DebugLogger, KnownErrors, KnownOutputs, KnownWarnings } from '@layerzerolabs/io-devtools'
diff --git a/examples/ovault-evm/test/vault-sync/VaultComposerSync_Base.t.sol b/examples/ovault-evm/test/vault-sync/VaultComposerSync_Base.t.sol
new file mode 100644
index 0000000000..9d747a3194
--- /dev/null
+++ b/examples/ovault-evm/test/vault-sync/VaultComposerSync_Base.t.sol
@@ -0,0 +1,214 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.20;
+
+// OApp imports
+import { OptionsBuilder } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol";
+
+// OFT imports
+import { OFTComposeMsgCodec } from "@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol";
+import { SendParam } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+import { EnforcedOptionParam } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol";
+
+import { VaultComposerSync } from "@layerzerolabs/ovault-evm/contracts/VaultComposerSync.sol";
+
+import { MockOFT, MockOFTAdapter } from "@layerzerolabs/ovault-evm/test/mocks/MockOFT.sol";
+import { MockVault } from "@layerzerolabs/ovault-evm/test/mocks/MockVault.sol";
+
+// Forge imports
+import "forge-std/console.sol";
+
+// DevTools imports
+import { TestHelperOz5 } from "@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol";
+
+contract VaultComposerSyncBaseTest is TestHelperOz5 {
+ using OptionsBuilder for bytes;
+
+ uint8 subMeshSize = 3;
+
+ uint32 public constant ETH_EID = 1;
+ uint32 public constant ARB_EID = 2;
+ uint32 public constant POL_EID = 3;
+ uint32 public constant BAD_EID = 101;
+
+ MockOFT public assetOFT_arb;
+ MockOFTAdapter public shareOFT_arb;
+
+ MockOFT public assetOFT_eth;
+ MockOFT public shareOFT_eth;
+
+ MockOFT public assetOFT_pol;
+ MockOFT public shareOFT_pol;
+
+ MockVault public vault_arb;
+ VaultComposerSync public VaultComposerSyncArb;
+
+ address public userA = makeAddr("userA");
+ address public userB = makeAddr("userB");
+
+ address public arbEndpoint;
+ address public arbExecutor = makeAddr("arbExecutor");
+ bytes public OPTIONS_LZRECEIVE_100k = OptionsBuilder.newOptions().addExecutorLzReceiveOption(100_000, 0);
+
+ uint256 public constant INITIAL_BALANCE = 100 ether;
+ uint256 public constant TOKENS_TO_SEND = 1 ether;
+
+ uint256 public constant msgValueToFail = 100_000 wei;
+ uint256 public constant msgValueToPass = 250_000_000 wei;
+
+ function setUp() public virtual override {
+ super.setUp();
+ setUpEndpoints(subMeshSize, LibraryType.UltraLightNode);
+
+ arbEndpoint = address(endpoints[ARB_EID]);
+
+ /// @dev Deploy the Asset OFT (we can expect them to exist before we deploy the VaultComposerSync)
+ assetOFT_arb = new MockOFT("arbAsset", "arbAsset", address(endpoints[ARB_EID]), address(this));
+ assetOFT_eth = new MockOFT("ethAsset", "ethAsset", address(endpoints[ETH_EID]), address(this));
+ assetOFT_pol = new MockOFT("polAsset", "polAsset", address(endpoints[POL_EID]), address(this));
+
+ // config and wire the ofts
+ address[] memory assetOFTs = new address[](subMeshSize);
+ assetOFTs[0] = address(assetOFT_eth);
+ assetOFTs[1] = address(assetOFT_arb);
+ assetOFTs[2] = address(assetOFT_pol);
+ this.wireOApps(assetOFTs);
+
+ /// Now the "expansion" is for the arb vault and share ofts on other networks.
+ vault_arb = new MockVault("arbShare", "arbShare", address(assetOFT_arb));
+ shareOFT_arb = new MockOFTAdapter(address(vault_arb), address(endpoints[ARB_EID]), address(this));
+ VaultComposerSyncArb = new VaultComposerSync(address(vault_arb), address(assetOFT_arb), address(shareOFT_arb));
+
+ /// Deploy the Share OFTs on other networks - these are NOT lockbox adapters.
+ shareOFT_eth = new MockOFT("ethShare", "ethShare", address(endpoints[ETH_EID]), address(this));
+ shareOFT_pol = new MockOFT("polShare", "polShare", address(endpoints[POL_EID]), address(this));
+
+ address[] memory shareOFTs = new address[](subMeshSize);
+ shareOFTs[0] = address(shareOFT_eth);
+ shareOFTs[1] = address(shareOFT_arb);
+ shareOFTs[2] = address(shareOFT_pol);
+ this.wireOApps(shareOFTs);
+
+ vm.label(address(assetOFT_arb), "AssetOFT::arb");
+ vm.label(address(assetOFT_eth), "AssetOFT::eth");
+ vm.label(address(assetOFT_pol), "AssetOFT::pol");
+
+ vm.label(address(shareOFT_arb), "ShareOFTAdapter::arb");
+ vm.label(address(shareOFT_eth), "ShareOFT::eth");
+ vm.label(address(shareOFT_pol), "ShareOFT::pol");
+
+ vm.label(address(vault_arb), "Vault::arb");
+ vm.label(address(VaultComposerSyncArb), "VaultComposerSync::arb");
+
+ deal(arbExecutor, INITIAL_BALANCE);
+ deal(arbEndpoint, INITIAL_BALANCE);
+
+ EnforcedOptionParam[] memory enforcedOptions = new EnforcedOptionParam[](3);
+ enforcedOptions[0] = EnforcedOptionParam({ eid: POL_EID, msgType: 1, options: OPTIONS_LZRECEIVE_100k });
+ enforcedOptions[1] = EnforcedOptionParam({ eid: ARB_EID, msgType: 1, options: OPTIONS_LZRECEIVE_100k });
+ enforcedOptions[2] = EnforcedOptionParam({ eid: ETH_EID, msgType: 1, options: OPTIONS_LZRECEIVE_100k });
+
+ assetOFT_arb.setEnforcedOptions(enforcedOptions);
+ assetOFT_eth.setEnforcedOptions(enforcedOptions);
+ assetOFT_pol.setEnforcedOptions(enforcedOptions);
+
+ shareOFT_arb.setEnforcedOptions(enforcedOptions);
+ shareOFT_eth.setEnforcedOptions(enforcedOptions);
+ shareOFT_pol.setEnforcedOptions(enforcedOptions);
+ }
+
+ function _removeDustWithOffset(uint256 _amount, int128 _offset) internal pure returns (uint256, uint256) {
+ uint256 amountWithOffset = _amount;
+ if (_offset < 0) {
+ uint256 modOffset = uint128(-1 * _offset);
+ // If offset is negative, we need to ensure we don't underflow
+ require(_amount >= modOffset, "Offset too large");
+ amountWithOffset = _amount - modOffset;
+ } else {
+ // If offset is positive, we can safely add it
+ amountWithOffset = _amount + uint128(_offset);
+ }
+ return _removeDust(amountWithOffset);
+ }
+
+ function _removeDust(uint256 _amount) internal pure returns (uint256, uint256) {
+ uint256 dust = _amount % 10 ** 12;
+ return (_amount - dust, dust);
+ }
+
+ function _createComposePayload(
+ uint32 _srcEid,
+ SendParam memory _sendParam,
+ uint256 _minMsgValue,
+ uint256 _amount,
+ address _msgSender
+ ) internal pure returns (bytes memory composeMsg) {
+ composeMsg = OFTComposeMsgCodec.encode(
+ 0,
+ _srcEid,
+ _amount,
+ abi.encodePacked(addressToBytes32(_msgSender), abi.encode(_sendParam, _minMsgValue))
+ );
+ }
+
+ function _createComposePayload(
+ uint32 _srcEid,
+ bytes memory _composeMsg,
+ uint256 _amount,
+ address _msgSender
+ ) internal pure returns (bytes memory composeMsg) {
+ composeMsg = OFTComposeMsgCodec.encode(
+ 0,
+ _srcEid,
+ _amount,
+ abi.encodePacked(addressToBytes32(_msgSender), _composeMsg)
+ );
+ }
+
+ function _setTradeRatioAssetToShare(
+ uint256 _assetNum,
+ uint256 _shareNum
+ ) internal returns (uint256 mintAssets, uint256 mintShares) {
+ mintAssets = _assetNum * TOKENS_TO_SEND;
+ mintShares = _shareNum * TOKENS_TO_SEND;
+
+ vault_arb.mint(address(0xbeef), mintShares);
+ assetOFT_arb.mint(address(vault_arb), mintAssets);
+ }
+
+ function _createSendParam(uint256 _amount, bool skipMint) internal returns (SendParam memory) {
+ if (!skipMint) {
+ vault_arb.mint(address(VaultComposerSyncArb), _amount);
+ }
+
+ SendParam memory sendParam;
+ sendParam.dstEid = POL_EID;
+ sendParam.to = addressToBytes32(userB);
+ sendParam.amountLD = _amount;
+ return sendParam;
+ }
+
+ function _randomGUID() internal view returns (bytes32) {
+ return bytes32(vm.randomBytes(32));
+ }
+
+ function assertEq(uint256 term1, uint256 term2, uint256 term3) internal pure {
+ assertEq(term1, term2, "term1 != term2");
+ assertEq(term1, term3, "term1 != term3");
+ }
+
+ function assertEmpty(SendParam memory _sendParam) internal pure {
+ assertEq(_sendParam.dstEid, 0, "dstEid should be empty");
+ assertEq(_sendParam.to, bytes32(0), "to should be empty");
+ assertEq(_sendParam.amountLD, 0, "amountLD should be empty");
+ assertEq(_sendParam.minAmountLD, 0, "minAmountLD should be empty");
+ assertEq(_sendParam.extraOptions, bytes(""), "extraOptions should be empty");
+ }
+
+ function assertEq(SendParam memory _term1, SendParam memory _term2) internal pure {
+ assertEq(_term1.dstEid, _term2.dstEid, "dstEid should be equal");
+ assertEq(_term1.to, _term2.to, "to should be equal");
+ assertEq(_term1.amountLD, _term2.amountLD, "amountLD should be equal");
+ assertEq(_term1.minAmountLD, _term2.minAmountLD, "minAmountLD should be equal");
+ assertEq(_term1.extraOptions, _term2.extraOptions, "extraOptions should be equal");
+ }
+}
diff --git a/examples/ovault-evm/test/vault-sync/VaultComposerSync_E2E.t.sol b/examples/ovault-evm/test/vault-sync/VaultComposerSync_E2E.t.sol
new file mode 100644
index 0000000000..c424ac8515
--- /dev/null
+++ b/examples/ovault-evm/test/vault-sync/VaultComposerSync_E2E.t.sol
@@ -0,0 +1,123 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.20;
+
+// OApp imports
+import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+import { IERC4626 } from "@openzeppelin/contracts/interfaces/IERC4626.sol";
+
+import { ILayerZeroEndpointV2 } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";
+import { IOAppCore } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol";
+import { IOFT } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+
+import { OptionsBuilder } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol";
+import { SendParam, MessagingFee } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+import { OFTComposeMsgCodec } from "@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol";
+
+import { VaultComposerSync, IVaultComposerSync } from "@layerzerolabs/ovault-evm/contracts/VaultComposerSync.sol";
+
+import { VaultComposerSyncBaseTest } from "./VaultComposerSync_Base.t.sol";
+import { console } from "forge-std/console.sol";
+
+contract VaultComposerSyncE2ETest is VaultComposerSyncBaseTest {
+ using OptionsBuilder for bytes;
+
+ /// @dev Not profiled
+ uint128 constant lzReceiveGasValue = 800_000;
+ uint128 constant lzComposeGasValue = 800_000;
+
+ /// @dev Seems to consume about 2.2 gwei
+ uint128 constant lzComposeMsgValue = 0.000025 ether;
+
+ function setUp() public virtual override {
+ super.setUp();
+
+ vm.deal(userA, 1000 ether);
+ }
+
+ function test_E2E_ethereum_to_polygon() public {
+ (uint256 shareTokensToReceive, ) = _removeDustWithOffset(TOKENS_TO_SEND * 2, -1);
+
+ deal(address(assetOFT_eth), userA, TOKENS_TO_SEND);
+
+ (uint256 mintAssets, ) = _setTradeRatioAssetToShare(1, 2);
+
+ address composerAddress = address(VaultComposerSyncArb);
+ uint256 initialPolygonBalance = shareOFT_pol.balanceOf(userA);
+
+ /// @dev This is the send param that is passed as the compose payload to the final OFT
+ SendParam memory arbToPolSendParam = SendParam(
+ POL_EID,
+ addressToBytes32(userA),
+ 0,
+ shareTokensToReceive,
+ OptionsBuilder.newOptions().addExecutorLzReceiveOption(lzReceiveGasValue, 0),
+ "",
+ ""
+ );
+ bytes memory composePayload = abi.encode(arbToPolSendParam);
+
+ /// @dev Building the NativeMesh ETH -> NativeMesh Arb send param
+ bytes memory options = OptionsBuilder
+ .newOptions()
+ .addExecutorLzReceiveOption(lzReceiveGasValue, 0)
+ .addExecutorLzComposeOption(0, lzComposeGasValue, lzComposeMsgValue);
+
+ SendParam memory ethToArbSendParam = SendParam(
+ ARB_EID,
+ addressToBytes32(composerAddress),
+ TOKENS_TO_SEND,
+ (TOKENS_TO_SEND * 9995) / 10000,
+ options,
+ composePayload,
+ ""
+ );
+
+ MessagingFee memory fee = assetOFT_eth.quoteSend(ethToArbSendParam, false);
+
+ vm.startPrank(userA);
+ assetOFT_eth.send{ value: fee.nativeFee }(ethToArbSendParam, fee, payable(address(this)));
+ vm.stopPrank();
+
+ assertEq(assetOFT_arb.balanceOf(address(vault_arb)), assetOFT_arb.totalSupply(), mintAssets);
+
+ verifyPackets(ARB_EID, addressToBytes32(address(assetOFT_arb)));
+
+ assertEq(
+ assetOFT_arb.balanceOf(composerAddress) + assetOFT_arb.balanceOf(address(vault_arb)),
+ assetOFT_arb.totalSupply(),
+ mintAssets + TOKENS_TO_SEND
+ );
+
+ bytes memory composeMsg = OFTComposeMsgCodec.encode(
+ 0,
+ ETH_EID,
+ TOKENS_TO_SEND,
+ abi.encodePacked(addressToBytes32(userA), composePayload)
+ );
+
+ vm.prank(arbEndpoint);
+ vm.deal(address(arbEndpoint), 1000 ether);
+ VaultComposerSyncArb.lzCompose{ value: lzComposeMsgValue, gas: lzComposeGasValue }(
+ address(assetOFT_arb),
+ addressToBytes32(address(assetOFT_arb)),
+ composeMsg,
+ address(this),
+ ""
+ );
+
+ assertEq(
+ assetOFT_arb.balanceOf(composerAddress),
+ 0,
+ "composerAddress should have the no tokens after lzCompose on arb"
+ );
+
+ verifyPackets(POL_EID, addressToBytes32(address(shareOFT_pol)));
+ uint256 finalPolygonBalance = shareOFT_pol.balanceOf(userA);
+
+ assertEq(
+ finalPolygonBalance - initialPolygonBalance,
+ shareTokensToReceive,
+ "userA should have all tokens after lzReceive on polygon share oft"
+ );
+ }
+}
diff --git a/examples/ovault-evm/test/vault-sync/VaultComposerSync_ProxySend.t.sol b/examples/ovault-evm/test/vault-sync/VaultComposerSync_ProxySend.t.sol
new file mode 100644
index 0000000000..a407582633
--- /dev/null
+++ b/examples/ovault-evm/test/vault-sync/VaultComposerSync_ProxySend.t.sol
@@ -0,0 +1,151 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.20;
+
+import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+import { IERC4626 } from "@openzeppelin/contracts/interfaces/IERC4626.sol";
+
+import { IOFT } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+import { IOAppCore } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol";
+import { OptionsBuilder } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol";
+import { SendParam, MessagingFee } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+
+import { VaultComposerSync, IVaultComposerSync } from "@layerzerolabs/ovault-evm/contracts/VaultComposerSync.sol";
+
+import { VaultComposerSyncBaseTest } from "./VaultComposerSync_Base.t.sol";
+import { console } from "forge-std/console.sol";
+
+contract VaultComposerSyncProxySendTest is VaultComposerSyncBaseTest {
+ using OptionsBuilder for bytes;
+
+ function setUp() public virtual override {
+ super.setUp();
+ vm.deal(userA, 100 ether);
+ }
+
+ function test_target_is_hub_reverts_when_msg_value_provided() public {
+ SendParam memory sendParam = SendParam(ARB_EID, addressToBytes32(userA), TOKENS_TO_SEND, 0, "", "", "");
+ assetOFT_arb.mint(address(userA), TOKENS_TO_SEND);
+ vault_arb.mint(address(userA), TOKENS_TO_SEND);
+
+ vm.startPrank(userA);
+ assetOFT_arb.approve(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ vault_arb.approve(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+
+ vm.expectRevert(IVaultComposerSync.NoMsgValueExpected.selector);
+ VaultComposerSyncArb.depositAndSend{ value: 1 wei }(TOKENS_TO_SEND, sendParam, userA);
+
+ vm.expectRevert(IVaultComposerSync.NoMsgValueExpected.selector);
+ VaultComposerSyncArb.redeemAndSend{ value: 2 wei }(TOKENS_TO_SEND, sendParam, userA);
+ vm.stopPrank();
+ }
+
+ function test_depositSend_target_hub() public {
+ SendParam memory sendParam = SendParam(ARB_EID, addressToBytes32(userA), TOKENS_TO_SEND, 0, "", "", "");
+ assetOFT_arb.mint(address(userA), TOKENS_TO_SEND);
+
+ vm.startPrank(userA);
+ assetOFT_arb.approve(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ VaultComposerSyncArb.depositAndSend(TOKENS_TO_SEND, sendParam, userA);
+ vm.stopPrank();
+
+ assertEq(vault_arb.balanceOf(userA), TOKENS_TO_SEND);
+ assertEq(assetOFT_arb.balanceOf(userA), 0);
+ }
+
+ function test_depositSend_target_hub_can_have_dust() public {
+ uint256 amountWithDust = TOKENS_TO_SEND + 1; // 1 extra token to test dust handling
+
+ SendParam memory sendParam = SendParam(ARB_EID, addressToBytes32(userA), amountWithDust, 0, "", "", "");
+ assetOFT_arb.mint(address(userA), amountWithDust);
+
+ vm.startPrank(userA);
+ assetOFT_arb.approve(address(VaultComposerSyncArb), amountWithDust);
+ VaultComposerSyncArb.depositAndSend(amountWithDust, sendParam, userA);
+ vm.stopPrank();
+
+ assertEq(vault_arb.balanceOf(userA), amountWithDust);
+ assertEq(assetOFT_arb.balanceOf(userA), 0);
+ }
+
+ function test_redeemSend_target_hub() public {
+ SendParam memory sendParam = SendParam(ARB_EID, addressToBytes32(userA), TOKENS_TO_SEND, 0, "", "", "");
+ assetOFT_arb.mint(address(vault_arb), TOKENS_TO_SEND);
+ vault_arb.mint(address(userA), TOKENS_TO_SEND);
+
+ vm.startPrank(userA);
+ vault_arb.approve(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ VaultComposerSyncArb.redeemAndSend(TOKENS_TO_SEND, sendParam, userA);
+ vm.stopPrank();
+
+ assertEq(vault_arb.balanceOf(userA), 0);
+ assertEq(assetOFT_arb.balanceOf(userA), TOKENS_TO_SEND);
+ }
+
+ function test_redeemSend_target_hub_can_have_dust() public {
+ uint256 amountWithDust = TOKENS_TO_SEND + 1; // 1 extra token to test dust handling
+
+ SendParam memory sendParam = SendParam(ARB_EID, addressToBytes32(userA), amountWithDust, 0, "", "", "");
+ assetOFT_arb.mint(address(vault_arb), amountWithDust);
+ vault_arb.mint(address(userA), amountWithDust);
+
+ vm.startPrank(userA);
+ vault_arb.approve(address(VaultComposerSyncArb), amountWithDust);
+ VaultComposerSyncArb.redeemAndSend(amountWithDust, sendParam, userA);
+ vm.stopPrank();
+
+ assertEq(vault_arb.balanceOf(userA), 0);
+ assertEq(assetOFT_arb.balanceOf(userA), amountWithDust);
+ }
+
+ function test_depositSend_target_not_hub() public {
+ SendParam memory sendParam = SendParam(POL_EID, addressToBytes32(userA), TOKENS_TO_SEND, 0, "", "", "");
+ assetOFT_arb.mint(address(userA), TOKENS_TO_SEND);
+
+ MessagingFee memory fee = VaultComposerSyncArb.quoteSend(
+ userA,
+ address(shareOFT_arb),
+ TOKENS_TO_SEND,
+ sendParam
+ );
+
+ vm.startPrank(userA);
+ assetOFT_arb.approve(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ VaultComposerSyncArb.depositAndSend{ value: fee.nativeFee }(TOKENS_TO_SEND, sendParam, userA);
+ vm.stopPrank();
+
+ assertEq(assetOFT_arb.totalSupply(), assetOFT_arb.balanceOf(address(vault_arb)), TOKENS_TO_SEND);
+ assertEq(vault_arb.totalSupply(), TOKENS_TO_SEND);
+ assertEq(shareOFT_pol.balanceOf(userA), 0);
+
+ verifyPackets(POL_EID, address(shareOFT_pol));
+ assertEq(shareOFT_pol.balanceOf(userA), TOKENS_TO_SEND);
+ assertEq(vault_arb.balanceOf(userA), 0);
+ }
+
+ function test_redeemSend_target_not_hub() public {
+ SendParam memory sendParam = SendParam(ETH_EID, addressToBytes32(userA), TOKENS_TO_SEND, 0, "", "", "");
+ assetOFT_arb.mint(address(vault_arb), TOKENS_TO_SEND);
+ vault_arb.mint(address(userA), TOKENS_TO_SEND);
+
+ MessagingFee memory fee = VaultComposerSyncArb.quoteSend(
+ userA,
+ address(assetOFT_arb),
+ TOKENS_TO_SEND,
+ sendParam
+ );
+
+ vm.startPrank(userA);
+ vault_arb.approve(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ VaultComposerSyncArb.redeemAndSend{ value: fee.nativeFee }(TOKENS_TO_SEND, sendParam, userA);
+ vm.stopPrank();
+
+ assertEq(vault_arb.totalSupply(), 0, "redeem burns the share tokens");
+ assertEq(assetOFT_arb.balanceOf(userA), 0);
+ assertEq(assetOFT_eth.balanceOf(userA), 0);
+
+ verifyPackets(ETH_EID, address(assetOFT_eth));
+ assertEq(assetOFT_eth.balanceOf(userA), TOKENS_TO_SEND);
+ assertEq(assetOFT_arb.balanceOf(userA), 0);
+ assertEq(vault_arb.balanceOf(userA), 0);
+ }
+}
diff --git a/examples/ovault-evm/test/vault-sync/VaultComposerSync_Unit.t.sol b/examples/ovault-evm/test/vault-sync/VaultComposerSync_Unit.t.sol
new file mode 100644
index 0000000000..cacd360eb8
--- /dev/null
+++ b/examples/ovault-evm/test/vault-sync/VaultComposerSync_Unit.t.sol
@@ -0,0 +1,239 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.20;
+
+import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+import { IERC4626 } from "@openzeppelin/contracts/interfaces/IERC4626.sol";
+
+import { IOFT } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+import { IOAppCore } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol";
+import { OptionsBuilder } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol";
+import { SendParam } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+import { Errors } from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol";
+
+import { VaultComposerSync, IVaultComposerSync } from "@layerzerolabs/ovault-evm/contracts/VaultComposerSync.sol";
+
+import { VaultComposerSyncBaseTest } from "./VaultComposerSync_Base.t.sol";
+import { console } from "forge-std/console.sol";
+
+contract VaultComposerSyncUnitTest is VaultComposerSyncBaseTest {
+ using OptionsBuilder for bytes;
+
+ function setUp() public virtual override {
+ super.setUp();
+ }
+
+ function test_deployment() public view {
+ assertEq(address(VaultComposerSyncArb.VAULT()), address(vault_arb));
+ assertEq(VaultComposerSyncArb.SHARE_OFT(), address(shareOFT_arb));
+ assertEq(VaultComposerSyncArb.ASSET_OFT(), address(assetOFT_arb));
+ }
+
+ function test_onlyEndpoint() public {
+ vm.expectRevert(abi.encodeWithSelector(IVaultComposerSync.OnlyEndpoint.selector, address(this)));
+ VaultComposerSyncArb.lzCompose(address(assetOFT_arb), _randomGUID(), "", userA, "");
+ }
+
+ function test_onlyOFT(address _oft) public {
+ vm.assume(_oft != address(assetOFT_arb) && _oft != address(shareOFT_arb));
+
+ vm.expectRevert(abi.encodeWithSelector(IVaultComposerSync.OnlyValidComposeCaller.selector, _oft));
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose{ value: 1 ether }(_oft, _randomGUID(), "", arbExecutor, "");
+ }
+
+ function test_lzCompose_pass_dst_not_hub() public {
+ bytes32 guid = _randomGUID();
+ assetOFT_arb.mint(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+
+ SendParam memory internalSendParam = SendParam(POL_EID, addressToBytes32(userA), TOKENS_TO_SEND, 0, "", "", "");
+
+ bytes memory composeMsg = _createComposePayload(ETH_EID, internalSendParam, 1 ether, TOKENS_TO_SEND, userA);
+
+ vm.expectEmit(true, true, true, true, address(assetOFT_arb));
+ emit IERC20.Transfer(address(VaultComposerSyncArb), address(vault_arb), TOKENS_TO_SEND);
+
+ vm.expectEmit(true, true, true, true, address(vault_arb));
+ emit IERC20.Transfer(address(0), address(VaultComposerSyncArb), TOKENS_TO_SEND);
+
+ vm.expectEmit(true, true, true, true, address(vault_arb));
+ emit IERC4626.Deposit(
+ address(VaultComposerSyncArb),
+ address(VaultComposerSyncArb),
+ TOKENS_TO_SEND,
+ TOKENS_TO_SEND
+ );
+
+ vm.expectEmit(true, true, true, true, address(VaultComposerSyncArb));
+ emit IVaultComposerSync.Sent(guid);
+
+ assertEq(assetOFT_arb.totalSupply(), assetOFT_arb.balanceOf(address(VaultComposerSyncArb)), TOKENS_TO_SEND);
+ assertEq(vault_arb.totalSupply(), 0);
+
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose{ value: 1 ether }(address(assetOFT_arb), guid, composeMsg, arbExecutor, "");
+
+ assertEq(assetOFT_arb.totalSupply(), assetOFT_arb.balanceOf(address(vault_arb)), TOKENS_TO_SEND);
+ assertEq(vault_arb.totalSupply(), vault_arb.balanceOf(address(shareOFT_arb)), TOKENS_TO_SEND);
+ }
+
+ function test_lzCompose_pass_dst_is_hub() public {
+ bytes32 guid = _randomGUID();
+ assetOFT_arb.mint(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+
+ SendParam memory internalSendParam = SendParam(
+ VaultComposerSyncArb.VAULT_EID(),
+ addressToBytes32(userA),
+ TOKENS_TO_SEND,
+ 0,
+ "",
+ "",
+ ""
+ );
+
+ bytes memory composeMsg = _createComposePayload(ETH_EID, internalSendParam, 0, TOKENS_TO_SEND, userA);
+
+ vm.expectEmit(true, true, true, true, address(assetOFT_arb));
+ emit IERC20.Transfer(address(VaultComposerSyncArb), address(vault_arb), TOKENS_TO_SEND);
+
+ vm.expectEmit(true, true, true, true, address(vault_arb));
+ emit IERC20.Transfer(address(0), address(VaultComposerSyncArb), TOKENS_TO_SEND);
+
+ vm.expectEmit(true, true, true, true, address(vault_arb));
+ emit IERC4626.Deposit(
+ address(VaultComposerSyncArb),
+ address(VaultComposerSyncArb),
+ TOKENS_TO_SEND,
+ TOKENS_TO_SEND
+ );
+
+ vm.expectEmit(true, true, true, true, address(VaultComposerSyncArb));
+ emit IVaultComposerSync.Sent(guid);
+
+ assertEq(assetOFT_arb.totalSupply(), assetOFT_arb.balanceOf(address(VaultComposerSyncArb)), TOKENS_TO_SEND);
+ assertEq(vault_arb.totalSupply(), 0);
+
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose(address(assetOFT_arb), guid, composeMsg, arbExecutor, "");
+
+ assertEq(assetOFT_arb.totalSupply(), assetOFT_arb.balanceOf(address(vault_arb)), TOKENS_TO_SEND);
+ assertEq(vault_arb.totalSupply(), vault_arb.balanceOf(address(userA)), TOKENS_TO_SEND);
+ }
+
+ function test_lzCompose_pass_dst_is_hub_no_msgValue_causes_refund() public {
+ bytes32 guid = _randomGUID();
+ assetOFT_arb.mint(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ uint256 userABalanceEth = assetOFT_eth.balanceOf(userA);
+
+ SendParam memory internalSendParam = SendParam(
+ VaultComposerSyncArb.VAULT_EID(),
+ addressToBytes32(userA),
+ TOKENS_TO_SEND,
+ 0,
+ "",
+ "",
+ ""
+ );
+
+ bytes memory composeMsg = _createComposePayload(ETH_EID, internalSendParam, 1 wei, TOKENS_TO_SEND, userA);
+
+ /// @dev Internal revert on try...catch
+ /// vm.expectRevert(abi.encodeWithSelector(IVaultComposerSync.NoMsgValueExpected.selector));
+
+ vm.expectEmit(true, true, true, true, address(VaultComposerSyncArb));
+ emit IVaultComposerSync.Refunded(guid);
+
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose{ value: 1 ether }(address(assetOFT_arb), guid, composeMsg, arbExecutor, "");
+
+ verifyPackets(ETH_EID, address(assetOFT_eth));
+ assertEq(
+ assetOFT_eth.balanceOf(userA),
+ userABalanceEth + TOKENS_TO_SEND,
+ "userA should have received refund on Ethereum"
+ );
+ }
+
+ function test_lzCompose_fail_invalid_payload_auto_refunds() public {
+ bytes32 guid = _randomGUID();
+ assetOFT_arb.mint(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ uint256 userABalanceEth = assetOFT_eth.balanceOf(userA);
+
+ bytes memory invalidComposeMsg = abi.encode(bytes("0x1234"), 5);
+ bytes memory composeMsg = _createComposePayload(ETH_EID, invalidComposeMsg, TOKENS_TO_SEND, userA);
+
+ vm.expectEmit(true, true, true, true, address(VaultComposerSyncArb));
+ emit IVaultComposerSync.Refunded(guid);
+
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose{ value: 1 ether }(address(assetOFT_arb), guid, composeMsg, arbExecutor, "");
+
+ verifyPackets(ETH_EID, address(assetOFT_eth));
+ assertEq(
+ assetOFT_eth.balanceOf(userA),
+ userABalanceEth + TOKENS_TO_SEND,
+ "userA should have received refund on Ethereum"
+ );
+ }
+
+ function test_lzCompose_slippage_causes_refund() public {
+ bytes32 guid = _randomGUID();
+ assetOFT_arb.mint(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ uint256 userABalanceEth = assetOFT_eth.balanceOf(userA);
+
+ SendParam memory internalSendParam = SendParam(
+ POL_EID,
+ addressToBytes32(userB),
+ TOKENS_TO_SEND,
+ TOKENS_TO_SEND + 1, // More than we can provide, causing slippage
+ "",
+ "",
+ ""
+ );
+
+ bytes memory composePayload = abi.encode(internalSendParam);
+ bytes memory composeMsg = _createComposePayload(ETH_EID, composePayload, TOKENS_TO_SEND, userA);
+
+ vm.expectEmit(true, true, true, true, address(VaultComposerSyncArb));
+ emit IVaultComposerSync.Refunded(guid);
+
+ assertEq(assetOFT_arb.totalSupply(), assetOFT_arb.balanceOf(address(VaultComposerSyncArb)), TOKENS_TO_SEND);
+ assertEq(vault_arb.totalSupply(), 0);
+
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose{ value: 1 ether }(address(assetOFT_arb), guid, composeMsg, arbExecutor, "");
+
+ // The operation should be refunded since slippage was too high
+ verifyPackets(ETH_EID, address(assetOFT_eth));
+ assertEq(
+ assetOFT_eth.balanceOf(userA),
+ userABalanceEth + TOKENS_TO_SEND,
+ "userA should have received refund on Ethereum"
+ );
+ assertEq(vault_arb.totalSupply(), 0, "No shares should be minted due to refund");
+ }
+
+ function test_InsufficientMsgValue_causes_revert_no_refund() public {
+ bytes32 guid = _randomGUID();
+ assetOFT_arb.mint(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+
+ SendParam memory internalSendParam = SendParam(POL_EID, addressToBytes32(userB), TOKENS_TO_SEND, 0, "", "", "");
+ bytes memory composeMsg = _createComposePayload(ETH_EID, internalSendParam, 10 ether, msgValueToFail, userA);
+
+ vm.expectRevert(abi.encodeWithSelector(IVaultComposerSync.InsufficientMsgValue.selector, 10 ether, 1 ether));
+
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose{ value: 1 ether }(address(assetOFT_arb), guid, composeMsg, arbExecutor, "");
+ }
+
+ function test_lzCompose_fail_not_enough_value_for_refund_complete_revert() public {
+ bytes32 guid = _randomGUID();
+ assetOFT_arb.mint(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+
+ SendParam memory internalSendParam = SendParam(POL_EID, addressToBytes32(userA), TOKENS_TO_SEND, 0, "", "", "");
+ bytes memory composeMsg = _createComposePayload(ETH_EID, internalSendParam, 0, TOKENS_TO_SEND, userA);
+
+ vm.expectRevert(abi.encodeWithSelector(Errors.LZ_InsufficientFee.selector, 200110716, 1, 0, 0)); /// @dev 200110716 is quoteSend value
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose{ value: 1 wei }(address(assetOFT_arb), guid, composeMsg, arbExecutor, "");
+ }
+}
diff --git a/examples/ovault-evm/tsconfig.json b/examples/ovault-evm/tsconfig.json
new file mode 100644
index 0000000000..027ad0f3f1
--- /dev/null
+++ b/examples/ovault-evm/tsconfig.json
@@ -0,0 +1,13 @@
+{
+ "exclude": ["node_modules"],
+ "include": ["deploy", "tasks", "test", "hardhat.config.ts"],
+ "compilerOptions": {
+ "target": "es2020",
+ "module": "commonjs",
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "strict": true,
+ "skipLibCheck": true,
+ "resolveJsonModule": true
+ }
+}
diff --git a/examples/ovault-evm/type-extensions.ts b/examples/ovault-evm/type-extensions.ts
new file mode 100644
index 0000000000..fea3c0202f
--- /dev/null
+++ b/examples/ovault-evm/type-extensions.ts
@@ -0,0 +1,52 @@
+import { NetworkConfig } from 'hardhat/types/config'
+
+declare module 'hardhat/types/config' {
+ interface HardhatNetworkUserConfig {
+ isVaultChain?: never
+ }
+
+ interface HardhatNetworkConfig {
+ isVaultChain?: never
+ }
+
+ interface HttpNetworkUserConfig {
+ isVaultChain?: boolean
+ }
+
+ interface HttpNetworkConfig {
+ isVaultChain?: boolean
+ }
+}
+
+// Validation function to ensure exactly one hub chain
+/**
+ * Validates that exactly one network has isVaultChain set to true
+ * @param networks - The networks configuration object
+ * @returns The same networks object after validation
+ * @throws Error if validation fails
+ */
+export function validateOVaultNetworks>(networks: T): T {
+ const networkNames = Object.keys(networks)
+ const vaultChains = networkNames.filter((name) => {
+ const network = networks[name] as { isVaultChain?: boolean }
+ return network?.isVaultChain === true
+ })
+
+ if (vaultChains.length === 0) {
+ throw new Error(
+ 'OVault configuration error: No hub chain \nfound. Exactly one network must have isVaultChain: true'
+ )
+ }
+
+ if (vaultChains.length > 1) {
+ throw new Error(
+ `OVault configuration error: Multiple hub chains found: ${vaultChains.join(', ')}. \nExactly one network must have isVaultChain: true\n\n`
+ )
+ }
+
+ return networks
+}
+
+export type NetworkConfigOvaultExtension = NetworkConfig & {
+ isVaultChain?: boolean
+}
diff --git a/packages/create-lz-oapp/src/config.ts b/packages/create-lz-oapp/src/config.ts
index 009f551b5f..767284e53c 100644
--- a/packages/create-lz-oapp/src/config.ts
+++ b/packages/create-lz-oapp/src/config.ts
@@ -46,6 +46,19 @@ export const getExamples = (): Example[] => {
directory: 'examples/onft721',
ref,
},
+ // OVault examples are feature flagged for the time being
+ ...(process.env.LZ_ENABLE_OVAULT_EXAMPLE
+ ? [
+ {
+ id: 'ovault-evm',
+ label: 'OVault EVM',
+ repository,
+ directory: 'examples/ovault-evm',
+ ref,
+ },
+ ]
+ : []),
+
// ZK-Solc examples are feature flagged for the time being
...(process.env.LZ_ENABLE_MIGRATION_EXAMPLE
? [
diff --git a/packages/ovault-evm/.env.example b/packages/ovault-evm/.env.example
new file mode 100644
index 0000000000..7b369e0763
--- /dev/null
+++ b/packages/ovault-evm/.env.example
@@ -0,0 +1 @@
+PRIVATE_KEY=
\ No newline at end of file
diff --git a/packages/ovault-evm/.gitignore b/packages/ovault-evm/.gitignore
new file mode 100644
index 0000000000..013981fcd3
--- /dev/null
+++ b/packages/ovault-evm/.gitignore
@@ -0,0 +1,17 @@
+out
+cache
+
+# artifacts; ignore all files except the local contract artifacts.
+artifacts/*
+!artifacts/VaultComposerSync.sol/
+!artifacts/IVaultComposerSync.sol/
+!artifacts/VaultComposerSync_Base.t.sol
+!artifacts/VaultComposerSync_E2E.t.sol
+!artifacts/VaultComposerSync_ProxySend.t.sol
+!artifacts/VaultComposerSync_Unit.t.sol
+
+
+# sdk
+.env
+.op.env
+node_modules
\ No newline at end of file
diff --git a/packages/ovault-evm/README.md b/packages/ovault-evm/README.md
new file mode 100644
index 0000000000..5f07e89db3
--- /dev/null
+++ b/packages/ovault-evm/README.md
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+@layerzerolabs/ovault-evm
+
+
+
+
+
+
+
+
+
+
+
+## Installation
+
+```bash
+pnpm install @layerzerolabs/ovault-evm
+```
+
+```bash
+npm install @layerzerolabs/ovault-evm
+```
+
+
+## Ovault SDK
+
+This is an SDK to make depositing/redeeming on OVaults simple.
+
+Currently this only supports synchronous vault withdrawls.
+
+### Usage
+
+All information required can be retrieved by calling `OVaultMessageBuilder.generateOVaultInputs`. You need to pass in an object like:
+
+```typescript
+{
+ srcEid: number,
+ hubEid: number,
+ dstEid: number,
+ walletAddress: `0x${string}`,
+ dstAddress?: `0x${string}`, // If no dstAddress is supplied, it's assumed to be the same as the source wallet address
+ vaultAddress: `0x${string}`,
+ composerAddress: `0x${string}`,
+ hubChain: Chain, // This is a Viem chain definition
+ sourceChain: Chain, // This is a Viem chain definition
+ operation: OVaultOperations,
+ amount: bigint,
+ slippage: number, // such as 0.01 for 1% slippage
+ oftAddress: `0x${string}`,
+ tokenAddress?: `0x${string}`, // If the token address is not supplied, its assumed the OFT and the token are the same
+}
+```
+
+For full information about the input object check `GenerateOVaultSyncInputsProps` in `src/types.ts`
+
+You will then recieve an `OVaultInputs` object back containing all information you should need to create the transaction or display to users
+
+### Example
+
+Below is an example of how to deposit tokens using the Viem client on a server side environment.
+
+```typescript
+const input = {
+ srcEid: 40245, // eid for base-sepolia
+ hubEid: 40231, // eid for arbitrum-sepolia
+ dstEid: 40245, // eid for base-sepolia
+
+ // Optional. If dstAddress is not specified it will default to the walletAddress on the dst chain
+ dstAddress: "0x0000000000000000000000000000000000000000",
+ walletAddress: "0x0000000000000000000000000000000000000000",
+ vaultAddress: "0x0000000000000000000000000000000000000000",
+
+ // Address of the OVault Composer on the Hub Chain. Should implement IVaultComposerSync
+ composerAddress: "0x0000000000000000000000000000000000000000",
+
+ // Supply the Viem Chain Definitions for the hub and source chain. This is so the sdk can
+ // quote fees and perform read operations
+ hubChain: arbitrumSepolia,
+ sourceChain: baseSepolia,
+ operation: OVaultOperations.DEPOSIT,
+ amount: 100000000000000000n,
+ slippage: 0.01, // 1% slippage
+
+ // Address of the token/oft. The token is an ERC20. They can be the same address.
+ // If tokenAddress isn't specified it defaults to the oftAddress
+ tokenAddress: "0x0000000000000000000000000000000000000000",
+ oftAddress: "0x0000000000000000000000000000000000000000",
+} as const;
+
+const inputs = await OVaultMessageBuilder.generateOVaultInputs(input);
+const account = privateKeyToAccount("YOUR PRIVATE KEY HERE");
+
+const walletClient = createWalletClient({
+ account,
+ chain: srcChain.chain,
+ transport: http(),
+}).extend(publicActions);
+
+if (inputs.approval) {
+ // Approve token if required
+ const approvalTx = await walletClient.writeContract({
+ address: inputs.approval.tokenAddress,
+ abi: ERC20Abi,
+ functionName: "approve",
+ args: [inputs.approval.spender, inputs.approval.amount],
+ });
+ await walletClient.waitForTransactionReceipt({ hash: approvalTx });
+}
+
+const tx = await walletClient.writeContract({
+ address: inputs.contractAddress,
+ abi: inputs.abi,
+ value: inputs.messageFee.nativeFee,
+ functionName: inputs.contractFunctionName,
+ args: inputs.txArgs as any,
+});
+```
+
+For more example usage you can check `./test/sdk.test.ts`. It will run transactions against the deployed OVault contracts
+on Base-Sepolia and Arbitrum-Sepolia
diff --git a/packages/ovault-evm/artifacts/IVaultComposerSync.sol/IVaultComposerSync.json b/packages/ovault-evm/artifacts/IVaultComposerSync.sol/IVaultComposerSync.json
new file mode 100644
index 0000000000..74071f11df
--- /dev/null
+++ b/packages/ovault-evm/artifacts/IVaultComposerSync.sol/IVaultComposerSync.json
@@ -0,0 +1,974 @@
+{
+ "abi": [
+ { "type": "receive", "stateMutability": "payable" },
+ {
+ "type": "function",
+ "name": "ASSET_ERC20",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "ASSET_OFT",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "ENDPOINT",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "SHARE_ERC20",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "SHARE_OFT",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "VAULT",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract IERC4626" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "VAULT_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "depositAndSend",
+ "inputs": [
+ { "name": "assetAmount", "type": "uint256", "internalType": "uint256" },
+ {
+ "name": "sendParam",
+ "type": "tuple",
+ "internalType": "struct SendParam",
+ "components": [
+ { "name": "dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "to", "type": "bytes32", "internalType": "bytes32" },
+ {
+ "name": "amountLD",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "minAmountLD",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "extraOptions",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ { "name": "composeMsg", "type": "bytes", "internalType": "bytes" },
+ { "name": "oftCmd", "type": "bytes", "internalType": "bytes" }
+ ]
+ },
+ {
+ "name": "refundAddress",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "lzCompose",
+ "inputs": [
+ { "name": "_from", "type": "address", "internalType": "address" },
+ { "name": "_guid", "type": "bytes32", "internalType": "bytes32" },
+ { "name": "_message", "type": "bytes", "internalType": "bytes" },
+ { "name": "_executor", "type": "address", "internalType": "address" },
+ { "name": "_extraData", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "quoteSend",
+ "inputs": [
+ { "name": "from", "type": "address", "internalType": "address" },
+ { "name": "targetOft", "type": "address", "internalType": "address" },
+ {
+ "name": "vaultInAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "sendParam",
+ "type": "tuple",
+ "internalType": "struct SendParam",
+ "components": [
+ { "name": "dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "to", "type": "bytes32", "internalType": "bytes32" },
+ {
+ "name": "amountLD",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "minAmountLD",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "extraOptions",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ { "name": "composeMsg", "type": "bytes", "internalType": "bytes" },
+ { "name": "oftCmd", "type": "bytes", "internalType": "bytes" }
+ ]
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "tuple",
+ "internalType": "struct MessagingFee",
+ "components": [
+ {
+ "name": "nativeFee",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "lzTokenFee",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "redeemAndSend",
+ "inputs": [
+ { "name": "shareAmount", "type": "uint256", "internalType": "uint256" },
+ {
+ "name": "sendParam",
+ "type": "tuple",
+ "internalType": "struct SendParam",
+ "components": [
+ { "name": "dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "to", "type": "bytes32", "internalType": "bytes32" },
+ {
+ "name": "amountLD",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "minAmountLD",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "extraOptions",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ { "name": "composeMsg", "type": "bytes", "internalType": "bytes" },
+ { "name": "oftCmd", "type": "bytes", "internalType": "bytes" }
+ ]
+ },
+ {
+ "name": "refundAddress",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "event",
+ "name": "Refunded",
+ "inputs": [
+ {
+ "name": "guid",
+ "type": "bytes32",
+ "indexed": true,
+ "internalType": "bytes32"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "Sent",
+ "inputs": [
+ {
+ "name": "guid",
+ "type": "bytes32",
+ "indexed": true,
+ "internalType": "bytes32"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "AssetTokenNotVaultAsset",
+ "inputs": [
+ { "name": "assetERC20", "type": "address", "internalType": "address" },
+ { "name": "vaultAsset", "type": "address", "internalType": "address" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "InsufficientMsgValue",
+ "inputs": [
+ {
+ "name": "expectedMsgValue",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "actualMsgValue",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ { "type": "error", "name": "NoMsgValueExpected", "inputs": [] },
+ {
+ "type": "error",
+ "name": "OnlyEndpoint",
+ "inputs": [
+ { "name": "caller", "type": "address", "internalType": "address" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "OnlySelf",
+ "inputs": [
+ { "name": "caller", "type": "address", "internalType": "address" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "OnlyValidComposeCaller",
+ "inputs": [
+ { "name": "caller", "type": "address", "internalType": "address" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "ShareOFTNotAdapter",
+ "inputs": [
+ { "name": "shareOFT", "type": "address", "internalType": "address" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "ShareTokenNotVault",
+ "inputs": [
+ { "name": "shareERC20", "type": "address", "internalType": "address" },
+ { "name": "vault", "type": "address", "internalType": "address" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SlippageExceeded",
+ "inputs": [
+ { "name": "amountLD", "type": "uint256", "internalType": "uint256" },
+ { "name": "minAmountLD", "type": "uint256", "internalType": "uint256" }
+ ]
+ }
+ ],
+ "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} },
+ "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} },
+ "methodIdentifiers": {
+ "ASSET_ERC20()": "1df34fa3",
+ "ASSET_OFT()": "0bfec755",
+ "ENDPOINT()": "6fad06f5",
+ "SHARE_ERC20()": "a99ecc54",
+ "SHARE_OFT()": "369caf83",
+ "VAULT()": "411557d1",
+ "VAULT_EID()": "aa72fe3f",
+ "depositAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)": "19197ec6",
+ "lzCompose(address,bytes32,bytes,address,bytes)": "d0a10260",
+ "quoteSend(address,address,uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "7e6e1e10",
+ "redeemAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)": "53174fa4"
+ },
+ "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetERC20\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vaultAsset\",\"type\":\"address\"}],\"name\":\"AssetTokenNotVaultAsset\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expectedMsgValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualMsgValue\",\"type\":\"uint256\"}],\"name\":\"InsufficientMsgValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoMsgValueExpected\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"OnlyValidComposeCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"shareOFT\",\"type\":\"address\"}],\"name\":\"ShareOFTNotAdapter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"shareERC20\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"}],\"name\":\"ShareTokenNotVault\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"}],\"name\":\"Refunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"}],\"name\":\"Sent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ASSET_ERC20\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ASSET_OFT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ENDPOINT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SHARE_ERC20\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SHARE_OFT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT\",\"outputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assetAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"sendParam\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"refundAddress\",\"type\":\"address\"}],\"name\":\"depositAndSend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"targetOft\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vaultInAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shareAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"sendParam\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"refundAddress\",\"type\":\"address\"}],\"name\":\"redeemAndSend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"depositAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)\":{\"params\":{\"assetAmount\":\"The number of ERC20 tokens to deposit and send\",\"refundAddress\":\"Address to receive excess `msg.value`\",\"sendParam\":\"Parameters on how to send the shares to the recipient\"}},\"lzCompose(address,bytes32,bytes,address,bytes)\":{\"details\":\"To ensure non-reentrancy, implementers of this interface MUST assert msg.sender is the corresponding EndpointV2 contract (i.e., onlyEndpointV2).\",\"params\":{\"_executor\":\"The address of the executor for the composed message.\",\"_extraData\":\"Additional arbitrary data in bytes passed by the entity who executes the lzCompose.\",\"_from\":\"The address initiating the composition, typically the OApp where the lzReceive was called.\",\"_guid\":\"The unique identifier for the corresponding LayerZero src/dst tx.\",\"_message\":\"The composed message payload in bytes. NOT necessarily the same payload passed via lzReceive.\"}},\"quoteSend(address,address,uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"details\":\"This function can be overridden to implement custom quoting logic\",\"params\":{\"from\":\"The \\\"sender address\\\" used for the quote\",\"sendParam\":\"The parameters for the send operation\",\"targetOft\":\"The OFT contract address to quote\",\"vaultInAmount\":\"The amount of tokens to send to the vault\"},\"returns\":{\"_0\":\"MessagingFee The estimated fee for the send operation\"}},\"redeemAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)\":{\"params\":{\"refundAddress\":\"Address to receive excess payment of the LZ fees\",\"sendParam\":\"Parameter that defines how to send the assets\",\"shareAmount\":\"The number of vault shares to redeem\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ShareOFTNotAdapter(address)\":[{\"notice\":\"========================== Error Messages =====================================\"}]},\"events\":{\"Sent(bytes32)\":{\"notice\":\"========================== EVENTS =====================================\"}},\"kind\":\"user\",\"methods\":{\"VAULT()\":{\"notice\":\"========================== GLOBAL VARIABLE FUNCTIONS =====================================\"},\"depositAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)\":{\"notice\":\"Deposits ERC20 assets from the caller into the vault and sends them to the recipient\"},\"lzCompose(address,bytes32,bytes,address,bytes)\":{\"notice\":\"Composes a LayerZero message from an OApp.\"},\"quoteSend(address,address,uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Quotes the send operation for the given OFT and SendParam\"},\"redeemAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)\":{\"notice\":\"Redeems vault shares and sends the resulting assets to the user\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IVaultComposerSync.sol\":\"IVaultComposerSync\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/\"]},\"sources\":{\"contracts/interfaces/IVaultComposerSync.sol\":{\"keccak256\":\"0x86597121d142cdd98d7399abfe1109ab4052d570056758f71193b8a614c289cd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bcfb48d7d685e5e4d46dc16e3a74d18341c489ea4efcab2e593ec3b3f3cca48\",\"dweb:/ipfs/QmQG5PGYqVDrxBeGy7vcYKkk3jjqt3mLJ9kJpjwcRQzWZu\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol\":{\"keccak256\":\"0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d\",\"dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0xc60c7b4374b3d89f33b8de982f463c92374a8548800c816fe776f0ec76351fb0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9e2ae9efc2a93373e822b148b3a3b50e3562c8c317f2e71d73cf4a11dede9d15\",\"dweb:/ipfs/QmahCbqvqEcWLJpqE6EbHHTuSbnGWyo35ZBVqoyKv18BSF\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}",
+ "metadata": {
+ "compiler": { "version": "0.8.22+commit.4fc1097e" },
+ "language": "Solidity",
+ "output": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "assetERC20",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "vaultAsset",
+ "type": "address"
+ }
+ ],
+ "type": "error",
+ "name": "AssetTokenNotVaultAsset"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "expectedMsgValue",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "actualMsgValue",
+ "type": "uint256"
+ }
+ ],
+ "type": "error",
+ "name": "InsufficientMsgValue"
+ },
+ { "inputs": [], "type": "error", "name": "NoMsgValueExpected" },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "caller", "type": "address" }
+ ],
+ "type": "error",
+ "name": "OnlyEndpoint"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "caller", "type": "address" }
+ ],
+ "type": "error",
+ "name": "OnlySelf"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "caller", "type": "address" }
+ ],
+ "type": "error",
+ "name": "OnlyValidComposeCaller"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "shareOFT", "type": "address" }
+ ],
+ "type": "error",
+ "name": "ShareOFTNotAdapter"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "shareERC20",
+ "type": "address"
+ },
+ { "internalType": "address", "name": "vault", "type": "address" }
+ ],
+ "type": "error",
+ "name": "ShareTokenNotVault"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountLD",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minAmountLD",
+ "type": "uint256"
+ }
+ ],
+ "type": "error",
+ "name": "SlippageExceeded"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "guid",
+ "type": "bytes32",
+ "indexed": true
+ }
+ ],
+ "type": "event",
+ "name": "Refunded",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "guid",
+ "type": "bytes32",
+ "indexed": true
+ }
+ ],
+ "type": "event",
+ "name": "Sent",
+ "anonymous": false
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "ASSET_ERC20",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "ASSET_OFT",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "ENDPOINT",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "SHARE_ERC20",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "SHARE_OFT",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "VAULT",
+ "outputs": [
+ {
+ "internalType": "contract IERC4626",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "VAULT_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "assetAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct SendParam",
+ "name": "sendParam",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "uint32",
+ "name": "dstEid",
+ "type": "uint32"
+ },
+ { "internalType": "bytes32", "name": "to", "type": "bytes32" },
+ {
+ "internalType": "uint256",
+ "name": "amountLD",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minAmountLD",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "extraOptions",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "composeMsg",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "oftCmd", "type": "bytes" }
+ ]
+ },
+ {
+ "internalType": "address",
+ "name": "refundAddress",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "depositAndSend"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "_from", "type": "address" },
+ { "internalType": "bytes32", "name": "_guid", "type": "bytes32" },
+ { "internalType": "bytes", "name": "_message", "type": "bytes" },
+ {
+ "internalType": "address",
+ "name": "_executor",
+ "type": "address"
+ },
+ { "internalType": "bytes", "name": "_extraData", "type": "bytes" }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzCompose"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "from", "type": "address" },
+ {
+ "internalType": "address",
+ "name": "targetOft",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "vaultInAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct SendParam",
+ "name": "sendParam",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "uint32",
+ "name": "dstEid",
+ "type": "uint32"
+ },
+ { "internalType": "bytes32", "name": "to", "type": "bytes32" },
+ {
+ "internalType": "uint256",
+ "name": "amountLD",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minAmountLD",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "extraOptions",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "composeMsg",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "oftCmd", "type": "bytes" }
+ ]
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "quoteSend",
+ "outputs": [
+ {
+ "internalType": "struct MessagingFee",
+ "name": "",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "nativeFee",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "lzTokenFee",
+ "type": "uint256"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "shareAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct SendParam",
+ "name": "sendParam",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "uint32",
+ "name": "dstEid",
+ "type": "uint32"
+ },
+ { "internalType": "bytes32", "name": "to", "type": "bytes32" },
+ {
+ "internalType": "uint256",
+ "name": "amountLD",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minAmountLD",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "extraOptions",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "composeMsg",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "oftCmd", "type": "bytes" }
+ ]
+ },
+ {
+ "internalType": "address",
+ "name": "refundAddress",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "redeemAndSend"
+ },
+ { "inputs": [], "stateMutability": "payable", "type": "receive" }
+ ],
+ "devdoc": {
+ "kind": "dev",
+ "methods": {
+ "depositAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)": {
+ "params": {
+ "assetAmount": "The number of ERC20 tokens to deposit and send",
+ "refundAddress": "Address to receive excess `msg.value`",
+ "sendParam": "Parameters on how to send the shares to the recipient"
+ }
+ },
+ "lzCompose(address,bytes32,bytes,address,bytes)": {
+ "details": "To ensure non-reentrancy, implementers of this interface MUST assert msg.sender is the corresponding EndpointV2 contract (i.e., onlyEndpointV2).",
+ "params": {
+ "_executor": "The address of the executor for the composed message.",
+ "_extraData": "Additional arbitrary data in bytes passed by the entity who executes the lzCompose.",
+ "_from": "The address initiating the composition, typically the OApp where the lzReceive was called.",
+ "_guid": "The unique identifier for the corresponding LayerZero src/dst tx.",
+ "_message": "The composed message payload in bytes. NOT necessarily the same payload passed via lzReceive."
+ }
+ },
+ "quoteSend(address,address,uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": {
+ "details": "This function can be overridden to implement custom quoting logic",
+ "params": {
+ "from": "The \"sender address\" used for the quote",
+ "sendParam": "The parameters for the send operation",
+ "targetOft": "The OFT contract address to quote",
+ "vaultInAmount": "The amount of tokens to send to the vault"
+ },
+ "returns": {
+ "_0": "MessagingFee The estimated fee for the send operation"
+ }
+ },
+ "redeemAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)": {
+ "params": {
+ "refundAddress": "Address to receive excess payment of the LZ fees",
+ "sendParam": "Parameter that defines how to send the assets",
+ "shareAmount": "The number of vault shares to redeem"
+ }
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {
+ "VAULT()": {
+ "notice": "========================== GLOBAL VARIABLE FUNCTIONS ====================================="
+ },
+ "depositAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)": {
+ "notice": "Deposits ERC20 assets from the caller into the vault and sends them to the recipient"
+ },
+ "lzCompose(address,bytes32,bytes,address,bytes)": {
+ "notice": "Composes a LayerZero message from an OApp."
+ },
+ "quoteSend(address,address,uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": {
+ "notice": "Quotes the send operation for the given OFT and SendParam"
+ },
+ "redeemAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)": {
+ "notice": "Redeems vault shares and sends the resulting assets to the user"
+ }
+ },
+ "version": 1
+ }
+ },
+ "settings": {
+ "remappings": [
+ "@layerzerolabs/=node_modules/@layerzerolabs/",
+ "@openzeppelin/=node_modules/@openzeppelin/",
+ "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/",
+ "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/",
+ "solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/"
+ ],
+ "optimizer": { "enabled": true, "runs": 20000 },
+ "metadata": { "bytecodeHash": "ipfs" },
+ "compilationTarget": {
+ "contracts/interfaces/IVaultComposerSync.sol": "IVaultComposerSync"
+ },
+ "evmVersion": "shanghai",
+ "libraries": {}
+ },
+ "sources": {
+ "contracts/interfaces/IVaultComposerSync.sol": {
+ "keccak256": "0x86597121d142cdd98d7399abfe1109ab4052d570056758f71193b8a614c289cd",
+ "urls": [
+ "bzz-raw://0bcfb48d7d685e5e4d46dc16e3a74d18341c489ea4efcab2e593ec3b3f3cca48",
+ "dweb:/ipfs/QmQG5PGYqVDrxBeGy7vcYKkk3jjqt3mLJ9kJpjwcRQzWZu"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": {
+ "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49",
+ "urls": [
+ "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf",
+ "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": {
+ "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3",
+ "urls": [
+ "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083",
+ "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": {
+ "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc",
+ "urls": [
+ "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b",
+ "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": {
+ "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972",
+ "urls": [
+ "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927",
+ "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": {
+ "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901",
+ "urls": [
+ "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d",
+ "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": {
+ "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e",
+ "urls": [
+ "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6",
+ "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": {
+ "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc",
+ "urls": [
+ "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0",
+ "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": {
+ "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20",
+ "urls": [
+ "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2",
+ "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol": {
+ "keccak256": "0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae",
+ "urls": [
+ "bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d",
+ "dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": {
+ "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58",
+ "urls": [
+ "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd",
+ "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": {
+ "keccak256": "0xc60c7b4374b3d89f33b8de982f463c92374a8548800c816fe776f0ec76351fb0",
+ "urls": [
+ "bzz-raw://9e2ae9efc2a93373e822b148b3a3b50e3562c8c317f2e71d73cf4a11dede9d15",
+ "dweb:/ipfs/QmahCbqvqEcWLJpqE6EbHHTuSbnGWyo35ZBVqoyKv18BSF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/access/Ownable.sol": {
+ "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
+ "urls": [
+ "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
+ "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": {
+ "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7",
+ "urls": [
+ "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b",
+ "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": {
+ "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724",
+ "urls": [
+ "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a",
+ "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": {
+ "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c",
+ "urls": [
+ "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba",
+ "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol": {
+ "keccak256": "0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17",
+ "urls": [
+ "bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1",
+ "dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": {
+ "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7",
+ "urls": [
+ "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db",
+ "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
+ "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330",
+ "urls": [
+ "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf",
+ "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
+ "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310",
+ "urls": [
+ "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862",
+ "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Address.sol": {
+ "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5",
+ "urls": [
+ "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23",
+ "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Context.sol": {
+ "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
+ "urls": [
+ "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
+ "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Errors.sol": {
+ "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123",
+ "urls": [
+ "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf",
+ "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": {
+ "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8",
+ "urls": [
+ "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621",
+ "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"
+ ],
+ "license": "MIT"
+ }
+ },
+ "version": 1
+ },
+ "id": 1
+}
diff --git a/packages/ovault-evm/artifacts/VaultComposerSync.sol/VaultComposerSync.json b/packages/ovault-evm/artifacts/VaultComposerSync.sol/VaultComposerSync.json
new file mode 100644
index 0000000000..38cf940bfb
--- /dev/null
+++ b/packages/ovault-evm/artifacts/VaultComposerSync.sol/VaultComposerSync.json
@@ -0,0 +1,1243 @@
+{
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [
+ { "name": "_vault", "type": "address", "internalType": "address" },
+ { "name": "_assetOFT", "type": "address", "internalType": "address" },
+ { "name": "_shareOFT", "type": "address", "internalType": "address" }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ { "type": "receive", "stateMutability": "payable" },
+ {
+ "type": "function",
+ "name": "ASSET_ERC20",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "ASSET_OFT",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "ENDPOINT",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "SHARE_ERC20",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "SHARE_OFT",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "VAULT",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract IERC4626" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "VAULT_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "depositAndSend",
+ "inputs": [
+ {
+ "name": "_assetAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "_sendParam",
+ "type": "tuple",
+ "internalType": "struct SendParam",
+ "components": [
+ { "name": "dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "to", "type": "bytes32", "internalType": "bytes32" },
+ {
+ "name": "amountLD",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "minAmountLD",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "extraOptions",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ { "name": "composeMsg", "type": "bytes", "internalType": "bytes" },
+ { "name": "oftCmd", "type": "bytes", "internalType": "bytes" }
+ ]
+ },
+ {
+ "name": "_refundAddress",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "handleCompose",
+ "inputs": [
+ { "name": "_oftIn", "type": "address", "internalType": "address" },
+ {
+ "name": "_composeFrom",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ { "name": "_composeMsg", "type": "bytes", "internalType": "bytes" },
+ { "name": "_amount", "type": "uint256", "internalType": "uint256" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "lzCompose",
+ "inputs": [
+ {
+ "name": "_composeSender",
+ "type": "address",
+ "internalType": "address"
+ },
+ { "name": "_guid", "type": "bytes32", "internalType": "bytes32" },
+ { "name": "_message", "type": "bytes", "internalType": "bytes" },
+ { "name": "", "type": "address", "internalType": "address" },
+ { "name": "", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "quoteSend",
+ "inputs": [
+ { "name": "_from", "type": "address", "internalType": "address" },
+ { "name": "_targetOFT", "type": "address", "internalType": "address" },
+ {
+ "name": "_vaultInAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "_sendParam",
+ "type": "tuple",
+ "internalType": "struct SendParam",
+ "components": [
+ { "name": "dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "to", "type": "bytes32", "internalType": "bytes32" },
+ {
+ "name": "amountLD",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "minAmountLD",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "extraOptions",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ { "name": "composeMsg", "type": "bytes", "internalType": "bytes" },
+ { "name": "oftCmd", "type": "bytes", "internalType": "bytes" }
+ ]
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "tuple",
+ "internalType": "struct MessagingFee",
+ "components": [
+ {
+ "name": "nativeFee",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "lzTokenFee",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "redeemAndSend",
+ "inputs": [
+ {
+ "name": "_shareAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "_sendParam",
+ "type": "tuple",
+ "internalType": "struct SendParam",
+ "components": [
+ { "name": "dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "to", "type": "bytes32", "internalType": "bytes32" },
+ {
+ "name": "amountLD",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "minAmountLD",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "extraOptions",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ { "name": "composeMsg", "type": "bytes", "internalType": "bytes" },
+ { "name": "oftCmd", "type": "bytes", "internalType": "bytes" }
+ ]
+ },
+ {
+ "name": "_refundAddress",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "event",
+ "name": "Refunded",
+ "inputs": [
+ {
+ "name": "guid",
+ "type": "bytes32",
+ "indexed": true,
+ "internalType": "bytes32"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "Sent",
+ "inputs": [
+ {
+ "name": "guid",
+ "type": "bytes32",
+ "indexed": true,
+ "internalType": "bytes32"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "AssetTokenNotVaultAsset",
+ "inputs": [
+ { "name": "assetERC20", "type": "address", "internalType": "address" },
+ { "name": "vaultAsset", "type": "address", "internalType": "address" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "ERC4626ExceededMaxDeposit",
+ "inputs": [
+ { "name": "receiver", "type": "address", "internalType": "address" },
+ { "name": "assets", "type": "uint256", "internalType": "uint256" },
+ { "name": "max", "type": "uint256", "internalType": "uint256" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "ERC4626ExceededMaxRedeem",
+ "inputs": [
+ { "name": "owner", "type": "address", "internalType": "address" },
+ { "name": "shares", "type": "uint256", "internalType": "uint256" },
+ { "name": "max", "type": "uint256", "internalType": "uint256" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "InsufficientMsgValue",
+ "inputs": [
+ {
+ "name": "expectedMsgValue",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "actualMsgValue",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ { "type": "error", "name": "NoMsgValueExpected", "inputs": [] },
+ {
+ "type": "error",
+ "name": "OnlyEndpoint",
+ "inputs": [
+ { "name": "caller", "type": "address", "internalType": "address" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "OnlySelf",
+ "inputs": [
+ { "name": "caller", "type": "address", "internalType": "address" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "OnlyValidComposeCaller",
+ "inputs": [
+ { "name": "caller", "type": "address", "internalType": "address" }
+ ]
+ },
+ { "type": "error", "name": "ReentrancyGuardReentrantCall", "inputs": [] },
+ {
+ "type": "error",
+ "name": "SafeERC20FailedOperation",
+ "inputs": [
+ { "name": "token", "type": "address", "internalType": "address" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "ShareOFTNotAdapter",
+ "inputs": [
+ { "name": "shareOFT", "type": "address", "internalType": "address" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "ShareTokenNotVault",
+ "inputs": [
+ { "name": "shareERC20", "type": "address", "internalType": "address" },
+ { "name": "vault", "type": "address", "internalType": "address" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SlippageExceeded",
+ "inputs": [
+ { "name": "amountLD", "type": "uint256", "internalType": "uint256" },
+ { "name": "minAmountLD", "type": "uint256", "internalType": "uint256" }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x61016060405234801562000011575f80fd5b50604051620024be380380620024be833981016040819052620000349162000608565b60015f556001600160a01b03808416608052821660a081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa15801562000087573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000659565b6001600160a01b0390811660c052811660e081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa158015620000fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000122919062000659565b6001600160a01b0316610100816001600160a01b03168152505060a0516001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a1919062000659565b6001600160a01b03166101208190526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620001ea573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200021091906200067e565b63ffffffff1661014052608051610100516001600160a01b039081169116146200026c576101005160805160405163070bc55b60e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b6080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d1919062000659565b6001600160a01b031660c0516001600160a01b031614620003815760c0516080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000354919062000659565b60405163ba9d665f60e01b81526001600160a01b0392831660048201529116602482015260440162000263565b60e0516001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e69190620006a3565b620004145760e051604051637e0a8a5760e11b81526001600160a01b03909116600482015260240162000263565b60c05160405163095ea7b360e01b81526001600160a01b0385811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af115801562000465573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200048b9190620006a3565b506101005160405163095ea7b360e01b81526001600160a01b0383811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620004de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005049190620006a3565b50816001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000542573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005689190620006a3565b15620005e75760c05160405163095ea7b360e01b81526001600160a01b0384811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620005bf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005e59190620006a3565b505b505050620006c4565b6001600160a01b038116811462000605575f80fd5b50565b5f805f606084860312156200061b575f80fd5b83516200062881620005f0565b60208501519093506200063b81620005f0565b60408501519092506200064e81620005f0565b809150509250925092565b5f602082840312156200066a575f80fd5b81516200067781620005f0565b9392505050565b5f602082840312156200068f575f80fd5b815163ffffffff8116811462000677575f80fd5b5f60208284031215620006b4575f80fd5b8151801515811462000677575f80fd5b60805160a05160c05160e051610100516101205161014051611d246200079a5f395f81816102a5015261111301525f8181610200015261096b01525f818161027201528181610375015261119101525f818161018701528181610a1d0152610d4d01525f81816101540152818161031101526111b701525f818160e2015281816103be015281816108dd015281816109c601528181610da7015261113e01525f81816101ba015281816104560152818161055701528181610627015281816107230152818161104201526113290152611d245ff3fe6080604052600436106100c6575f3560e01c80636fad06f511610071578063a99ecc541161004c578063a99ecc5414610261578063aa72fe3f14610294578063d0a10260146102dc575f80fd5b80636fad06f5146101ef5780637e6e1e10146102225780639a6b198c1461024e575f80fd5b8063369caf83116100a1578063369caf8314610176578063411557d1146101a957806353174fa4146101dc575f80fd5b80630bfec755146100d157806319197ec61461012e5780631df34fa314610143575f80fd5b366100cd57005b5f80fd5b3480156100dc575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c36600461160e565b6102ef565b005b34801561014e575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b348015610181575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b4575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b6101416101ea36600461160e565b610353565b3480156101fa575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561022d575f80fd5b5061024161023c366004611661565b6103a9565b60405161012591906116c5565b61014161025c3660046116dc565b610843565b34801561026c575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561029f575f80fd5b506102c77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610125565b6101416102ea36600461177c565b610953565b6102f7610c50565b61033973ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d20565b61034e60015f55565b505050565b61035b610c50565b61039d73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d7a565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036105e0576040517fd905777e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063d905777e90602401602060405180830381865afa15801561049d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c19190611813565b905080841115610528576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716600482015260248101859052604481018290526064015b60405180910390fd5b6040517f4cdad506000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634cdad50690602401602060405180830381865afa1580156105b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d59190611813565b6040840152506107a8565b6040517f402d267d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063402d267d90602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611813565b9050808411156106f4576040517f79012fb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602481018590526044810182905260640161051f565b6040517fef8b30f7000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef8b30f790602401602060405180830381865afa15801561077d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a19190611813565b6040840152505b6040517f3b6f743b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690633b6f743b906107fc9085905f9060040161190a565b6040805180830381865afa158015610816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a919061197a565b95945050505050565b33301461087e576040517fa19dbf0000000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b5f808380602001905181019061089491906119e9565b91509150803410156108db576040517f7cb769dc0000000000000000000000000000000000000000000000000000000081526004810182905234602482015260440161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361093f5761093a85848432610d20565b61094b565b61094b85848432610d7a565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146109c4576040517f91ac5e4f00000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015610a6c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15610abb576040517f84fb3f0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816600482015260240161051f565b5f610ac68686610dcd565b90505f610ad38787610dee565b90505f610ae08888610dfd565b6040517f9a6b198c0000000000000000000000000000000000000000000000000000000081529091503090639a6b198c903490610b27908e90889087908990600401611ad0565b5f604051808303818588803b158015610b3e575f80fd5b505af193505050508015610b50575060015b610c19573d808015610b7d576040519150601f19603f3d011682016040523d82523d5f602084013e610b82565b606091505b507f7cb769dc00000000000000000000000000000000000000000000000000000000610bad82611b15565b7fffffffff000000000000000000000000000000000000000000000000000000001603610bdc57805181602001fd5b610be98b8a8a8632610e47565b6040518a907ffe509803c09416b28ff3d8f690c8b0c61462a892c46d5430c8fb20abe472daf0905f90a250610c44565b60405189907f27b5aea9f5736c02241d8a0272e9ec988ea44cf85c4b4760329431aa19678394905f90a25b50505050505050505050565b60025f5403610c8b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052610d1a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610f6c565b50505050565b5f610d2b858561100b565b9050610d3b8184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5050505050565b5f610d8585856112eb565b9050610d958184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5f610ddc604c602c8486611b64565b610de591611b8b565b90505b92915050565b5f610ddc602c600c8486611b64565b6060610e0c82604c8186611b64565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b610e8c6040518060e001604052805f63ffffffff1681526020015f80191681526020015f81526020015f81526020016060815260200160608152602001606081525090565b610e96858561136d565b63ffffffff168152610ea88585610dcd565b602080830191909152604080830185905280518082018252348082525f9382019390935290517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89169263c7c7f5b3929091610f219186918890600401611bc7565b60c06040518083038185885af1158015610f3d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f629190611c16565b5050505050505050565b5f8060205f8451602086015f885af180610f8b576040513d5f823e3d81fd5b50505f513d91508115610fa2578060011415610fbc565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610d1a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161051f565b6040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018290523060248201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636e553f65906044015b6020604051808303815f875af115801561109e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de59190611813565b80821015611106576040517f71c4efed000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161051f565b5050565b815163ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116911603611242575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146111b5577f00000000000000000000000000000000000000000000000000000000000000006111d7565b7f00000000000000000000000000000000000000000000000000000000000000005b90503415611211576040517f7578d2bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1a61121f846020015190565b604085015173ffffffffffffffffffffffffffffffffffffffff8416919061138f565b604080518082018252348082525f602083015291517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169263c7c7f5b39290916112aa9187918790600401611bc7565b60c06040518083038185885af11580156112c6573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d739190611c16565b6040517fba08765200000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ba08765290606401611082565b5f61137c600c60088486611b64565b61138591611ca6565b60e01c9392505050565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261034e91859182169063a9059cbb90606401610cd3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff8111828210171561141d5761141d6113cd565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561146a5761146a6113cd565b604052919050565b63ffffffff81168114611483575f80fd5b50565b803561149181611472565b919050565b5f67ffffffffffffffff8211156114af576114af6113cd565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126114ea575f80fd5b81356114fd6114f882611496565b611423565b818152846020838601011115611511575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0828403121561153d575f80fd5b6115456113fa565b905061155082611486565b8152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff8082111561158a575f80fd5b611596858386016114db565b608084015260a08401359150808211156115ae575f80fd5b6115ba858386016114db565b60a084015260c08401359150808211156115d2575f80fd5b506115df848285016114db565b60c08301525092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611491575f80fd5b5f805f60608486031215611620575f80fd5b83359250602084013567ffffffffffffffff81111561163d575f80fd5b6116498682870161152d565b925050611658604085016115eb565b90509250925092565b5f805f8060808587031215611674575f80fd5b61167d856115eb565b935061168b602086016115eb565b925060408501359150606085013567ffffffffffffffff8111156116ad575f80fd5b6116b98782880161152d565b91505092959194509250565b815181526020808301519082015260408101610de8565b5f805f80608085870312156116ef575f80fd5b6116f8856115eb565b935060208501359250604085013567ffffffffffffffff81111561171a575f80fd5b611726878288016114db565b949793965093946060013593505050565b5f8083601f840112611747575f80fd5b50813567ffffffffffffffff81111561175e575f80fd5b602083019150836020828501011115611775575f80fd5b9250929050565b5f805f805f805f60a0888a031215611792575f80fd5b61179b886115eb565b965060208801359550604088013567ffffffffffffffff808211156117be575f80fd5b6117ca8b838c01611737565b90975095508591506117de60608b016115eb565b945060808a01359150808211156117f3575f80fd5b506118008a828b01611737565b989b979a50959850939692959293505050565b5f60208284031215611823575f80fd5b5051919050565b5f5b8381101561184457818101518382015260200161182c565b50505f910152565b5f815180845261186381602086016020860161182a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526118d760e085018261184c565b905060a083015184820360a08601526118f0828261184c565b91505060c083015184820360c086015261083a828261184c565b604081525f61191c6040830185611895565b905082151560208301529392505050565b5f6040828403121561193d575f80fd5b6040516040810181811067ffffffffffffffff82111715611960576119606113cd565b604052825181526020928301519281019290925250919050565b5f6040828403121561198a575f80fd5b610de5838361192d565b805161149181611472565b5f82601f8301126119ae575f80fd5b81516119bc6114f882611496565b8181528460208386010111156119d0575f80fd5b6119e182602083016020870161182a565b949350505050565b5f80604083850312156119fa575f80fd5b825167ffffffffffffffff80821115611a11575f80fd5b9084019060e08287031215611a24575f80fd5b611a2c6113fa565b611a3583611994565b8152602083015160208201526040830151604082015260608301516060820152608083015182811115611a66575f80fd5b611a728882860161199f565b60808301525060a083015182811115611a89575f80fd5b611a958882860161199f565b60a08301525060c083015182811115611aac575f80fd5b611ab88882860161199f565b60c08301525060209590950151949694955050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f611b04608083018561184c565b905082606083015295945050505050565b5f815160208301517fffffffff0000000000000000000000000000000000000000000000000000000080821693506004831015611b5c5780818460040360031b1b83161693505b505050919050565b5f8085851115611b72575f80fd5b83861115611b7e575f80fd5b5050820193919092039150565b80356020831015610de8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b608081525f611bd96080830186611895565b9050611bf2602083018580518252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff83166060830152949350505050565b5f8082840360c0811215611c28575f80fd5b6080811215611c35575f80fd5b506040516060810167ffffffffffffffff8282108183111715611c5a57611c5a6113cd565b8160405285518352602086015191508082168214611c76575f80fd5b506020820152611c89856040860161192d565b60408201529150611c9d846080850161192d565b90509250929050565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611ce65780818660040360031b1b83161692505b50509291505056fea26469706673582212203c210af0c85b10469f135dd49d1274fa8e04b8bee0c2069213c4acfe2a3036b564736f6c63430008160033",
+ "sourceMap": "1787:15867:0:-:0;;;2888:1609;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1857:1:126;2061:7;:21;-1:-1:-1;;;;;2964:24:0;;;;;2999:21;;;;;;3044:23;;;-1:-1:-1;;;3044:23:0;;;;:21;;:23;;;;;;;;;;;;;;;2999:21;3044:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3030:37:0;;;;;3077:21;;;;;;3122:23;;;-1:-1:-1;;;3122:23:0;;;;:21;;:23;;;;;;;;;;;;;;;3077:21;3122:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3108:37:0;;;-1:-1:-1;;;;;3108:37:0;;;;;3185:9;;-1:-1:-1;;;;;3175:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3156:51:0;;;;;3229:36;;;-1:-1:-1;;;3229:36:0;;;;:34;;:36;;;;;;;;;;;;;;;3156:51;3229:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3217:48;;;;3303:5;;3280:11;;-1:-1:-1;;;;;3280:29:0;;;;;;3276:114;;3351:11;;3372:5;;3332:47;;-1:-1:-1;;;3332:47:0;;-1:-1:-1;;;;;1730:15:139;;;3332:47:0;;;1712:34:139;1782:15;;1762:18;;;1755:43;1647:18;;3332:47:0;;;;;;;;3276:114;3427:5;;-1:-1:-1;;;;;3427:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3404:37:0;:11;;-1:-1:-1;;;;;3404:37:0;;3400:135;;3488:11;;3509:5;;-1:-1:-1;;;;;3509:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3464:60;;-1:-1:-1;;;3464:60:0;;-1:-1:-1;;;;;1730:15:139;;;3464:60:0;;;1712:34:139;1782:15;;1762:18;;;1755:43;1647:18;;3464:60:0;1500:304:139;3400:135:0;3771:9;;-1:-1:-1;;;;;3766:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3761:77;;3828:9;;3809:29;;-1:-1:-1;;;3809:29:0;;-1:-1:-1;;;;;2255:32:139;;;3809:29:0;;;2237:51:139;2210:18;;3809:29:0;2091:203:139;3761:77:0;3939:11;;3932:54;;-1:-1:-1;;;3932:54:0;;-1:-1:-1;;;;;2491:32:139;;;3932:54:0;;;2473:51:139;-1:-1:-1;;2540:18:139;;;2533:34;3932:27:0;;;;;;2446:18:139;;3932:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4265:11:0;;4258:57;;-1:-1:-1;;;4258:57:0;;-1:-1:-1;;;;;2491:32:139;;;4258:57:0;;;2473:51:139;-1:-1:-1;;2540:18:139;;;2533:34;4258:27:0;;;;;;2446:18:139;;4258:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4402:9;-1:-1:-1;;;;;4397:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4393:97;;;4440:11;;4433:57;;-1:-1:-1;;;4433:57:0;;-1:-1:-1;;;;;2491:32:139;;;4433:57:0;;;2473:51:139;-1:-1:-1;;2540:18:139;;;2533:34;4433:27:0;;;;;;2446:18:139;;4433:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4393:97;2888:1609;;;1787:15867;;14:131:139;-1:-1:-1;;;;;89:31:139;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:519::-;238:6;246;254;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;355:9;349:16;374:31;399:5;374:31;:::i;:::-;474:2;459:18;;453:25;424:5;;-1:-1:-1;487:33:139;453:25;487:33;:::i;:::-;591:2;576:18;;570:25;539:7;;-1:-1:-1;604:33:139;570:25;604:33;:::i;:::-;656:7;646:17;;;150:519;;;;;:::o;674:251::-;744:6;797:2;785:9;776:7;772:23;768:32;765:52;;;813:1;810;803:12;765:52;845:9;839:16;864:31;889:5;864:31;:::i;:::-;914:5;674:251;-1:-1:-1;;;674:251:139:o;1215:280::-;1284:6;1337:2;1325:9;1316:7;1312:23;1308:32;1305:52;;;1353:1;1350;1343:12;1305:52;1385:9;1379:16;1435:10;1428:5;1424:22;1417:5;1414:33;1404:61;;1461:1;1458;1451:12;1809:277;1876:6;1929:2;1917:9;1908:7;1904:23;1900:32;1897:52;;;1945:1;1942;1935:12;1897:52;1977:9;1971:16;2030:5;2023:13;2016:21;2009:5;2006:32;1996:60;;2052:1;2049;2042:12;2299:274;1787:15867:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ },
+ "deployedBytecode": {
+ "object": "0x6080604052600436106100c6575f3560e01c80636fad06f511610071578063a99ecc541161004c578063a99ecc5414610261578063aa72fe3f14610294578063d0a10260146102dc575f80fd5b80636fad06f5146101ef5780637e6e1e10146102225780639a6b198c1461024e575f80fd5b8063369caf83116100a1578063369caf8314610176578063411557d1146101a957806353174fa4146101dc575f80fd5b80630bfec755146100d157806319197ec61461012e5780631df34fa314610143575f80fd5b366100cd57005b5f80fd5b3480156100dc575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c36600461160e565b6102ef565b005b34801561014e575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b348015610181575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b4575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b6101416101ea36600461160e565b610353565b3480156101fa575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561022d575f80fd5b5061024161023c366004611661565b6103a9565b60405161012591906116c5565b61014161025c3660046116dc565b610843565b34801561026c575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561029f575f80fd5b506102c77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610125565b6101416102ea36600461177c565b610953565b6102f7610c50565b61033973ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d20565b61034e60015f55565b505050565b61035b610c50565b61039d73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d7a565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036105e0576040517fd905777e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063d905777e90602401602060405180830381865afa15801561049d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c19190611813565b905080841115610528576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716600482015260248101859052604481018290526064015b60405180910390fd5b6040517f4cdad506000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634cdad50690602401602060405180830381865afa1580156105b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d59190611813565b6040840152506107a8565b6040517f402d267d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063402d267d90602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611813565b9050808411156106f4576040517f79012fb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602481018590526044810182905260640161051f565b6040517fef8b30f7000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef8b30f790602401602060405180830381865afa15801561077d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a19190611813565b6040840152505b6040517f3b6f743b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690633b6f743b906107fc9085905f9060040161190a565b6040805180830381865afa158015610816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a919061197a565b95945050505050565b33301461087e576040517fa19dbf0000000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b5f808380602001905181019061089491906119e9565b91509150803410156108db576040517f7cb769dc0000000000000000000000000000000000000000000000000000000081526004810182905234602482015260440161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361093f5761093a85848432610d20565b61094b565b61094b85848432610d7a565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146109c4576040517f91ac5e4f00000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015610a6c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15610abb576040517f84fb3f0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816600482015260240161051f565b5f610ac68686610dcd565b90505f610ad38787610dee565b90505f610ae08888610dfd565b6040517f9a6b198c0000000000000000000000000000000000000000000000000000000081529091503090639a6b198c903490610b27908e90889087908990600401611ad0565b5f604051808303818588803b158015610b3e575f80fd5b505af193505050508015610b50575060015b610c19573d808015610b7d576040519150601f19603f3d011682016040523d82523d5f602084013e610b82565b606091505b507f7cb769dc00000000000000000000000000000000000000000000000000000000610bad82611b15565b7fffffffff000000000000000000000000000000000000000000000000000000001603610bdc57805181602001fd5b610be98b8a8a8632610e47565b6040518a907ffe509803c09416b28ff3d8f690c8b0c61462a892c46d5430c8fb20abe472daf0905f90a250610c44565b60405189907f27b5aea9f5736c02241d8a0272e9ec988ea44cf85c4b4760329431aa19678394905f90a25b50505050505050505050565b60025f5403610c8b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052610d1a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610f6c565b50505050565b5f610d2b858561100b565b9050610d3b8184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5050505050565b5f610d8585856112eb565b9050610d958184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5f610ddc604c602c8486611b64565b610de591611b8b565b90505b92915050565b5f610ddc602c600c8486611b64565b6060610e0c82604c8186611b64565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b610e8c6040518060e001604052805f63ffffffff1681526020015f80191681526020015f81526020015f81526020016060815260200160608152602001606081525090565b610e96858561136d565b63ffffffff168152610ea88585610dcd565b602080830191909152604080830185905280518082018252348082525f9382019390935290517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89169263c7c7f5b3929091610f219186918890600401611bc7565b60c06040518083038185885af1158015610f3d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f629190611c16565b5050505050505050565b5f8060205f8451602086015f885af180610f8b576040513d5f823e3d81fd5b50505f513d91508115610fa2578060011415610fbc565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610d1a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161051f565b6040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018290523060248201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636e553f65906044015b6020604051808303815f875af115801561109e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de59190611813565b80821015611106576040517f71c4efed000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161051f565b5050565b815163ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116911603611242575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146111b5577f00000000000000000000000000000000000000000000000000000000000000006111d7565b7f00000000000000000000000000000000000000000000000000000000000000005b90503415611211576040517f7578d2bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1a61121f846020015190565b604085015173ffffffffffffffffffffffffffffffffffffffff8416919061138f565b604080518082018252348082525f602083015291517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169263c7c7f5b39290916112aa9187918790600401611bc7565b60c06040518083038185885af11580156112c6573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d739190611c16565b6040517fba08765200000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ba08765290606401611082565b5f61137c600c60088486611b64565b61138591611ca6565b60e01c9392505050565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261034e91859182169063a9059cbb90606401610cd3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff8111828210171561141d5761141d6113cd565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561146a5761146a6113cd565b604052919050565b63ffffffff81168114611483575f80fd5b50565b803561149181611472565b919050565b5f67ffffffffffffffff8211156114af576114af6113cd565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126114ea575f80fd5b81356114fd6114f882611496565b611423565b818152846020838601011115611511575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0828403121561153d575f80fd5b6115456113fa565b905061155082611486565b8152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff8082111561158a575f80fd5b611596858386016114db565b608084015260a08401359150808211156115ae575f80fd5b6115ba858386016114db565b60a084015260c08401359150808211156115d2575f80fd5b506115df848285016114db565b60c08301525092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611491575f80fd5b5f805f60608486031215611620575f80fd5b83359250602084013567ffffffffffffffff81111561163d575f80fd5b6116498682870161152d565b925050611658604085016115eb565b90509250925092565b5f805f8060808587031215611674575f80fd5b61167d856115eb565b935061168b602086016115eb565b925060408501359150606085013567ffffffffffffffff8111156116ad575f80fd5b6116b98782880161152d565b91505092959194509250565b815181526020808301519082015260408101610de8565b5f805f80608085870312156116ef575f80fd5b6116f8856115eb565b935060208501359250604085013567ffffffffffffffff81111561171a575f80fd5b611726878288016114db565b949793965093946060013593505050565b5f8083601f840112611747575f80fd5b50813567ffffffffffffffff81111561175e575f80fd5b602083019150836020828501011115611775575f80fd5b9250929050565b5f805f805f805f60a0888a031215611792575f80fd5b61179b886115eb565b965060208801359550604088013567ffffffffffffffff808211156117be575f80fd5b6117ca8b838c01611737565b90975095508591506117de60608b016115eb565b945060808a01359150808211156117f3575f80fd5b506118008a828b01611737565b989b979a50959850939692959293505050565b5f60208284031215611823575f80fd5b5051919050565b5f5b8381101561184457818101518382015260200161182c565b50505f910152565b5f815180845261186381602086016020860161182a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526118d760e085018261184c565b905060a083015184820360a08601526118f0828261184c565b91505060c083015184820360c086015261083a828261184c565b604081525f61191c6040830185611895565b905082151560208301529392505050565b5f6040828403121561193d575f80fd5b6040516040810181811067ffffffffffffffff82111715611960576119606113cd565b604052825181526020928301519281019290925250919050565b5f6040828403121561198a575f80fd5b610de5838361192d565b805161149181611472565b5f82601f8301126119ae575f80fd5b81516119bc6114f882611496565b8181528460208386010111156119d0575f80fd5b6119e182602083016020870161182a565b949350505050565b5f80604083850312156119fa575f80fd5b825167ffffffffffffffff80821115611a11575f80fd5b9084019060e08287031215611a24575f80fd5b611a2c6113fa565b611a3583611994565b8152602083015160208201526040830151604082015260608301516060820152608083015182811115611a66575f80fd5b611a728882860161199f565b60808301525060a083015182811115611a89575f80fd5b611a958882860161199f565b60a08301525060c083015182811115611aac575f80fd5b611ab88882860161199f565b60c08301525060209590950151949694955050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f611b04608083018561184c565b905082606083015295945050505050565b5f815160208301517fffffffff0000000000000000000000000000000000000000000000000000000080821693506004831015611b5c5780818460040360031b1b83161693505b505050919050565b5f8085851115611b72575f80fd5b83861115611b7e575f80fd5b5050820193919092039150565b80356020831015610de8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b608081525f611bd96080830186611895565b9050611bf2602083018580518252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff83166060830152949350505050565b5f8082840360c0811215611c28575f80fd5b6080811215611c35575f80fd5b506040516060810167ffffffffffffffff8282108183111715611c5a57611c5a6113cd565b8160405285518352602086015191508082168214611c76575f80fd5b506020820152611c89856040860161192d565b60408201529150611c9d846080850161192d565b90509250929050565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611ce65780818660040360031b1b83161692505b50509291505056fea26469706673582212203c210af0c85b10469f135dd49d1274fa8e04b8bee0c2069213c4acfe2a3036b564736f6c63430008160033",
+ "sourceMap": "1787:15867:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2093:34;;;;;;;;;;;;;;;;;;190:42:139;178:55;;;160:74;;148:2;133:18;2093:34:0;;;;;;;;8653:377;;;;;;:::i;:::-;;:::i;:::-;;2133:36;;;;;;;;;;;;;;;2175:34;;;;;;;;;;;;;;;2055:31;;;;;;;;;;;;;;;11118:375;;;;;;:::i;:::-;;:::i;2258:33::-;;;;;;;;;;;;;;;14495:1049;;;;;;;;;;-1:-1:-1;14495:1049:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7354:957::-;;;;;;:::i;:::-;;:::i;2215:36::-;;;;;;;;;;;;;;;2297:33;;;;;;;;;;;;;;;;;;5671:10:139;5659:23;;;5641:42;;5629:2;5614:18;2297:33:0;5497:192:139;5097:1518:0;;;;;;:::i;:::-;;:::i;8653:377::-;2500:21:126;:19;:21::i;:::-;8830:77:0::1;:36;8837:11;8830:36;8867:10;8887:4;8894:12:::0;8830:36:::1;:77::i;:::-;8917:106;8969:10;8982:12;8996:10;9008:14;8917:15;:106::i;:::-;2542:20:126::0;1857:1;3068:7;:21;2888:208;2542:20;8653:377:0;;;:::o;11118:375::-;2500:21:126;:19;:21::i;:::-;11294:77:0::1;:36;11301:11;11294:36;11331:10;11351:4;11358:12:::0;11294:36:::1;:77::i;:::-;11381:105;11432:10;11445:12;11459:10;11471:14;11381;:105::i;14495:1049::-:0;-1:-1:-1;;;;;;;;;;;;;;;;;14873:9:0;14859:23;;:10;:23;;;14855:621;;14918:22;;;;;:15;178:55:139;;;14918:22:0;;;160:74:139;14898:17:0;;14918:5;:15;;;;;;133:18:139;;14918:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14898:42;;14975:9;14958:14;:26;14954:138;;;15011:66;;;;;7407:42:139;7395:55;;15011:66:0;;;7377:74:139;7467:18;;;7460:34;;;7510:18;;;7503:34;;;7350:18;;15011:66:0;;;;;;;;14954:138;15128:35;;;;;;;;7694:25:139;;;15128:5:0;:19;;;;;7667:18:139;;15128:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15106:19;;;:57;-1:-1:-1;14855:621:0;;;15215:23;;;;;:16;178:55:139;;;15215:23:0;;;160:74:139;15194:18:0;;15215:5;:16;;;;;;133:18:139;;15215:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15194:44;;15273:10;15256:14;:27;15252:141;;;15310:68;;;;;7407:42:139;7395:55;;15310:68:0;;;7377:74:139;7467:18;;;7460:34;;;7510:18;;;7503:34;;;7350:18;;15310:68:0;7175:368:139;15252:141:0;15429:36;;;;;;;;7694:25:139;;;15429:5:0;:20;;;;;7667:18:139;;15429:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15407:19;;;:58;-1:-1:-1;14855:621:0;15492:45;;;;;:26;;;;;;:45;;15519:10;;15531:5;;15492:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15485:52;14495:1049;-1:-1:-1;;;;;14495:1049:0:o;7354:957::-;7571:10;7593:4;7571:27;7567:60;;7607:20;;;;;7616:10;7607:20;;;160:74:139;133:18;;7607:20:0;14:226:139;7567:60:0;7908:26;7936:19;7970:11;7959:45;;;;;;;;;;;;:::i;:::-;7907:97;;;;8030:11;8018:9;:23;8014:80;;;8050:44;;;;;;;;12217:25:139;;;8084:9:0;12258:18:139;;;12251:34;12190:18;;8050:44:0;12043:248:139;8014:80:0;8119:9;8109:19;;:6;:19;;;8105:200;;8144:60;8160:12;8174:7;8183:9;8194;8144:15;:60::i;:::-;8105:200;;;8235:59;8250:12;8264:7;8273:9;8284;8235:14;:59::i;:::-;7513:798;;7354:957;;;;:::o;5097:1518::-;5476:10;:22;5490:8;5476:22;;5472:59;;5507:24;;;;;5520:10;5507:24;;;160:74:139;133:18;;5507:24:0;14:226:139;5472:59:0;5563:9;5545:27;;:14;:27;;;;:58;;;;;5594:9;5576:27;;:14;:27;;;;5545:58;5541:109;;;5612:38;;;;;190:42:139;178:55;;5612:38:0;;;160:74:139;133:18;;5612:38:0;14:226:139;5541:109:0;5661:19;5683:22;:8;;:20;:22::i;:::-;5661:44;;5715:14;5732:19;:8;;:17;:19::i;:::-;5715:36;;5761:23;5787:21;:8;;:19;:21::i;:::-;5916:87;;;;;5761:47;;-1:-1:-1;5916:4:0;;:18;;5943:9;;5916:87;;5955:14;;5971:11;;5761:47;;5996:6;;5916:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5912:697;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6352:29:0;6336:12;6343:4;6336:12;:::i;:::-;:45;;;6332:166;;6460:4;6454:11;6447:4;6443:2;6439:13;6432:34;6332:166;6512:52;6520:14;6536:8;;6546:6;6554:9;6512:7;:52::i;:::-;6583:15;;6592:5;;6583:15;;;;;6046:563;5912:697;;;6023:11;;6028:5;;6023:11;;;;;5912:697;5462:1153;;;5097:1518;;;;;;;:::o;2575:307:126:-;1899:1;2702:7;;:18;2698:86;;2743:30;;;;;;;;;;;;;;2698:86;1899:1;2858:7;:17;2575:307::o;1670:188:120:-;1797:53;;1812:18;13475:15:139;;;1797:53:120;;;13457:34:139;13527:15;;;13507:18;;;13500:43;13559:18;;;13552:34;;;1770:81:120;;1790:5;;1812:18;;;;;13369::139;;1797:53:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1770:19;:81::i;:::-;1670:188;;;;:::o;9806:445:0:-;9991:19;10013:34;10022:10;10034:12;10013:8;:34::i;:::-;9991:56;;10057:52;10073:11;10086:10;:22;;;10057:15;:52::i;:::-;10120:19;;;:33;;;10188:1;10163:22;;;:26;10200:44;10206:9;10120:10;10229:14;10200:5;:44::i;:::-;9981:270;9806:445;;;;:::o;12326:441::-;12509:19;12531:32;12539:9;12550:12;12531:7;:32::i;:::-;12509:54;;12573:52;12589:11;12602:10;:22;;;12573:15;:52::i;:::-;12636:19;;;:33;;;12704:1;12679:22;;;:26;12716:44;12722:9;12636:10;12745:14;12716:5;:44::i;1989:149:71:-;2054:7;2088:42;335:2;282;2088:4;;:42;:::i;:::-;2080:51;;;:::i;:::-;2073:58;;1989:149;;;;;:::o;1676:150::-;1738:7;1780:37;282:2;232;1780:4;;:37;:::i;2273:128::-;2337:12;2368:26;:4;335:2;2368:4;;:26;:::i;:::-;2361:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2361:33:71;;2273:128;-1:-1:-1;;;;;;2273:128:71:o;17040:577:0:-;17286:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17286:32:0;17353:35;17379:8;;17353:25;:35::i;:::-;17328:60;;;;17419:40;17450:8;;17419:30;:40::i;:::-;17398:18;;;;:61;;;;17469:24;;;;:34;;;17567:26;;;;;;;17538:9;17567:26;;;-1:-1:-1;17567:26:0;;;;;;;17514:96;;;;;:15;;;;;;17538:9;;17514:96;;17398:15;;17595:14;;17514:96;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;17154:463;17040:577;;;;;:::o;7738:720:120:-;7818:18;7846:19;7984:4;7981:1;7974:4;7968:11;7961:4;7955;7951:15;7948:1;7941:5;7934;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:120;8278:8;8234:16;;-1:-1:-1;8310:15:120;;:68;;8362:11;8377:1;8362:16;;8310:68;;;8328:26;;;;:31;8310:68;8306:146;;;8401:40;;;;;190:42:139;178:55;;8401:40:120;;;160:74:139;133:18;;8401:40:120;14:226:139;10620:184:0;10755:42;;;;;;;;15907:25:139;;;10791:4:0;15948:18:139;;;15941:83;10710:19:0;;10755:5;:13;;;;;15880:18:139;;10755:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13736:183::-;13850:12;13838:9;:24;13834:78;;;13871:41;;;;;;;;12217:25:139;;;12258:18;;;12251:34;;;12190:18;;13871:41:0;12043:248:139;13834:78:0;13736:183;;:::o;16056:628::-;16161:17;;:30;16182:9;16161:30;;;;;16157:521;;16297:13;16321:9;16313:17;;:4;:17;;;:45;;16347:11;16313:45;;;16333:11;16313:45;16297:61;-1:-1:-1;16377:9:0;:13;16373:46;;16399:20;;;;;;;;;;;;;;16373:46;16433:81;16460:32;:10;:13;;;2976:2:71;2865:123;16460:32:0;16494:19;;;;16433:26;;;;:81;:26;:81::i;16157:521::-;16624:26;;;;;;;;16600:9;16624:26;;;-1:-1:-1;16624:26:0;;;;16576:91;;;;;:15;;;;;;16600:9;;16576:91;;16612:10;;16652:14;;16576:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13140:196::-;13273:56;;;;;;;;16237:25:139;;;13308:4:0;16339:18:139;;;16332:43;;;16391:18;;;16384:43;13228:19:0;;13273:5;:12;;;;;16210:18:139;;13273:56:0;16035:398:139;1358:141:71;1418:6;1457:33;232:2;185:1;1457:4;;:33;:::i;:::-;1450:41;;;:::i;:::-;1443:49;;;1358:141;-1:-1:-1;;;1358:141:71:o;1271:160:120:-;1380:43;;1395:14;17004:55:139;;;1380:43:120;;;16986:74:139;17076:18;;;17069:34;;;1353:71:120;;1373:5;;1395:14;;;;;16959:18:139;;1380:43:120;16812:297:139;245:184;297:77;294:1;287:88;394:4;391:1;384:15;418:4;415:1;408:15;434:253;506:2;500:9;548:4;536:17;;583:18;568:34;;604:22;;;565:62;562:88;;;630:18;;:::i;:::-;666:2;659:22;434:253;:::o;692:334::-;763:2;757:9;819:2;809:13;;824:66;805:86;793:99;;922:18;907:34;;943:22;;;904:62;901:88;;;969:18;;:::i;:::-;1005:2;998:22;692:334;;-1:-1:-1;692:334:139:o;1031:121::-;1116:10;1109:5;1105:22;1098:5;1095:33;1085:61;;1142:1;1139;1132:12;1085:61;1031:121;:::o;1157:132::-;1224:20;;1253:30;1224:20;1253:30;:::i;:::-;1157:132;;;:::o;1294:245::-;1342:4;1375:18;1367:6;1364:30;1361:56;;;1397:18;;:::i;:::-;-1:-1:-1;1454:2:139;1442:15;1459:66;1438:88;1528:4;1434:99;;1294:245::o;1544:462::-;1586:5;1639:3;1632:4;1624:6;1620:17;1616:27;1606:55;;1657:1;1654;1647:12;1606:55;1693:6;1680:20;1724:48;1740:31;1768:2;1740:31;:::i;:::-;1724:48;:::i;:::-;1797:2;1788:7;1781:19;1843:3;1836:4;1831:2;1823:6;1819:15;1815:26;1812:35;1809:55;;;1860:1;1857;1850:12;1809:55;1925:2;1918:4;1910:6;1906:17;1899:4;1890:7;1886:18;1873:55;1973:1;1948:16;;;1966:4;1944:27;1937:38;;;;1952:7;1544:462;-1:-1:-1;;;1544:462:139:o;2011:1002::-;2067:5;2115:4;2103:9;2098:3;2094:19;2090:30;2087:50;;;2133:1;2130;2123:12;2087:50;2155:22;;:::i;:::-;2146:31;;2200:28;2218:9;2200:28;:::i;:::-;2193:5;2186:43;2289:2;2278:9;2274:18;2261:32;2256:2;2249:5;2245:14;2238:56;2354:2;2343:9;2339:18;2326:32;2321:2;2314:5;2310:14;2303:56;2419:2;2408:9;2404:18;2391:32;2386:2;2379:5;2375:14;2368:56;2475:3;2464:9;2460:19;2447:33;2499:18;2540:2;2532:6;2529:14;2526:34;;;2556:1;2553;2546:12;2526:34;2593:45;2634:3;2625:6;2614:9;2610:22;2593:45;:::i;:::-;2587:3;2580:5;2576:15;2569:70;2692:3;2681:9;2677:19;2664:33;2648:49;;2722:2;2712:8;2709:16;2706:36;;;2738:1;2735;2728:12;2706:36;2775:47;2818:3;2807:8;2796:9;2792:24;2775:47;:::i;:::-;2769:3;2762:5;2758:15;2751:72;2876:3;2865:9;2861:19;2848:33;2832:49;;2906:2;2896:8;2893:16;2890:36;;;2922:1;2919;2912:12;2890:36;;2959:47;3002:3;2991:8;2980:9;2976:24;2959:47;:::i;:::-;2953:3;2946:5;2942:15;2935:72;;2011:1002;;;;:::o;3018:196::-;3086:20;;3146:42;3135:54;;3125:65;;3115:93;;3204:1;3201;3194:12;3219:492;3324:6;3332;3340;3393:2;3381:9;3372:7;3368:23;3364:32;3361:52;;;3409:1;3406;3399:12;3361:52;3445:9;3432:23;3422:33;;3506:2;3495:9;3491:18;3478:32;3533:18;3525:6;3522:30;3519:50;;;3565:1;3562;3555:12;3519:50;3588:60;3640:7;3631:6;3620:9;3616:22;3588:60;:::i;:::-;3578:70;;;3667:38;3701:2;3690:9;3686:18;3667:38;:::i;:::-;3657:48;;3219:492;;;;;:::o;3965:567::-;4079:6;4087;4095;4103;4156:3;4144:9;4135:7;4131:23;4127:33;4124:53;;;4173:1;4170;4163:12;4124:53;4196:29;4215:9;4196:29;:::i;:::-;4186:39;;4244:38;4278:2;4267:9;4263:18;4244:38;:::i;:::-;4234:48;;4329:2;4318:9;4314:18;4301:32;4291:42;;4384:2;4373:9;4369:18;4356:32;4411:18;4403:6;4400:30;4397:50;;;4443:1;4440;4433:12;4397:50;4466:60;4518:7;4509:6;4498:9;4494:22;4466:60;:::i;:::-;4456:70;;;3965:567;;;;;;;:::o;4695:261::-;4615:12;;4603:25;;4677:4;4666:16;;;4660:23;4644:14;;;4637:47;4889:2;4874:18;;4901:49;4537:153;4961:531;5056:6;5064;5072;5080;5133:3;5121:9;5112:7;5108:23;5104:33;5101:53;;;5150:1;5147;5140:12;5101:53;5173:29;5192:9;5173:29;:::i;:::-;5163:39;;5249:2;5238:9;5234:18;5221:32;5211:42;;5304:2;5293:9;5289:18;5276:32;5331:18;5323:6;5320:30;5317:50;;;5363:1;5360;5353:12;5317:50;5386:49;5427:7;5418:6;5407:9;5403:22;5386:49;:::i;:::-;4961:531;;;;-1:-1:-1;5376:59:139;;5482:2;5467:18;5454:32;;-1:-1:-1;;;4961:531:139:o;5694:347::-;5745:8;5755:6;5809:3;5802:4;5794:6;5790:17;5786:27;5776:55;;5827:1;5824;5817:12;5776:55;-1:-1:-1;5850:20:139;;5893:18;5882:30;;5879:50;;;5925:1;5922;5915:12;5879:50;5962:4;5954:6;5950:17;5938:29;;6014:3;6007:4;5998:6;5990;5986:19;5982:30;5979:39;5976:59;;;6031:1;6028;6021:12;5976:59;5694:347;;;;;:::o;6046:935::-;6163:6;6171;6179;6187;6195;6203;6211;6264:3;6252:9;6243:7;6239:23;6235:33;6232:53;;;6281:1;6278;6271:12;6232:53;6304:29;6323:9;6304:29;:::i;:::-;6294:39;;6380:2;6369:9;6365:18;6352:32;6342:42;;6435:2;6424:9;6420:18;6407:32;6458:18;6499:2;6491:6;6488:14;6485:34;;;6515:1;6512;6505:12;6485:34;6554:58;6604:7;6595:6;6584:9;6580:22;6554:58;:::i;:::-;6631:8;;-1:-1:-1;6528:84:139;-1:-1:-1;6528:84:139;;-1:-1:-1;6685:38:139;6719:2;6704:18;;6685:38;:::i;:::-;6675:48;;6776:3;6765:9;6761:19;6748:33;6732:49;;6806:2;6796:8;6793:16;6790:36;;;6822:1;6819;6812:12;6790:36;;6861:60;6913:7;6902:8;6891:9;6887:24;6861:60;:::i;:::-;6046:935;;;;-1:-1:-1;6046:935:139;;-1:-1:-1;6046:935:139;;;;6835:86;;-1:-1:-1;;;6046:935:139:o;6986:184::-;7056:6;7109:2;7097:9;7088:7;7084:23;7080:32;7077:52;;;7125:1;7122;7115:12;7077:52;-1:-1:-1;7148:16:139;;6986:184;-1:-1:-1;6986:184:139:o;7730:250::-;7815:1;7825:113;7839:6;7836:1;7833:13;7825:113;;;7915:11;;;7909:18;7896:11;;;7889:39;7861:2;7854:10;7825:113;;;-1:-1:-1;;7972:1:139;7954:16;;7947:27;7730:250::o;7985:329::-;8026:3;8064:5;8058:12;8091:6;8086:3;8079:19;8107:76;8176:6;8169:4;8164:3;8160:14;8153:4;8146:5;8142:16;8107:76;:::i;:::-;8228:2;8216:15;8233:66;8212:88;8203:98;;;;8303:4;8199:109;;7985:329;-1:-1:-1;;7985:329:139:o;8319:763::-;8419:10;8411:5;8405:12;8401:29;8396:3;8389:42;8480:4;8473:5;8469:16;8463:23;8456:4;8451:3;8447:14;8440:47;8536:4;8529:5;8525:16;8519:23;8512:4;8507:3;8503:14;8496:47;8592:4;8585:5;8581:16;8575:23;8568:4;8563:3;8559:14;8552:47;8371:3;8645:4;8638:5;8634:16;8628:23;8683:4;8676;8671:3;8667:14;8660:28;8709:46;8749:4;8744:3;8740:14;8726:12;8709:46;:::i;:::-;8697:58;;8803:4;8796:5;8792:16;8786:23;8851:3;8845:4;8841:14;8834:4;8829:3;8825:14;8818:38;8879;8912:4;8896:14;8879:38;:::i;:::-;8865:52;;;8965:4;8958:5;8954:16;8948:23;9015:3;9007:6;9003:16;8996:4;8991:3;8987:14;8980:40;9036;9069:6;9053:14;9036:40;:::i;9087:347::-;9294:2;9283:9;9276:21;9257:4;9314:55;9365:2;9354:9;9350:18;9342:6;9314:55;:::i;:::-;9306:63;;9419:6;9412:14;9405:22;9400:2;9389:9;9385:18;9378:50;9087:347;;;;;:::o;9439:478::-;9509:5;9557:4;9545:9;9540:3;9536:19;9532:30;9529:50;;;9575:1;9572;9565:12;9529:50;9608:4;9602:11;9652:4;9644:6;9640:17;9723:6;9711:10;9708:22;9687:18;9675:10;9672:34;9669:62;9666:88;;;9734:18;;:::i;:::-;9770:4;9763:24;9835:16;;9820:32;;9906:2;9891:18;;;9885:25;9868:15;;;9861:50;;;;-1:-1:-1;9805:6:139;9439:478;-1:-1:-1;9439:478:139:o;9922:259::-;10022:6;10075:2;10063:9;10054:7;10050:23;10046:32;10043:52;;;10091:1;10088;10081:12;10043:52;10114:61;10167:7;10156:9;10114:61;:::i;10186:136::-;10264:13;;10286:30;10264:13;10286:30;:::i;10327:441::-;10380:5;10433:3;10426:4;10418:6;10414:17;10410:27;10400:55;;10451:1;10448;10441:12;10400:55;10480:6;10474:13;10511:48;10527:31;10555:2;10527:31;:::i;10511:48::-;10584:2;10575:7;10568:19;10630:3;10623:4;10618:2;10610:6;10606:15;10602:26;10599:35;10596:55;;;10647:1;10644;10637:12;10596:55;10660:77;10734:2;10727:4;10718:7;10714:18;10707:4;10699:6;10695:17;10660:77;:::i;:::-;10755:7;10327:441;-1:-1:-1;;;;10327:441:139:o;10773:1265::-;10880:6;10888;10941:2;10929:9;10920:7;10916:23;10912:32;10909:52;;;10957:1;10954;10947:12;10909:52;10990:9;10984:16;11019:18;11060:2;11052:6;11049:14;11046:34;;;11076:1;11073;11066:12;11046:34;11099:22;;;;11155:4;11137:16;;;11133:27;11130:47;;;11173:1;11170;11163:12;11130:47;11199:22;;:::i;:::-;11244:32;11273:2;11244:32;:::i;:::-;11237:5;11230:47;11323:2;11319;11315:11;11309:18;11304:2;11297:5;11293:14;11286:42;11374:2;11370;11366:11;11360:18;11355:2;11348:5;11344:14;11337:42;11425:2;11421;11417:11;11411:18;11406:2;11399:5;11395:14;11388:42;11469:3;11465:2;11461:12;11455:19;11499:2;11489:8;11486:16;11483:36;;;11515:1;11512;11505:12;11483:36;11552:55;11599:7;11588:8;11584:2;11580:17;11552:55;:::i;:::-;11546:3;11539:5;11535:15;11528:80;;11647:3;11643:2;11639:12;11633:19;11677:2;11667:8;11664:16;11661:36;;;11693:1;11690;11683:12;11661:36;11730:55;11777:7;11766:8;11762:2;11758:17;11730:55;:::i;:::-;11724:3;11717:5;11713:15;11706:80;;11825:3;11821:2;11817:12;11811:19;11855:2;11845:8;11842:16;11839:36;;;11871:1;11868;11861:12;11839:36;11908:55;11955:7;11944:8;11940:2;11936:17;11908:55;:::i;:::-;11902:3;11891:15;;11884:80;-1:-1:-1;12028:2:139;12013:18;;;;12007:25;11895:5;;12007:25;;-1:-1:-1;;;;;10773:1265:139:o;12296:481::-;12539:42;12531:6;12527:55;12516:9;12509:74;12619:6;12614:2;12603:9;12599:18;12592:34;12662:3;12657:2;12646:9;12642:18;12635:31;12490:4;12683:45;12723:3;12712:9;12708:19;12700:6;12683:45;:::i;:::-;12675:53;;12764:6;12759:2;12748:9;12744:18;12737:34;12296:481;;;;;;;:::o;12782:407::-;12865:5;12905;12899:12;12947:4;12940:5;12936:16;12930:23;12972:66;13064:2;13060;13056:11;13047:20;;13090:1;13082:6;13079:13;13076:107;;;13170:2;13164;13154:6;13151:1;13147:14;13144:1;13140:22;13136:31;13132:2;13128:40;13124:49;13115:58;;13076:107;;;;12782:407;;;:::o;13597:331::-;13702:9;13713;13755:8;13743:10;13740:24;13737:44;;;13777:1;13774;13767:12;13737:44;13806:6;13796:8;13793:20;13790:40;;;13826:1;13823;13816:12;13790:40;-1:-1:-1;;13852:23:139;;;13897:25;;;;;-1:-1:-1;13597:331:139:o;13933:315::-;14053:19;;14092:2;14084:11;;14081:161;;;14164:66;14153:2;14149:12;;;14146:1;14142:20;14138:93;14127:105;13933:315;;;;:::o;14253:543::-;14554:3;14543:9;14536:22;14517:4;14575:56;14626:3;14615:9;14611:19;14603:6;14575:56;:::i;:::-;14567:64;;14640:58;14694:2;14683:9;14679:18;14671:6;4615:12;;4603:25;;4677:4;4666:16;;;4660:23;4644:14;;4637:47;4537:153;14640:58;14746:42;14738:6;14734:55;14729:2;14718:9;14714:18;14707:83;14253:543;;;;;;:::o;14801:927::-;14943:6;14951;14995:9;14986:7;14982:23;15025:3;15021:2;15017:12;15014:32;;;15042:1;15039;15032:12;15014:32;15066:4;15062:2;15058:13;15055:33;;;15084:1;15081;15074:12;15055:33;;15117:2;15111:9;15159:4;15151:6;15147:17;15183:18;15251:6;15239:10;15236:22;15231:2;15219:10;15216:18;15213:46;15210:72;;;15262:18;;:::i;:::-;15302:10;15298:2;15291:22;15343:9;15337:16;15329:6;15322:32;15397:2;15386:9;15382:18;15376:25;15363:38;;15441:2;15434:5;15430:14;15423:5;15420:25;15410:53;;15459:1;15456;15449:12;15410:53;-1:-1:-1;15491:2:139;15479:15;;15472:30;15535:70;15597:7;15592:2;15577:18;;15535:70;:::i;:::-;15530:2;15518:15;;15511:95;15522:6;-1:-1:-1;15650:72:139;15714:7;15707:4;15692:20;;15650:72;:::i;:::-;15640:82;;14801:927;;;;;:::o;16438:369::-;16596:66;16558:19;;16680:11;;;;16711:1;16703:10;;16700:101;;;16788:2;16782;16775:3;16772:1;16768:11;16765:1;16761:19;16757:28;16753:2;16749:37;16745:46;16736:55;;16700:101;;;16438:369;;;;:::o",
+ "linkReferences": {},
+ "immutableReferences": {
+ "40": [
+ { "start": 442, "length": 32 },
+ { "start": 1110, "length": 32 },
+ { "start": 1367, "length": 32 },
+ { "start": 1575, "length": 32 },
+ { "start": 1827, "length": 32 },
+ { "start": 4162, "length": 32 },
+ { "start": 4905, "length": 32 }
+ ],
+ "42": [
+ { "start": 226, "length": 32 },
+ { "start": 958, "length": 32 },
+ { "start": 2269, "length": 32 },
+ { "start": 2502, "length": 32 },
+ { "start": 3495, "length": 32 },
+ { "start": 4414, "length": 32 }
+ ],
+ "44": [
+ { "start": 340, "length": 32 },
+ { "start": 785, "length": 32 },
+ { "start": 4535, "length": 32 }
+ ],
+ "46": [
+ { "start": 391, "length": 32 },
+ { "start": 2589, "length": 32 },
+ { "start": 3405, "length": 32 }
+ ],
+ "48": [
+ { "start": 626, "length": 32 },
+ { "start": 885, "length": 32 },
+ { "start": 4497, "length": 32 }
+ ],
+ "50": [
+ { "start": 512, "length": 32 },
+ { "start": 2411, "length": 32 }
+ ],
+ "52": [
+ { "start": 677, "length": 32 },
+ { "start": 4371, "length": 32 }
+ ]
+ }
+ },
+ "methodIdentifiers": {
+ "ASSET_ERC20()": "1df34fa3",
+ "ASSET_OFT()": "0bfec755",
+ "ENDPOINT()": "6fad06f5",
+ "SHARE_ERC20()": "a99ecc54",
+ "SHARE_OFT()": "369caf83",
+ "VAULT()": "411557d1",
+ "VAULT_EID()": "aa72fe3f",
+ "depositAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)": "19197ec6",
+ "handleCompose(address,bytes32,bytes,uint256)": "9a6b198c",
+ "lzCompose(address,bytes32,bytes,address,bytes)": "d0a10260",
+ "quoteSend(address,address,uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "7e6e1e10",
+ "redeemAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)": "53174fa4"
+ },
+ "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_assetOFT\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_shareOFT\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"assetERC20\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vaultAsset\",\"type\":\"address\"}],\"name\":\"AssetTokenNotVaultAsset\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ERC4626ExceededMaxDeposit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"ERC4626ExceededMaxRedeem\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expectedMsgValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualMsgValue\",\"type\":\"uint256\"}],\"name\":\"InsufficientMsgValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoMsgValueExpected\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"OnlyValidComposeCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"shareOFT\",\"type\":\"address\"}],\"name\":\"ShareOFTNotAdapter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"shareERC20\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vault\",\"type\":\"address\"}],\"name\":\"ShareTokenNotVault\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"}],\"name\":\"Refunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"}],\"name\":\"Sent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ASSET_ERC20\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ASSET_OFT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ENDPOINT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SHARE_ERC20\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SHARE_OFT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT\",\"outputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_assetAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"depositAndSend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oftIn\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_composeFrom\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"handleCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_composeSender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_targetOFT\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_vaultInAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_shareAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"redeemAndSend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"LayerZero Labs (@shankars99, @TRileySchwarz)\",\"details\":\"The contract is designed to handle deposits and redemptions of vault shares and assets, ensuring that the share and asset tokens are correctly managed and transferred across chains. It also includes slippage protection and refund mechanisms for failed transactions.Default refunds are enabled to EOA addresses only on the source. Custom refunds to contracts can be implemented by overriding the _refund function.Default vault interface is IERC4626 - [ERC4626](https://eips.ethereum.org/EIPS/eip-4626) compliant vaults. Custom vaults can be implemented by overriding the _deposit and _redeem functions.\",\"errors\":{\"ERC4626ExceededMaxDeposit(address,uint256,uint256)\":[{\"details\":\"Attempted to deposit more assets than the max amount for `receiver`.\"}],\"ERC4626ExceededMaxRedeem(address,uint256,uint256)\":[{\"details\":\"Attempted to redeem more shares than the max amount for `receiver`.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_assetOFT\":\"The address of the asset OFT (Omnichain Fungible Token) contract\",\"_shareOFT\":\"The address of the share OFT contract (must be an adapter) Requirements: - Share token must be the vault itself - Asset token must match the vault's underlying asset - Share OFT must be an adapter (approvalRequired() returns true)\",\"_vault\":\"The address of the ERC4626 vault contract\"}},\"depositAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)\":{\"params\":{\"_assetAmount\":\"The number of ERC20 tokens to deposit and send\",\"_refundAddress\":\"Address to receive excess `msg.value`\",\"_sendParam\":\"Parameters on how to send the shares to the recipient\"}},\"handleCompose(address,bytes32,bytes,uint256)\":{\"details\":\"This function can only be called by the contract itself (self-call restriction) Decodes the compose message to extract SendParam and minimum message value Routes to either deposit or redeem flow based on the input OFT token type\",\"params\":{\"_amount\":\"The amount of tokens received in the lzReceive associated with this lzTx\",\"_composeFrom\":\"The bytes32 identifier of the compose sender\",\"_composeMsg\":\"The encoded message containing SendParam and minMsgValue\",\"_oftIn\":\"The OFT token whose funds have been received in the lzReceive associated with this lzTx\"}},\"lzCompose(address,bytes32,bytes,address,bytes)\":{\"details\":\"This composer is designed to handle refunds to an EOA address and not a contractAny revert in handleCompose() causes a refund back to the src EXCEPT for InsufficientMsgValue\",\"params\":{\"_composeSender\":\"The OFT contract address used for refunds, must be either ASSET_OFT or SHARE_OFT\",\"_guid\":\"LayerZero's unique tx id (created on the source tx)\",\"_message\":\"Decomposable bytes object into [composeHeader][composeMessage]\"}},\"quoteSend(address,address,uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"details\":\"Revert on slippage will be thrown by the OFT and not _assertSlippageThis function can be overridden to implement custom quoting logic\",\"params\":{\"_from\":\"The \\\"sender address\\\" used for the quote\",\"_sendParam\":\"The parameters for the send operation\",\"_targetOFT\":\"The OFT contract address to quote\",\"_vaultInAmount\":\"The amount of tokens to send to the vault\"},\"returns\":{\"_0\":\"MessagingFee The estimated fee for the send operation\"}},\"redeemAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)\":{\"params\":{\"_refundAddress\":\"Address to receive excess payment of the LZ fees\",\"_sendParam\":\"Parameter that defines how to send the assets\",\"_shareAmount\":\"The number of vault shares to redeem\"}}},\"stateVariables\":{\"VAULT\":{\"details\":\"Must be a synchronous vault - NO 2-step redemptions/deposit windows\"}},\"title\":\"VaultComposerSync - Synchronous Vault Composer\",\"version\":1},\"userdoc\":{\"errors\":{\"ShareOFTNotAdapter(address)\":[{\"notice\":\"========================== Error Messages =====================================\"}]},\"events\":{\"Sent(bytes32)\":{\"notice\":\"========================== EVENTS =====================================\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Initializes the VaultComposerSync contract with vault and OFT token addresses\"},\"depositAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)\":{\"notice\":\"Deposits ERC20 assets from the caller into the vault and sends them to the recipient\"},\"handleCompose(address,bytes32,bytes,uint256)\":{\"notice\":\"Handles the compose operation for OFT (Omnichain Fungible Token) transactions\"},\"lzCompose(address,bytes32,bytes,address,bytes)\":{\"notice\":\"Handles LayerZero compose operations for vault transactions with automatic refund functionality\"},\"quoteSend(address,address,uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Quotes the send operation for the given OFT and SendParam\"},\"redeemAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)\":{\"notice\":\"Redeems vault shares and sends the resulting assets to the user\"}},\"notice\":\"This contract is a composer that allows deposits and redemptions operations against a synchronous vault across different chains using LayerZero's OFT protocol.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/VaultComposerSync.sol\":\"VaultComposerSync\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/\"]},\"sources\":{\"contracts/VaultComposerSync.sol\":{\"keccak256\":\"0xbbba257858c39e33201067897be32e7e2dac636726498e4f394115c2bc3bf93b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ff9ce61a8cd70dfea73b632241c852a040c0ae2c9470c7add66571cc32e0246\",\"dweb:/ipfs/QmauMyGN1mGiv9pLEtnZbXjpd8J49AzV6W8bSLQ9Uf2LEH\"]},\"contracts/interfaces/IVaultComposerSync.sol\":{\"keccak256\":\"0x86597121d142cdd98d7399abfe1109ab4052d570056758f71193b8a614c289cd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bcfb48d7d685e5e4d46dc16e3a74d18341c489ea4efcab2e593ec3b3f3cca48\",\"dweb:/ipfs/QmQG5PGYqVDrxBeGy7vcYKkk3jjqt3mLJ9kJpjwcRQzWZu\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol\":{\"keccak256\":\"0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d\",\"dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0xc60c7b4374b3d89f33b8de982f463c92374a8548800c816fe776f0ec76351fb0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9e2ae9efc2a93373e822b148b3a3b50e3562c8c317f2e71d73cf4a11dede9d15\",\"dweb:/ipfs/QmahCbqvqEcWLJpqE6EbHHTuSbnGWyo35ZBVqoyKv18BSF\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09\",\"dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol\":{\"keccak256\":\"0x51aabf26e9682335ecf33b708cbcdf26e42bdc2f0a2e6fc09d6640219a0e00f6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9423a1603d9145e142d50aa0f9a31199731733535501a7d3918d36b1deed78f2\",\"dweb:/ipfs/QmQAArNnrZVfKrbY3vGer2G6775HozDmGrsovtz5NFqGrP\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}",
+ "metadata": {
+ "compiler": { "version": "0.8.22+commit.4fc1097e" },
+ "language": "Solidity",
+ "output": {
+ "abi": [
+ {
+ "inputs": [
+ { "internalType": "address", "name": "_vault", "type": "address" },
+ {
+ "internalType": "address",
+ "name": "_assetOFT",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_shareOFT",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "assetERC20",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "vaultAsset",
+ "type": "address"
+ }
+ ],
+ "type": "error",
+ "name": "AssetTokenNotVaultAsset"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "receiver",
+ "type": "address"
+ },
+ { "internalType": "uint256", "name": "assets", "type": "uint256" },
+ { "internalType": "uint256", "name": "max", "type": "uint256" }
+ ],
+ "type": "error",
+ "name": "ERC4626ExceededMaxDeposit"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "owner", "type": "address" },
+ { "internalType": "uint256", "name": "shares", "type": "uint256" },
+ { "internalType": "uint256", "name": "max", "type": "uint256" }
+ ],
+ "type": "error",
+ "name": "ERC4626ExceededMaxRedeem"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "expectedMsgValue",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "actualMsgValue",
+ "type": "uint256"
+ }
+ ],
+ "type": "error",
+ "name": "InsufficientMsgValue"
+ },
+ { "inputs": [], "type": "error", "name": "NoMsgValueExpected" },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "caller", "type": "address" }
+ ],
+ "type": "error",
+ "name": "OnlyEndpoint"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "caller", "type": "address" }
+ ],
+ "type": "error",
+ "name": "OnlySelf"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "caller", "type": "address" }
+ ],
+ "type": "error",
+ "name": "OnlyValidComposeCaller"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "ReentrancyGuardReentrantCall"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "token", "type": "address" }
+ ],
+ "type": "error",
+ "name": "SafeERC20FailedOperation"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "shareOFT", "type": "address" }
+ ],
+ "type": "error",
+ "name": "ShareOFTNotAdapter"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "shareERC20",
+ "type": "address"
+ },
+ { "internalType": "address", "name": "vault", "type": "address" }
+ ],
+ "type": "error",
+ "name": "ShareTokenNotVault"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amountLD",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minAmountLD",
+ "type": "uint256"
+ }
+ ],
+ "type": "error",
+ "name": "SlippageExceeded"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "guid",
+ "type": "bytes32",
+ "indexed": true
+ }
+ ],
+ "type": "event",
+ "name": "Refunded",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "guid",
+ "type": "bytes32",
+ "indexed": true
+ }
+ ],
+ "type": "event",
+ "name": "Sent",
+ "anonymous": false
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "ASSET_ERC20",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "ASSET_OFT",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "ENDPOINT",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "SHARE_ERC20",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "SHARE_OFT",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "VAULT",
+ "outputs": [
+ {
+ "internalType": "contract IERC4626",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "VAULT_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_assetAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct SendParam",
+ "name": "_sendParam",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "uint32",
+ "name": "dstEid",
+ "type": "uint32"
+ },
+ { "internalType": "bytes32", "name": "to", "type": "bytes32" },
+ {
+ "internalType": "uint256",
+ "name": "amountLD",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minAmountLD",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "extraOptions",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "composeMsg",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "oftCmd", "type": "bytes" }
+ ]
+ },
+ {
+ "internalType": "address",
+ "name": "_refundAddress",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "depositAndSend"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "_oftIn", "type": "address" },
+ {
+ "internalType": "bytes32",
+ "name": "_composeFrom",
+ "type": "bytes32"
+ },
+ { "internalType": "bytes", "name": "_composeMsg", "type": "bytes" },
+ { "internalType": "uint256", "name": "_amount", "type": "uint256" }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "handleCompose"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_composeSender",
+ "type": "address"
+ },
+ { "internalType": "bytes32", "name": "_guid", "type": "bytes32" },
+ { "internalType": "bytes", "name": "_message", "type": "bytes" },
+ { "internalType": "address", "name": "", "type": "address" },
+ { "internalType": "bytes", "name": "", "type": "bytes" }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzCompose"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "_from", "type": "address" },
+ {
+ "internalType": "address",
+ "name": "_targetOFT",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_vaultInAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct SendParam",
+ "name": "_sendParam",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "uint32",
+ "name": "dstEid",
+ "type": "uint32"
+ },
+ { "internalType": "bytes32", "name": "to", "type": "bytes32" },
+ {
+ "internalType": "uint256",
+ "name": "amountLD",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minAmountLD",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "extraOptions",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "composeMsg",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "oftCmd", "type": "bytes" }
+ ]
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "quoteSend",
+ "outputs": [
+ {
+ "internalType": "struct MessagingFee",
+ "name": "",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "nativeFee",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "lzTokenFee",
+ "type": "uint256"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_shareAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "struct SendParam",
+ "name": "_sendParam",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "uint32",
+ "name": "dstEid",
+ "type": "uint32"
+ },
+ { "internalType": "bytes32", "name": "to", "type": "bytes32" },
+ {
+ "internalType": "uint256",
+ "name": "amountLD",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minAmountLD",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "extraOptions",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "composeMsg",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "oftCmd", "type": "bytes" }
+ ]
+ },
+ {
+ "internalType": "address",
+ "name": "_refundAddress",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "redeemAndSend"
+ },
+ { "inputs": [], "stateMutability": "payable", "type": "receive" }
+ ],
+ "devdoc": {
+ "kind": "dev",
+ "methods": {
+ "constructor": {
+ "params": {
+ "_assetOFT": "The address of the asset OFT (Omnichain Fungible Token) contract",
+ "_shareOFT": "The address of the share OFT contract (must be an adapter) Requirements: - Share token must be the vault itself - Asset token must match the vault's underlying asset - Share OFT must be an adapter (approvalRequired() returns true)",
+ "_vault": "The address of the ERC4626 vault contract"
+ }
+ },
+ "depositAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)": {
+ "params": {
+ "_assetAmount": "The number of ERC20 tokens to deposit and send",
+ "_refundAddress": "Address to receive excess `msg.value`",
+ "_sendParam": "Parameters on how to send the shares to the recipient"
+ }
+ },
+ "handleCompose(address,bytes32,bytes,uint256)": {
+ "details": "This function can only be called by the contract itself (self-call restriction) Decodes the compose message to extract SendParam and minimum message value Routes to either deposit or redeem flow based on the input OFT token type",
+ "params": {
+ "_amount": "The amount of tokens received in the lzReceive associated with this lzTx",
+ "_composeFrom": "The bytes32 identifier of the compose sender",
+ "_composeMsg": "The encoded message containing SendParam and minMsgValue",
+ "_oftIn": "The OFT token whose funds have been received in the lzReceive associated with this lzTx"
+ }
+ },
+ "lzCompose(address,bytes32,bytes,address,bytes)": {
+ "details": "This composer is designed to handle refunds to an EOA address and not a contractAny revert in handleCompose() causes a refund back to the src EXCEPT for InsufficientMsgValue",
+ "params": {
+ "_composeSender": "The OFT contract address used for refunds, must be either ASSET_OFT or SHARE_OFT",
+ "_guid": "LayerZero's unique tx id (created on the source tx)",
+ "_message": "Decomposable bytes object into [composeHeader][composeMessage]"
+ }
+ },
+ "quoteSend(address,address,uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": {
+ "details": "Revert on slippage will be thrown by the OFT and not _assertSlippageThis function can be overridden to implement custom quoting logic",
+ "params": {
+ "_from": "The \"sender address\" used for the quote",
+ "_sendParam": "The parameters for the send operation",
+ "_targetOFT": "The OFT contract address to quote",
+ "_vaultInAmount": "The amount of tokens to send to the vault"
+ },
+ "returns": {
+ "_0": "MessagingFee The estimated fee for the send operation"
+ }
+ },
+ "redeemAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)": {
+ "params": {
+ "_refundAddress": "Address to receive excess payment of the LZ fees",
+ "_sendParam": "Parameter that defines how to send the assets",
+ "_shareAmount": "The number of vault shares to redeem"
+ }
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {
+ "constructor": {
+ "notice": "Initializes the VaultComposerSync contract with vault and OFT token addresses"
+ },
+ "depositAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)": {
+ "notice": "Deposits ERC20 assets from the caller into the vault and sends them to the recipient"
+ },
+ "handleCompose(address,bytes32,bytes,uint256)": {
+ "notice": "Handles the compose operation for OFT (Omnichain Fungible Token) transactions"
+ },
+ "lzCompose(address,bytes32,bytes,address,bytes)": {
+ "notice": "Handles LayerZero compose operations for vault transactions with automatic refund functionality"
+ },
+ "quoteSend(address,address,uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": {
+ "notice": "Quotes the send operation for the given OFT and SendParam"
+ },
+ "redeemAndSend(uint256,(uint32,bytes32,uint256,uint256,bytes,bytes,bytes),address)": {
+ "notice": "Redeems vault shares and sends the resulting assets to the user"
+ }
+ },
+ "version": 1
+ }
+ },
+ "settings": {
+ "remappings": [
+ "@layerzerolabs/=node_modules/@layerzerolabs/",
+ "@openzeppelin/=node_modules/@openzeppelin/",
+ "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/",
+ "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/",
+ "solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/"
+ ],
+ "optimizer": { "enabled": true, "runs": 20000 },
+ "metadata": { "bytecodeHash": "ipfs" },
+ "compilationTarget": {
+ "contracts/VaultComposerSync.sol": "VaultComposerSync"
+ },
+ "evmVersion": "shanghai",
+ "libraries": {}
+ },
+ "sources": {
+ "contracts/VaultComposerSync.sol": {
+ "keccak256": "0xbbba257858c39e33201067897be32e7e2dac636726498e4f394115c2bc3bf93b",
+ "urls": [
+ "bzz-raw://7ff9ce61a8cd70dfea73b632241c852a040c0ae2c9470c7add66571cc32e0246",
+ "dweb:/ipfs/QmauMyGN1mGiv9pLEtnZbXjpd8J49AzV6W8bSLQ9Uf2LEH"
+ ],
+ "license": "MIT"
+ },
+ "contracts/interfaces/IVaultComposerSync.sol": {
+ "keccak256": "0x86597121d142cdd98d7399abfe1109ab4052d570056758f71193b8a614c289cd",
+ "urls": [
+ "bzz-raw://0bcfb48d7d685e5e4d46dc16e3a74d18341c489ea4efcab2e593ec3b3f3cca48",
+ "dweb:/ipfs/QmQG5PGYqVDrxBeGy7vcYKkk3jjqt3mLJ9kJpjwcRQzWZu"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": {
+ "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49",
+ "urls": [
+ "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf",
+ "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": {
+ "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3",
+ "urls": [
+ "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083",
+ "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": {
+ "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc",
+ "urls": [
+ "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b",
+ "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": {
+ "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972",
+ "urls": [
+ "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927",
+ "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": {
+ "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901",
+ "urls": [
+ "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d",
+ "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": {
+ "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e",
+ "urls": [
+ "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6",
+ "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": {
+ "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc",
+ "urls": [
+ "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0",
+ "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": {
+ "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20",
+ "urls": [
+ "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2",
+ "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol": {
+ "keccak256": "0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae",
+ "urls": [
+ "bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d",
+ "dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": {
+ "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58",
+ "urls": [
+ "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd",
+ "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": {
+ "keccak256": "0xc60c7b4374b3d89f33b8de982f463c92374a8548800c816fe776f0ec76351fb0",
+ "urls": [
+ "bzz-raw://9e2ae9efc2a93373e822b148b3a3b50e3562c8c317f2e71d73cf4a11dede9d15",
+ "dweb:/ipfs/QmahCbqvqEcWLJpqE6EbHHTuSbnGWyo35ZBVqoyKv18BSF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": {
+ "keccak256": "0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5",
+ "urls": [
+ "bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e",
+ "dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/access/Ownable.sol": {
+ "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
+ "urls": [
+ "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
+ "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": {
+ "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7",
+ "urls": [
+ "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b",
+ "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": {
+ "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724",
+ "urls": [
+ "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a",
+ "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": {
+ "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c",
+ "urls": [
+ "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba",
+ "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol": {
+ "keccak256": "0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17",
+ "urls": [
+ "bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1",
+ "dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
+ "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b",
+ "urls": [
+ "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b",
+ "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": {
+ "keccak256": "0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31",
+ "urls": [
+ "bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09",
+ "dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": {
+ "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7",
+ "urls": [
+ "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db",
+ "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol": {
+ "keccak256": "0x51aabf26e9682335ecf33b708cbcdf26e42bdc2f0a2e6fc09d6640219a0e00f6",
+ "urls": [
+ "bzz-raw://9423a1603d9145e142d50aa0f9a31199731733535501a7d3918d36b1deed78f2",
+ "dweb:/ipfs/QmQAArNnrZVfKrbY3vGer2G6775HozDmGrsovtz5NFqGrP"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
+ "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330",
+ "urls": [
+ "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf",
+ "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
+ "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310",
+ "urls": [
+ "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862",
+ "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Address.sol": {
+ "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5",
+ "urls": [
+ "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23",
+ "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Context.sol": {
+ "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
+ "urls": [
+ "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
+ "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Errors.sol": {
+ "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123",
+ "urls": [
+ "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf",
+ "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Panic.sol": {
+ "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a",
+ "urls": [
+ "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a",
+ "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": {
+ "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3",
+ "urls": [
+ "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a",
+ "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": {
+ "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8",
+ "urls": [
+ "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621",
+ "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/math/Math.sol": {
+ "keccak256": "0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea",
+ "urls": [
+ "bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d",
+ "dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": {
+ "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54",
+ "urls": [
+ "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8",
+ "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"
+ ],
+ "license": "MIT"
+ }
+ },
+ "version": 1
+ },
+ "id": 0
+}
diff --git a/packages/ovault-evm/artifacts/VaultComposerSync_Base.t.sol/VaultComposerSyncBaseTest.json b/packages/ovault-evm/artifacts/VaultComposerSync_Base.t.sol/VaultComposerSyncBaseTest.json
new file mode 100644
index 0000000000..cbc8542c44
--- /dev/null
+++ b/packages/ovault-evm/artifacts/VaultComposerSync_Base.t.sol/VaultComposerSyncBaseTest.json
@@ -0,0 +1,3659 @@
+{
+ "abi": [
+ { "type": "receive", "stateMutability": "payable" },
+ {
+ "type": "function",
+ "name": "ARB_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "BAD_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "DEFAULT_CHANNEL_ID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "ETH_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "EVM_COMPUTE_MAP_BPS",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "EVM_COMPUTE_REDUCE_FEE_USD",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint120", "internalType": "uint120" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "EVM_REQUEST_FEE_USD",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint120", "internalType": "uint120" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "INITIAL_BALANCE",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "IS_TEST",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "MAP_REDUCE_COMPUTE_TYPES",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "NATIVE_TOKEN_PRICE_USD",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "OPTIONS_LZRECEIVE_100k",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "POL_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "TOKENS_TO_SEND",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "TREASURY_GAS_CAP",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "TREASURY_GAS_FOR_FEE_CAP",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "VaultComposerSyncArb",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract VaultComposerSync"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "arbEndpoint",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "arbExecutor",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "assertGuid",
+ "inputs": [
+ { "name": "packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "guid", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "assetOFT_arb",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "assetOFT_eth",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "assetOFT_pol",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "createEndpoints",
+ "inputs": [
+ { "name": "_endpointNum", "type": "uint8", "internalType": "uint8" },
+ {
+ "name": "_libraryType",
+ "type": "uint8",
+ "internalType": "enum TestHelperOz5.LibraryType"
+ },
+ {
+ "name": "nativeTokenAddresses",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "decodeLzComposeOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "index", "type": "uint16", "internalType": "uint16" },
+ { "name": "gas", "type": "uint128", "internalType": "uint128" },
+ { "name": "value", "type": "uint128", "internalType": "uint128" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "decodeLzReadOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "gas", "type": "uint128", "internalType": "uint128" },
+ { "name": "size", "type": "uint32", "internalType": "uint32" },
+ { "name": "value", "type": "uint128", "internalType": "uint128" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "decodeLzReceiveOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "gas", "type": "uint128", "internalType": "uint128" },
+ { "name": "value", "type": "uint128", "internalType": "uint128" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "decodeNativeDropOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "amount", "type": "uint128", "internalType": "uint128" },
+ { "name": "receiver", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "excludeArtifacts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedArtifacts_",
+ "type": "string[]",
+ "internalType": "string[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "excludeContracts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedContracts_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "excludeSelectors",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedSelectors_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "components": [
+ { "name": "addr", "type": "address", "internalType": "address" },
+ {
+ "name": "selectors",
+ "type": "bytes4[]",
+ "internalType": "bytes4[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "excludeSenders",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedSenders_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "executorValueCap",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "failed",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getNextInflightPacket",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint16", "internalType": "uint16" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [
+ { "name": "packetBytes", "type": "bytes", "internalType": "bytes" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "hasPendingPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint16", "internalType": "uint16" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [{ "name": "flag", "type": "bool", "internalType": "bool" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "lzCompose",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_from", "type": "address", "internalType": "address" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_guid", "type": "bytes32", "internalType": "bytes32" },
+ { "name": "_to", "type": "address", "internalType": "address" },
+ { "name": "_composerMsg", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "lzCompose",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_guid", "type": "bytes32", "internalType": "bytes32" },
+ { "name": "_composer", "type": "address", "internalType": "address" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "lzReadReceive",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "lzReceive",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "msgValueToFail",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "msgValueToPass",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "nextExecutorOption",
+ "inputs": [
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_cursor", "type": "uint256", "internalType": "uint256" }
+ ],
+ "outputs": [
+ { "name": "optionType", "type": "uint8", "internalType": "uint8" },
+ { "name": "option", "type": "bytes", "internalType": "bytes" },
+ { "name": "cursor", "type": "uint256", "internalType": "uint256" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "registerEndpoint",
+ "inputs": [
+ {
+ "name": "endpoint",
+ "type": "address",
+ "internalType": "contract EndpointV2Mock"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "schedulePacket",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setExecutorValueCap",
+ "inputs": [
+ { "name": "_valueCap", "type": "uint128", "internalType": "uint128" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setUp",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setUpEndpoints",
+ "inputs": [
+ { "name": "_endpointNum", "type": "uint8", "internalType": "uint8" },
+ {
+ "name": "_libraryType",
+ "type": "uint8",
+ "internalType": "enum TestHelperOz5.LibraryType"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setupOApps",
+ "inputs": [
+ {
+ "name": "_oappCreationCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ { "name": "_startEid", "type": "uint8", "internalType": "uint8" },
+ { "name": "_oappNum", "type": "uint8", "internalType": "uint8" }
+ ],
+ "outputs": [
+ { "name": "oapps", "type": "address[]", "internalType": "address[]" }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "shareOFT_arb",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract MockOFTAdapter"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "shareOFT_eth",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "shareOFT_pol",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetArtifactSelectors",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedArtifactSelectors_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzArtifactSelector[]",
+ "components": [
+ { "name": "artifact", "type": "string", "internalType": "string" },
+ {
+ "name": "selectors",
+ "type": "bytes4[]",
+ "internalType": "bytes4[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetArtifacts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedArtifacts_",
+ "type": "string[]",
+ "internalType": "string[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetContracts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedContracts_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetInterfaces",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedInterfaces_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzInterface[]",
+ "components": [
+ { "name": "addr", "type": "address", "internalType": "address" },
+ {
+ "name": "artifacts",
+ "type": "string[]",
+ "internalType": "string[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetSelectors",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedSelectors_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "components": [
+ { "name": "addr", "type": "address", "internalType": "address" },
+ {
+ "name": "selectors",
+ "type": "bytes4[]",
+ "internalType": "bytes4[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetSenders",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedSenders_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "userA",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "userB",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "validatePacket",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "vault_arb",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockVault" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "verifyPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_dstAddress", "type": "address", "internalType": "address" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "verifyPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" },
+ {
+ "name": "_packetAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ { "name": "_composer", "type": "address", "internalType": "address" },
+ { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "verifyPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "wireOApps",
+ "inputs": [
+ { "name": "oapps", "type": "address[]", "internalType": "address[]" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "wireReadOApps",
+ "inputs": [
+ { "name": "oapps", "type": "address[]", "internalType": "address[]" },
+ { "name": "channels", "type": "uint32[]", "internalType": "uint32[]" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "event",
+ "name": "log",
+ "inputs": [
+ {
+ "name": "",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_address",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_array",
+ "inputs": [
+ {
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false,
+ "internalType": "uint256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_array",
+ "inputs": [
+ {
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false,
+ "internalType": "int256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_array",
+ "inputs": [
+ {
+ "name": "val",
+ "type": "address[]",
+ "indexed": false,
+ "internalType": "address[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_bytes",
+ "inputs": [
+ {
+ "name": "",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_bytes32",
+ "inputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "indexed": false,
+ "internalType": "bytes32"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_int",
+ "inputs": [
+ {
+ "name": "",
+ "type": "int256",
+ "indexed": false,
+ "internalType": "int256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_address",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_array",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false,
+ "internalType": "uint256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_array",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false,
+ "internalType": "int256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_array",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "address[]",
+ "indexed": false,
+ "internalType": "address[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_bytes",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_bytes32",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "bytes32",
+ "indexed": false,
+ "internalType": "bytes32"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_decimal_int",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "int256",
+ "indexed": false,
+ "internalType": "int256"
+ },
+ {
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_decimal_uint",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_int",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "int256",
+ "indexed": false,
+ "internalType": "int256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_string",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_uint",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_string",
+ "inputs": [
+ {
+ "name": "",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_uint",
+ "inputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "logs",
+ "inputs": [
+ {
+ "name": "",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "Executor_InvalidLzComposeOption",
+ "inputs": []
+ },
+ { "type": "error", "name": "Executor_InvalidLzReadOption", "inputs": [] },
+ {
+ "type": "error",
+ "name": "Executor_InvalidLzReceiveOption",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "Executor_InvalidNativeDropOption",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidOptionType",
+ "inputs": [
+ { "name": "optionType", "type": "uint16", "internalType": "uint16" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SafeCastOverflowedUintDowncast",
+ "inputs": [
+ { "name": "bits", "type": "uint8", "internalType": "uint8" },
+ { "name": "value", "type": "uint256", "internalType": "uint256" }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x60806040819052600c8054600160ff199182168117909255601f805490911690911790556200002e9062000502565b604051809103905ff08015801562000048573d5f803e3d5ffd5b50601f80546001600160a01b039290921661010002610100600160a81b0319909216919091179055602480546001600160801b03191667016345785d8a00001790556033805460ff19166003179055604080518082019091526005815264757365724160d81b6020820152620000be90620001cd565b603b80546001600160a01b0319166001600160a01b03929092169190911790556040805180820190915260058152643ab9b2b92160d91b60208201526200010590620001cd565b603c80546001600160a01b0319166001600160a01b039290921691909117905560408051808201909152600b81526a30b93122bc32b1baba37b960a91b60208201526200015290620001cd565b603e80546001600160a01b0319166001600160a01b0392909216919091179055620001aa620186a05f620001a260408051600360f01b602082015281516002818303018152602290910190915290565b9190620001e0565b603f90620001b99082620005ae565b50348015620001c6575f80fd5b50620007f0565b5f620001d98262000253565b5092915050565b6060836003620001f1825f6200036a565b61ffff16146200022c5762000207815f6200036a565b604051633a51740d60e01b815261ffff90911660048201526024015b60405180910390fd5b5f620002398585620003d9565b9050620002498660018362000454565b9695505050505050565b5f80826040516020016200026891906200069e565b60408051808303601f190181529082905280516020909101206001625e79b760e01b03198252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015620002d2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f89190620006bb565b6040516318caf8e360e31b8152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c71890620003369085908790600401620006e3565b5f604051808303815f87803b1580156200034e575f80fd5b505af115801562000361573d5f803e3d5ffd5b50505050915091565b5f620003788260026200073a565b83511015620003ca5760405162461bcd60e51b815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e6473000000000000000000000000604482015260640162000223565b50818101600201515b92915050565b60606001600160801b038216156200042357604080516001600160801b0319608086811b8216602084015285901b166030820152016040516020818303038152906040526200044d565b6040516001600160801b0319608085901b1660208201526030016040516020818303038152906040525b9392505050565b606083600362000465825f6200036a565b61ffff16146200047b5762000207815f6200036a565b846001620004908551620004ce60201b60201c565b6200049d90600162000750565b8686604051602001620004b59594939291906200076e565b6040516020818303038152906040529150509392505050565b5f61ffff821115620004fe576040516306dfcc6560e41b8152601060048201526024810183905260440162000223565b5090565b610aa98062040ed483390190565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200053957607f821691505b6020821081036200055857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620005a957805f5260205f20601f840160051c81016020851015620005855750805b601f840160051c820191505b81811015620005a6575f815560010162000591565b50505b505050565b81516001600160401b03811115620005ca57620005ca62000510565b620005e281620005db845462000524565b846200055e565b602080601f83116001811462000618575f8415620006005750858301515b5f19600386901b1c1916600185901b17855562000672565b5f85815260208120601f198616915b82811015620006485788860151825594840194600190910190840162000627565b50858210156200066657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f5b83811015620006965781810151838201526020016200067c565b50505f910152565b5f8251620006b18184602087016200067a565b9190910192915050565b5f60208284031215620006cc575f80fd5b81516001600160a01b03811681146200044d575f80fd5b60018060a01b0383168152604060208201525f8251806040840152620007118160608501602087016200067a565b601f01601f1916919091016060019392505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115620003d357620003d362000726565b61ffff818116838216019080821115620001d957620001d962000726565b5f865162000781818460208b016200067a565b7fff0000000000000000000000000000000000000000000000000000000000000060f888811b82169285019283526001600160f01b031960f089901b16600184015286901b1660038201528351620007e18160048401602088016200067a565b01600401979650505050505050565b620406d580620007ff5f395ff3fe6080604052600436106200045a575f3560e01c8063699cbade116200024a578063b1dcf5c8116200013a578063d6d6249711620000c6578063ec53eaa01162000092578063f93e1d611162000076578063f93e1d611462000d79578063fa7626d41462000dc7578063faed6c581462000de2575f80fd5b8063ec53eaa01462000d49578063f5e4efb51462000d60575f80fd5b8063d6d624971462000c8c578063deb22e9a1462000cb0578063defd9da61462000cd1578063e20c9f711462000d32575f80fd5b8063b954fdf61162000106578063b954fdf61462000bed578063ba414fa61462000c3a578063baead19c1462000c51578063cb1a295f1462000c6b575f80fd5b8063b1dcf5c8146200082a578063b5508aa91462000b9c578063b752b72a1462000bb3578063b76bada51462000bd7575f80fd5b806385226c8111620001d65780639751ca8611620001a2578063a29c89841162000186578063a29c89841462000b4a578063ae6ce4001462000b61578063b0464fdc1462000b85575f80fd5b80639751ca861462000ac9578063997cff1b1462000b26575f80fd5b806385226c811462000a3f5780638c5e9f741462000a6557806390a606f51462000a82578063916a17c61462000aa3575f80fd5b80637a8b5d9811620002165780637a8b5d9814620009d95780637f2e593614620009fa57806382411c7714620005a2578063834bd1591462000a1b575f80fd5b8063699cbade146200093d5780636e1775e3146200095b578063703ca25414620009915780637982cf4214620009b5575f80fd5b80632ade38801162000366578063536e8d3a11620002f25780636019788911620002be57806366d9a9a011620002a257806366d9a9a014620008d5578063677d417514620008fb57806367d53a00146200091c575f80fd5b806360197889146200088d57806365449eb014620008b1575f80fd5b8063536e8d3a1462000809578063556257df146200082a5780635e42c9b214620008425780635ea0fefe1462000858575f80fd5b80633e5e3c2311620003325780633e5e3c23146200076b5780633f7286f41462000782578063518e8ab0146200079957806351aa318b14620007f1575f80fd5b80632ade388014620006ec578063375591d714620007125780633bbd6a9414620007335780633cae7b8a146200074a575f80fd5b80631766f5a411620003e65780631f3280c511620003b25780631f3280c514620006505780632113ce62146200066657806325996dae14620006b25780632a35d25014620006c8575f80fd5b80631766f5a414620005a2578063178928d314620005e05780631cc4652514620006065780631ed7831c146200062a575f80fd5b80630afba86811620004265780630afba86814620004f85780630c003ff714620005235780630fcaecfe146200054957806314525bce1462000575575f80fd5b8063090852b6146200046657806309c885c9146200048c5780630a69faa914620004ca5780630a9254e414620004e1575f80fd5b366200046257005b5f80fd5b34801562000472575f80fd5b506200048a62000484366004620084c1565b62000e06565b005b34801562000498575f80fd5b50603d54620004ad906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6200048a620004db3660046200864d565b62000e32565b348015620004ed575f80fd5b506200048a62000f89565b34801562000504575f80fd5b506200050f61271081565b60405161ffff9091168152602001620004c1565b3480156200052f575f80fd5b50603354620004ad9061010090046001600160a01b031681565b34801562000555575f80fd5b506200055f606581565b60405163ffffffff9091168152602001620004c1565b34801562000581575f80fd5b506200059368056bc75e2d6310000081565b604051908152602001620004c1565b348015620005ae575f80fd5b50620005bf670de0b6b3a764000081565b6040516effffffffffffffffffffffffffffff9091168152602001620004c1565b348015620005ec575f80fd5b50620005f76200233b565b604051620004c1919062008730565b34801562000612575f80fd5b506200048a6200062436600462008767565b620023cf565b34801562000636575f80fd5b506200064162002425565b604051620004c19190620087db565b3480156200065c575f80fd5b506200055f600381565b34801562000672575f80fd5b5060245462000690906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001620004c1565b348015620006be575f80fd5b506200055f600181565b348015620006d4575f80fd5b5062000641620006e6366004620087ef565b62002487565b348015620006f8575f80fd5b5062000703620025a0565b604051620004c19190620088b3565b3480156200071e575f80fd5b50603454620004ad906001600160a01b031681565b6200048a6200074436600462008952565b620026e8565b34801562000756575f80fd5b50603854620004ad906001600160a01b031681565b34801562000777575f80fd5b5062000641620027a3565b3480156200078e575f80fd5b506200064162002803565b348015620007a5575f80fd5b50620007bd620007b736600462008a06565b62002863565b6040805161ffff90941684526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001620004c1565b348015620007fd575f80fd5b506200055f6201117181565b34801562000815575f80fd5b50603554620004ad906001600160a01b031681565b34801562000836575f80fd5b5062000593620186a081565b3480156200084e575f80fd5b506200055f600281565b34801562000864575f80fd5b506200087c6200087636600462008a59565b6200287f565b6040519015158152602001620004c1565b34801562000899575f80fd5b506200048a620008ab36600462008a86565b620028df565b348015620008bd575f80fd5b506200048a620008cf36600462008b90565b6200368e565b348015620008e1575f80fd5b50620008ec62003784565b604051620004c1919062008caf565b34801562000907575f80fd5b50603e54620004ad906001600160a01b031681565b34801562000928575f80fd5b50603754620004ad906001600160a01b031681565b34801562000949575f80fd5b506200069068056bc75e2d6310000081565b34801562000967575f80fd5b506200097f6200097936600462008d4a565b62003909565b604051620004c1949392919062008dbf565b3480156200099d575f80fd5b506200048a620009af36600462008dee565b6200392b565b348015620009c1575f80fd5b50620005f7620009d336600462008a59565b62003afc565b348015620009e5575f80fd5b50603954620004ad906001600160a01b031681565b34801562000a06575f80fd5b50603654620004ad906001600160a01b031681565b34801562000a27575f80fd5b506200048a62000a3936600462008e2c565b62003c11565b34801562000a4b575f80fd5b5062000a5662004222565b604051620004c1919062008ea5565b34801562000a71575f80fd5b5062000593670de0b6b3a764000081565b34801562000a8e575f80fd5b50603a54620004ad906001600160a01b031681565b34801562000aaf575f80fd5b5062000aba620042f7565b604051620004c1919062008eb9565b34801562000ad5575f80fd5b5062000aed62000ae736600462008a06565b620043f1565b604080516fffffffffffffffffffffffffffffffff948516815263ffffffff9093166020840152921691810191909152606001620004c1565b34801562000b32575f80fd5b506200048a62000b4436600462008d4a565b62004400565b6200048a62000b5b36600462008f4a565b62004480565b34801562000b6d575f80fd5b506200048a62000b7f36600462008fd5565b62004507565b34801562000b91575f80fd5b5062000aba620045bc565b34801562000ba8575f80fd5b5062000a56620046b6565b34801562000bbf575f80fd5b506200048a62000bd136600462008ff3565b6200478b565b34801562000be3575f80fd5b5062000593600381565b34801562000bf9575f80fd5b5062000c1162000c0b36600462008a06565b620047a8565b604080516fffffffffffffffffffffffffffffffff9093168352602083019190915201620004c1565b34801562000c46575f80fd5b506200087c620047c2565b34801562000c5d575f80fd5b506200059364e8d4a5100081565b34801562000c77575f80fd5b50603c54620004ad906001600160a01b031681565b34801562000c98575f80fd5b506200048a62000caa36600462009012565b62004896565b34801562000cbc575f80fd5b50603b54620004ad906001600160a01b031681565b34801562000cdd575f80fd5b506200048a62000cef3660046200908a565b602480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b34801562000d3e575f80fd5b506200064162006b25565b6200048a62000d5a36600462008a86565b62006b85565b34801562000d6c575f80fd5b5062000593630ee6b28081565b34801562000d85575f80fd5b5062000d9d62000d9736600462008a06565b62006cb8565b604080516fffffffffffffffffffffffffffffffff938416815292909116602083015201620004c1565b34801562000dd3575f80fd5b50601f546200087c9060ff1681565b34801562000dee575f80fd5b506200048a62000e00366004620090a8565b62006cc6565b62000e2e82826001600160a01b03165f1b5f8060405180602001604052805f81525062003c11565b5050565b5f60235f62000e42878762006d51565b63ffffffff16815260208101919091526040015f908120546001600160a01b031691508062000e718562006d77565b92505091505f604051806060016040528062000e8e8a8a62006eab565b63ffffffff16815260200162000ea58a8a62006ebc565b815260200162000eb68a8a62006ed8565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e6fffffffffffffffffffffffffffffffff8581169085168462000ef78d8d62006efe565b62000f038e8e62006f12565b604080516020810182525f815290517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16815262000f4e949392918e9160040162009116565b5f604051808303818589803b15801562000f66575f80fd5b5088f115801562000f79573d5f803e3d5ffd5b5050505050505050505050505050565b62000f9362006f23565b60335462000fa59060ff165f620023cf565b60025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c0954603d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169182179055604051309062001016906200816d565b620010239291906200918a565b604051809103905ff0801580156200103d573d5f803e3d5ffd5b50603380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384160217905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e047546040519116903090620010b4906200816d565b620010c192919062009227565b604051809103905ff080158015620010db573d5f803e3d5ffd5b50603580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e5460405191169030906200114e906200816d565b6200115b929190620092a1565b604051809103905ff08015801562001175573d5f803e3d5ffd5b50603780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff811115620011d157620011d16200853e565b604051908082528060200260200182016040528015620011fb578160200160208202803683370190505b5060355481519192506001600160a01b03169082905f906200122157620012216200931b565b6001600160a01b039283166020918202929092010152603354825161010090910490911690829060019081106200125c576200125c6200931b565b6001600160a01b0392831660209182029290920101526037548251911690829060029081106200129057620012906200931b565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca25490620012e6908490600401620087db565b5f604051808303815f87803b158015620012fe575f80fd5b505af115801562001311573d5f803e3d5ffd5b50505050603360019054906101000a90046001600160a01b031660405162001339906200817b565b62001345919062009348565b604051809103905ff0801580156200135f573d5f803e3d5ffd5b50603980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c0954604051919216903090620013d69062008189565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff08015801562001410573d5f803e3d5ffd5b50603480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560395460335460405191841693610100909104169190620014699062008197565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff080158015620014a3573d5f803e3d5ffd5b50603a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e04754604051911690309062001516906200816d565b62001523929190620093da565b604051809103905ff0801580156200153d573d5f803e3d5ffd5b50603680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e546040519116903090620015b0906200816d565b620015bd92919062009454565b604051809103905ff080158015620015d7573d5f803e3d5ffd5b50603880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff8111156200163357620016336200853e565b6040519080825280602002602001820160405280156200165d578160200160208202803683370190505b5060365481519192506001600160a01b03169082905f906200168357620016836200931b565b6001600160a01b039283166020918202929092010152603454825191169082906001908110620016b757620016b76200931b565b6001600160a01b039283166020918202929092010152603854825191169082906002908110620016eb57620016eb6200931b565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca2549062001741908490600401620087db565b5f604051808303815f87803b15801562001759575f80fd5b505af11580156200176c573d5f803e3d5ffd5b5050603354604080517fc657c7180000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b031660048301526024820152600d60448201527f41737365744f46543a3a617262000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562001817575f80fd5b505af11580156200182a573d5f803e3d5ffd5b5050603554604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b158015620018d1575f80fd5b505af1158015620018e4573d5f803e3d5ffd5b5050603754604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b1580156200198b575f80fd5b505af11580156200199e573d5f803e3d5ffd5b5050603454604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601460448201527f53686172654f4654416461707465723a3a6172620000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562001a45575f80fd5b505af115801562001a58573d5f803e3d5ffd5b5050603654604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562001aff575f80fd5b505af115801562001b12573d5f803e3d5ffd5b5050603854604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562001bb9575f80fd5b505af115801562001bcc573d5f803e3d5ffd5b5050603954604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600a60448201527f5661756c743a3a617262000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562001c73575f80fd5b505af115801562001c86573d5f803e3d5ffd5b5050603a54604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601660448201527f5661756c74436f6d706f73657253796e633a3a617262000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562001d2d575f80fd5b505af115801562001d40573d5f803e3d5ffd5b5050603e5462001d6692506001600160a01b0316905068056bc75e2d6310000062006f2f565b603d5462001d87906001600160a01b031668056bc75e2d6310000062006f2f565b604080516003808252608082019092525f91816020015b60408051606080820183525f80835260208301529181019190915281526020019060019003908162001d9e5790505090506040518060600160405280600363ffffffff168152602001600161ffff168152602001603f805462001e0190620094ce565b80601f016020809104026020016040519081016040528092919081815260200182805462001e2f90620094ce565b801562001e7e5780601f1062001e545761010080835404028352916020019162001e7e565b820191905f5260205f20905b81548152906001019060200180831162001e6057829003601f168201915b5050505050815250815f8151811062001e9b5762001e9b6200931b565b60200260200101819052506040518060600160405280600263ffffffff168152602001600161ffff168152602001603f805462001ed890620094ce565b80601f016020809104026020016040519081016040528092919081815260200182805462001f0690620094ce565b801562001f555780601f1062001f2b5761010080835404028352916020019162001f55565b820191905f5260205f20905b81548152906001019060200180831162001f3757829003601f168201915b50505050508152508160018151811062001f735762001f736200931b565b60200260200101819052506040518060600160405280600163ffffffff168152602001600161ffff168152602001603f805462001fb090620094ce565b80601f016020809104026020016040519081016040528092919081815260200182805462001fde90620094ce565b80156200202d5780601f1062002003576101008083540402835291602001916200202d565b820191905f5260205f20905b8154815290600101906020018083116200200f57829003601f168201915b5050505050815250816002815181106200204b576200204b6200931b565b60209081029190910101526033546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063b98bd07090620020a590849060040162009521565b5f604051808303815f87803b158015620020bd575f80fd5b505af1158015620020d0573d5f803e3d5ffd5b50506035546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200211f90849060040162009521565b5f604051808303815f87803b15801562002137575f80fd5b505af11580156200214a573d5f803e3d5ffd5b50506037546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200219990849060040162009521565b5f604051808303815f87803b158015620021b1575f80fd5b505af1158015620021c4573d5f803e3d5ffd5b50506034546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200221390849060040162009521565b5f604051808303815f87803b1580156200222b575f80fd5b505af11580156200223e573d5f803e3d5ffd5b50506036546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200228d90849060040162009521565b5f604051808303815f87803b158015620022a5575f80fd5b505af1158015620022b8573d5f803e3d5ffd5b50506038546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200230790849060040162009521565b5f604051808303815f87803b1580156200231f575f80fd5b505af115801562002332573d5f803e3d5ffd5b50505050505050565b603f80546200234a90620094ce565b80601f01602080910402602001604051908101604052809291908181526020018280546200237890620094ce565b8015620023c75780601f106200239d57610100808354040283529160200191620023c7565b820191905f5260205f20905b815481529060010190602001808311620023a957829003601f168201915b505050505081565b62000e2e82828460ff1667ffffffffffffffff811115620023f457620023f46200853e565b6040519080825280602002602001820160405280156200241e578160200160208202803683370190505b5062004896565b606060168054806020026020016040519081016040528092919081815260200182805480156200247d57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116200245e575b5050505050905090565b60608160ff1667ffffffffffffffff811115620024a857620024a86200853e565b604051908082528060200260200182016040528015620024d2578160200160208202803683370190505b509050825b620024e38385620095eb565b60ff168160ff1610156200258d5760ff81165f9081526023602090815260408083205481516001600160a01b03909116928101929092523090820152600160608201526200254590879060800160405160208183030381529060405262006fbd565b9050808362002555878562009607565b60ff16815181106200256b576200256b6200931b565b6001600160a01b039092166020928302919091019091015250600101620024d7565b5062002599816200392b565b9392505050565b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015620026df575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015620026c7578382905f5260205f200180546200263590620094ce565b80601f01602080910402602001604051908101604052809291908181526020018280546200266390620094ce565b8015620026b25780601f106200268857610100808354040283529160200191620026b2565b820191905f5260205f20905b8154815290600101906020018083116200269457829003601f168201915b50505050508152602001906001019062002615565b505050508152505081526020019060010190620025c3565b50505050905090565b63ffffffff87165f908152602360205260408120546001600160a01b0316908080620027148962007019565b925092509250836001600160a01b03166391d20fa18284908d8b8d898d8d60405180602001604052805f8152506040518a63ffffffff1660e01b815260040162002765979695949392919062009623565b5f604051808303818589803b1580156200277d575f80fd5b5088f115801562002790573d5f803e3d5ffd5b5050505050505050505050505050505050565b606060188054806020026020016040519081016040528092919081815260200182805480156200247d57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116200245e575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156200247d57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116200245e575050505050905090565b5f805f62002872858562007161565b9250925092509250925092565b61ffff82165f90815260208080526040808320848452909152812081620028d482546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b119150505b92915050565b5f620028ec848462006d51565b63ffffffff81165f908152602360205260408120549192506001600160a01b03909116908163402f846862002922888862006efe565b6200292e898962006eab565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015263ffffffff1660248201526044016040805180830381865afa15801562002993573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620029b9919062009690565b5090505f620029c98787620071f5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250604080517f54fd4d50000000000000000000000000000000000000000000000000000000008152905195965090946001600160a01b03881694506354fd4d509350600480830193506060928290030181865afa15801562002a5b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002a819190620096ea565b505090508067ffffffffffffffff1660030362002ffe57825f6001600160a01b038216639c33abf762002ab58c8c62006eab565b62002ac18d8d62006efe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600260448201526064015f60405180830381865afa15801562002b2e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405262002b57919081019062009776565b90505f8180602001905181019062002b7091906200981a565b608001515f8151811062002b885762002b886200931b565b602002602001015190505f62002b9f8c8c62007206565b60405162002baf929190620098fc565b6040518091039020905060605f630223536e60e01b8884606460405160240162002bdc939291906200990b565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03851663f010cb238d898562002c5e426103e862009938565b6040518563ffffffff1660e01b815260040162002c7f94939291906200994e565b602060405180830381865afa15801562002c9b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002cc191906200998e565b905062002cce8162007217565b6040805160018082528183019092529194505f9250816020015b6040805160a0810182525f80825260208201819052606092820183905282820152608081019190915281526020019060019003908162002ce85790505090506040518060a001604052808d63ffffffff168152602001886001600160a01b03168152602001838152602001426103e862002d63919062009938565b815260200184815250815f8151811062002d815762002d816200931b565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b143044b9062002dd3908490600401620099a6565b5f604051808303815f87803b15801562002deb575f80fd5b505af115801562002dfe573d5f803e3d5ffd5b505050505f630894edf160e01b8a8660405160240162002e2092919062009a72565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03871663f010cb238f8b8562002ea2426103e862009938565b6040518563ffffffff1660e01b815260040162002ec394939291906200994e565b602060405180830381865afa15801562002edf573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002f0591906200998e565b905062002f128162007217565b9450506040518060a001604052808e63ffffffff168152602001896001600160a01b03168152602001828152602001426103e862002f51919062009938565b815260200185815250825f8151811062002f6f5762002f6f6200931b565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063b143044b9062002fc1908590600401620099a6565b5f604051808303815f87803b15801562002fd9575f80fd5b505af115801562002fec573d5f803e3d5ffd5b50505050505050505050505062003684565b8067ffffffffffffffff16600a036200360b57825f6001600160a01b038216639c33abf76200302e8c8c62006eab565b6200303a8d8d62006efe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600160448201526064015f60405180830381865afa158015620030a7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052620030d0919081019062009776565b90505f81806020019051810190620030e9919062009a95565b608001515f815181106200310157620031016200931b565b602002602001015190505f620031188c8c6200735e565b60405162003128929190620098fc565b604051809103902090505f6200313f8d8d62006f12565b8b6040516020016200315392919062009ae7565b60405160208183030381529060405280519060200120905060605f63ab750e7560e01b8985856040516024016200318d9392919062009b0e565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a856200320f426103e862009938565b6040518563ffffffff1660e01b81526004016200323094939291906200994e565b602060405180830381865afa1580156200324c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200327291906200998e565b90506200327f8162007217565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f808252602082018190526060928201839052828201526080810191909152815260200190600190039081620032995790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862003314919062009938565b815260200185815250815f815181106200333257620033326200931b565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b9062003384908490600401620099a6565b5f604051808303815f87803b1580156200339c575f80fd5b505af1158015620033af573d5f803e3d5ffd5b505050505050505f63594924da60e01b898585604051602401620033d69392919062009b0e565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562003458426103e862009938565b6040518563ffffffff1660e01b81526004016200347994939291906200994e565b602060405180830381865afa15801562003495573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620034bb91906200998e565b9050620034c88162007217565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f808252602082018190526060928201839052828201526080810191909152815260200190600190039081620034e25790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e86200355d919062009938565b815260200185815250815f815181106200357b576200357b6200931b565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b90620035cd908490600401620099a6565b5f604051808303815f87803b158015620035e5575f80fd5b505af1158015620035f8573d5f803e3d5ffd5b5050505050505050505050505062003684565b6040517f12cc947f0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906312cc947f9062003654908b908b9060040162009b34565b5f604051808303815f87803b1580156200366c575f80fd5b505af11580156200367f573d5f803e3d5ffd5b505050505b5050505050505050565b5f5b82518110156200377f575f838281518110620036b057620036b06200931b565b602002602001015190505f5b83518110156200377457816001600160a01b031663f0a9e481858381518110620036ea57620036ea6200931b565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff9091166004820152600160248201526044015f604051808303815f87803b15801562003750575f80fd5b505af115801562003763573d5f803e3d5ffd5b505060019092019150620036bc9050565b505060010162003690565b505050565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015620026df578382905f5260205f2090600202016040518060400160405290815f82018054620037da90620094ce565b80601f01602080910402602001604051908101604052809291908181526020018280546200380890620094ce565b8015620038575780601f106200382d5761010080835404028352916020019162003857565b820191905f5260205f20905b8154815290600101906020018083116200383957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015620038f057602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116200389c5790505b50505050508152505081526020019060010190620037a7565b5f365f806200391a8787876200736f565b935093509350935093509350935093565b80515f5b818110156200377f575f8382815181106200394e576200394e6200931b565b602002602001015190505f5b8381101562003af15782811462003ae8575f8582815181106200398157620039816200931b565b602002602001015190505f816001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa158015620039c9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620039ef919062009b49565b6001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003a2b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003a51919062009b67565b9050836001600160a01b0316633400288b8262003a74856001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff92909216600483015260248201526044015f604051808303815f87803b15801562003ace575f80fd5b505af115801562003ae1573d5f803e3d5ffd5b5050505050505b6001016200395a565b50506001016200392f565b61ffff82165f90815260208080526040808320848452909152812060609162003b5382546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b111562003c0a575f62003b6682620073ca565b5f81815260216020526040902080549192509062003b8490620094ce565b80601f016020809104026020016040519081016040528092919081815260200182805462003bb290620094ce565b801562003c015780601f1062003bd75761010080835404028352916020019162003c01565b820191905f5260205f20905b81548152906001019060200180831162003be357829003601f168201915b50505050509250505b5092915050565b63ffffffff85165f908152602360205260409020546001600160a01b031662003c9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f656e64706f696e74206e6f74207965742072656769737465726564000000000060448201526064015b60405180910390fd5b63ffffffff85165f9081526020808052604080832087845290915281209062003cf282546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b90505f855f0362003d36575081546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031662003d4a565b85821162003d45578162003d47565b855b90505b801562003684578062003d5d8162009b85565b9150505f62003d6c8462007473565b5f8181526021602052604081208054929350909162003d8b90620094ce565b80601f016020809104026020016040519081016040528092919081815260200182805462003db990620094ce565b801562003e085780601f1062003dde5761010080835404028352916020019162003e08565b820191905f5260205f20905b81548152906001019060200180831162003dea57829003601f168201915b50506040517f997cff1b000000000000000000000000000000000000000000000000000000008152939450309363997cff1b935062003e509250859150869060040162009a72565b5f6040518083038186803b15801562003e67575f80fd5b505afa15801562003e7a573d5f803e3d5ffd5b50506040517f601978890000000000000000000000000000000000000000000000000000000081523092506360197889915062003ebe9084908a9060040162009bbc565b5f604051808303815f87803b15801562003ed6575f80fd5b505af115801562003ee9573d5f803e3d5ffd5b5050505f83815260226020526040812080549192509062003f0a90620094ce565b80601f016020809104026020016040519081016040528092919081815260200182805462003f3890620094ce565b801562003f875780601f1062003f5d5761010080835404028352916020019162003f87565b820191905f5260205f20905b81548152906001019060200180831162003f6957829003601f168201915b5050505050905062003f9b8160026200751f565b1562004076575f8062003fae8362007534565b604051919350915081905f906001600160a01b0383169085908381818185875af1925050503d805f811462003fff576040519150601f19603f3d011682016040523d82523d5f602084013e62004004565b606091505b505090508062004071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4661696c656420746f2073656e64204574686572000000000000000000000000604482015260640162003c92565b505050505b620040838160016200751f565b15620040f9576040517fec53eaa0000000000000000000000000000000000000000000000000000000008152309063ec53eaa090620040c9908590859060040162009bbc565b5f604051808303815f87803b158015620040e1575f80fd5b505af1158015620040f4573d5f803e3d5ffd5b505050505b620041068160056200751f565b156200417e576040517f0a69faa90000000000000000000000000000000000000000000000000000000081523090630a69faa9906200414e90859085908c9060040162009be4565b5f604051808303815f87803b15801562004166575f80fd5b505af115801562004179573d5f803e3d5ffd5b505050505b6001600160a01b038816158015906200419f57506200419f8160036200751f565b1562004219576040517fa29c8984000000000000000000000000000000000000000000000000000000008152309063a29c898490620041e9908590859088908e9060040162009c2c565b5f604051808303815f87803b15801562004201575f80fd5b505af115801562004214573d5f803e3d5ffd5b505050505b50505062003d4a565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015620026df578382905f5260205f200180546200426590620094ce565b80601f01602080910402602001604051908101604052809291908181526020018280546200429390620094ce565b8015620042e25780601f10620042b857610100808354040283529160200191620042e2565b820191905f5260205f20905b815481529060010190602001808311620042c457829003601f168201915b50505050508152602001906001019062004245565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015620026df575f8481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015620043d857602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620043845790505b505050505081525050815260200190600101906200431a565b5f805f62002872858562007676565b5f6200440d848462006f12565b90508181146200447a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f67756964206e6f74206d61746368000000000000000000000000000000000000604482015260640162003c92565b50505050565b30633bbd6a9462004492878762006d51565b6200449e888862006efe565b868686620044ad8c8c6200735e565b6040518863ffffffff1660e01b8152600401620044d1979695949392919062009c75565b5f604051808303815f87803b158015620044e9575f80fd5b505af1158015620044fc573d5f803e3d5ffd5b505050505050505050565b8060235f836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004548573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200456e919062009b67565b63ffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015620026df575f8481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200469d57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620046495790505b50505050508152505081526020019060010190620045df565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015620026df578382905f5260205f20018054620046f990620094ce565b80601f01602080910402602001604051908101604052809291908181526020018280546200472790620094ce565b8015620047765780601f106200474c5761010080835404028352916020019162004776565b820191905f5260205f20905b8154815290600101906020018083116200475857829003601f168201915b505050505081526020019060010190620046d9565b62000e2e82825f8060405180602001604052805f81525062003c11565b5f80620047b6848462007701565b915091505b9250929050565b6008545f9060ff1615620047da575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa15801562004869573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200488f91906200998e565b1415905090565b8260ff1667ffffffffffffffff811115620048b557620048b56200853e565b604051908082528060200260200182016040528015620048df578160200160208202803683370190505b508051620048f691602591602090910190620081a5565b508260ff1667ffffffffffffffff8111156200491657620049166200853e565b60405190808252806020026020018201604052801562004940578160200160208202803683370190505b508051620049579160269160209091019062008225565b508260ff1667ffffffffffffffff8111156200497757620049776200853e565b604051908082528060200260200182016040528015620049a1578160200160208202803683370190505b508051620049b891602791602090910190620081a5565b508260ff1667ffffffffffffffff811115620049d857620049d86200853e565b60405190808252806020026020018201604052801562004a02578160200160208202803683370190505b50805162004a1991602891602090910190620081a5565b508260ff1667ffffffffffffffff81111562004a395762004a396200853e565b60405190808252806020026020018201604052801562004a63578160200160208202803683370190505b50805162004a7a91602991602090910190620081a5565b5060408051600180825281830190925290602080830190803683375050815162004aac92602a925060200190620081a5565b506040517fffa1864900000000000000000000000000000000000000000000000000000000815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa15801562004b15573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062004b3b919062009b49565b602a80545f9062004b505762004b506200931b565b5f918252602082200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0393909316929092179091555b8360ff168160ff16101562004da8575f62004bae826001620095eb565b60ff1690505f838360ff168151811062004bcc5762004bcc6200931b565b602002602001015190508160256001018460ff168154811062004bf35762004bf36200931b565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055505f6001600160a01b0316816001600160a01b03160362004ccf57813060405162004c4e90620082d3565b63ffffffff90921682526001600160a01b03166020820152604001604051809103905ff08015801562004c83573d5f803e3d5ffd5b506025805460ff861690811062004c9e5762004c9e6200931b565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555062004d64565b81308260405162004ce090620082e1565b63ffffffff90931683526001600160a01b039182166020840152166040820152606001604051809103905ff08015801562004d1d573d5f803e3d5ffd5b506025805460ff861690811062004d385762004d386200931b565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b62004d9d60255f018460ff168154811062004d835762004d836200931b565b5f918252602090912001546001600160a01b031662004507565b505060010162004b91565b503060405162004db890620082ef565b6001600160a01b039091168152602001604051809103905ff08015801562004de2573d5f803e3d5ffd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790555f5b8360ff168160ff161015620067b3575f83600181111562004e425762004e4262009cd7565b0362006585575f60255f018260ff168154811062004e645762004e646200931b565b905f5260205f20015f9054906101000a90046001600160a01b03169050308164e8d4a51000620186a060405162004e9b90620082fd565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff08015801562004ed8573d5f803e3d5ffd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051819062004f21906200830b565b6001600160a01b039091168152602001604051809103905ff08015801562004f4b573d5f803e3d5ffd5b50602c6001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550308164e8d4a51000620186a060405162004f8e9062008319565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff08015801562004fcb573d5f803e3d5ffd5b50602e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556025805460ff84169081106200501e576200501e6200931b565b5f91825260209091200154602c546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b15801562005086575f80fd5b505af115801562005099573d5f803e3d5ffd5b5050505060255f018260ff1681548110620050b857620050b86200931b565b5f91825260209091200154602d546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b15801562005120575f80fd5b505af115801562005133573d5f803e3d5ffd5b5050505060255f018260ff16815481106200515257620051526200931b565b5f91825260209091200154602e546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b158015620051ba575f80fd5b505af1158015620051cd573d5f803e3d5ffd5b5050602c54602780546001600160a01b039092169350915060ff8516908110620051fb57620051fb6200931b565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602d546028805491909216919060ff85169081106200525a576200525a6200931b565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602e546029805491909216919060ff8516908110620052b957620052b96200931b565b5f918252602082200180546001600160a01b03939093167fffffffffffffffffffffffff0000000000000000000000000000000000000000909316929092179091556040805160018082528183019092529081602001602082028036833701905050905030815f815181106200533357620053336200931b565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092525f9290919082016060803683375050602c5482519293506001600160a01b0316918391505f906200539057620053906200931b565b6001600160a01b039283166020918202929092010152602d54825191169082906001908110620053c457620053c46200931b565b6001600160a01b039283166020918202929092010152602e54825191169082906002908110620053f857620053f86200931b565b6001600160a01b039283166020918202929092010152602b5460405185925f928592911690309087906200542c9062008327565b6200543d9695949392919062009d04565b604051809103905ff08015801562005457573d5f803e3d5ffd5b50602f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff8616908110620054aa57620054aa6200931b565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16604051620054dc9062008335565b63ffffffff9091168152602001604051809103905ff08015801562005503573d5f803e3d5ffd5b50603180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602f546040517fc7b2370b00000000000000000000000000000000000000000000000000000000815260048101929092529091169063c7b2370b906024015f604051808303815f87803b15801562005591575f80fd5b505af1158015620055a4573d5f803e3d5ffd5b5050505060256001018460ff1681548110620055c457620055c46200931b565b5f918252602090912060088204015460079091166004026101000a900463ffffffff16620055f4856001620095eb565b602b5460405184916001600160a01b031690602a906001908890620056199062008343565b6200562b979695949392919062009d54565b604051809103905ff08015801562005645573d5f803e3d5ffd5b50603080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff86169081106200569857620056986200931b565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16670de0b6b3a7640000604051620056d39062008351565b63ffffffff90921682526020820152604001604051809103905ff080158015620056ff573d5f803e3d5ffd5b50603280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f39f26dfc000000000000000000000000000000000000000000000000000000008152670de0b6b3a764000060048201819052602482015261271060448201526339f26dfc906064015f604051808303815f87803b1580156200579b575f80fd5b505af1158015620057ae573d5f803e3d5ffd5b50506030546032546040517fc7b2370b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063c7b2370b91506024015f604051808303815f87803b15801562005812575f80fd5b505af115801562005825573d5f803e3d5ffd5b5050505050506200585060405180606001604052806060815260200160608152602001606081525090565b6200585d866001620095eb565b60ff1667ffffffffffffffff8111156200587b576200587b6200853e565b604051908082528060200260200182016040528015620058fa57816020015b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816200589a5790505b5081526200590a866001620095eb565b60ff1667ffffffffffffffff8111156200592857620059286200853e565b6040519080825280602002602001820160405280156200599957816020015b604080516080810182525f8082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181620059475790505b506020820152620059ac866001620095eb565b60ff1667ffffffffffffffff811115620059ca57620059ca6200853e565b60405190808252806020026020018201604052801562005a1057816020015b604080518082019091525f8082526020820152815260200190600190039081620059e95790505b50604082810191909152805160018082528183019092525f91602080830190803683375050604080515f80825260208201909252603054845194955090936001600160a01b03909116925084919062005a6d5762005a6d6200931b565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5b8860ff168160ff1610156200611f578060ff168660ff16031562006116575f62005abb826001620095eb565b60408051600180825281830190925260ff9290921692505f9190816020015b62005ae46200835f565b81526020019060019003908162005ada5790505090505f6040518060c00160405280606467ffffffffffffffff168152602001875160ff168152602001865160ff1681526020015f60ff16815260200187815260200186815250905060405180604001604052808463ffffffff16815260200182815250825f8151811062005b705762005b706200931b565b6020908102919091010152602c546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906329460b0b9062005bc690859060040162009e01565b5f604051808303815f87803b15801562005bde575f80fd5b505af115801562005bf1573d5f803e3d5ffd5b5050602d546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329460b0b915062005c4090859060040162009e01565b5f604051808303815f87803b15801562005c58575f80fd5b505af115801562005c6b573d5f803e3d5ffd5b505f92506001915062005c7b9050565b60405190808252806020026020018201604052801562005cb857816020015b62005ca4620083c4565b81526020019060019003908162005c9a5790505b506040805180820182526127108152602f546001600160a01b0316602080830191909152825180840190935263ffffffff88168352820181905282519293509183905f9062005d0b5762005d0b6200931b565b6020908102919091010152602c546040517fc14c43490000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c14c43499062005d6190859060040162009efc565b5f604051808303815f87803b15801562005d79575f80fd5b505af115801562005d8c573d5f803e3d5ffd5b50506040805160c08101825263ffffffff89168152611388602082018190529181019190915261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a08201528b518051919550935060ff891692508210905062005e015762005e016200931b565b602002602001018190525060405180608001604052808463ffffffff16815260200161138867ffffffffffffffff16815260200161271061ffff1681526020016402540be4006fffffffffffffffffffffffffffffffff1681525087602001518560ff168151811062005e785762005e786200931b565b602002602001018190525060405180604001604052808463ffffffff168152602001600381525087604001518560ff168151811062005ebb5762005ebb6200931b565b60200260200101819052505f60256006015f9054906101000a90046001600160a01b03166001600160a01b031663c18403276040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005f1b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062005f41919062009f6c565b6040805160018082528183019092529192505f9190816020015b62005f8e6040805180820182525f8082528251606081018452818152602081810183905293810191909152909182015290565b81526020019060019003908162005f5b57905050905060405180604001604052808663ffffffff168152602001604051806060016040528085600162005fd5919062009f8a565b6fffffffffffffffffffffffffffffffff1681526001602082018190526040909101529052815182905f906200600f576200600f6200931b565b6020908102919091010152602b546040517f3161b7f60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690633161b7f6906200606590849060040162009fc1565b5f604051808303815f87803b1580156200607d575f80fd5b505af115801562006090573d5f803e3d5ffd5b5050602b546040517f5d6d7ccb00000000000000000000000000000000000000000000000000000000815268056bc75e2d6310000060048201526001600160a01b039091169250635d6d7ccb91506024015f604051808303815f87803b158015620060f9575f80fd5b505af11580156200610c573d5f803e3d5ffd5b5050505050505050505b60010162005a8f565b506040805160018082528183019092525f91816020015b6200614062008406565b815260200190600190039081620061365750506040805160c081018252602f546001600160a01b03168152855160ff9081166020808401919091528651909116828401525f606083018190526080830188905260a08301879052835180850190945262011171845290830182905283519394509092849190620061c757620061c76200931b565b6020908102919091010152602e546040517fc85f4b4e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c85f4b4e906200621d9085906004016200a03e565b5f604051808303815f87803b15801562006235575f80fd5b505af115801562006248573d5f803e3d5ffd5b5050505050506040518060c0016040528060256001018760ff16815481106200627557620062756200931b565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff168252611388908201819052604082015261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a0909101528351805160ff8b16908110620062f157620062f16200931b565b6020026020010181905250604051806080016040528060256001018760ff16815481106200632357620063236200931b565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff1682526113888282015261271060408301526402540be400606090920191909152840151805160ff8b169081106200638257620063826200931b565b6020026020010181905250604051806040016040528060256001018760ff1681548110620063b457620063b46200931b565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff16825260039101526040840151805160ff8b16908110620063fc57620063fc6200931b565b6020908102919091010152602f5483516040517f3d85ac330000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691633d85ac339162006452916004016200a138565b5f604051808303815f87803b1580156200646a575f80fd5b505af11580156200647d573d5f803e3d5ffd5b505060305460208601516040517f52d3b8710000000000000000000000000000000000000000000000000000000081526001600160a01b0390921693506352d3b8719250620064cf916004016200a1d3565b5f604051808303815f87803b158015620064e7575f80fd5b505af1158015620064fa573d5f803e3d5ffd5b505060325460408087015190517ff5ff608f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909216935063f5ff608f92506200654c916004016200a251565b5f604051808303815f87803b15801562006564575f80fd5b505af115801562006577573d5f803e3d5ffd5b5050505050505050620067aa565b60018360018111156200659c576200659c62009cd7565b0362006747575f3060255f018360ff1681548110620065bf57620065bf6200931b565b5f918252602090912001546040516001600160a01b0390911690620065e49062008465565b6001600160a01b03928316815291166020820152604001604051809103905ff08015801562006615573d5f803e3d5ffd5b50905060255f018260ff16815481106200663357620066336200931b565b5f918252602090912001546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063e8964e81906024015f604051808303815f87803b15801562006699575f80fd5b505af1158015620066ac573d5f803e3d5ffd5b505050508060256002018360ff1681548110620066cd57620066cd6200931b565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060256003018360ff16815481106200671557620067156200931b565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555050620067aa565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206c6962726172792074797065000000000000000000000000604482015260640162003c92565b60010162004e1d565b505f5b8360ff168160ff1610156200447a575f60255f018260ff1681548110620067e157620067e16200931b565b5f9182526020822001546001600160a01b031691508460018111156200680b576200680b62009cd7565b036200697c57806001600160a01b031663aafea3126201117160256004018560ff16815481106200684057620068406200931b565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b158015620068ad575f80fd5b505af1158015620068c0573d5f803e3d5ffd5b50505050806001600160a01b031663a718531b6201117160256004018560ff1681548110620068f357620068f36200931b565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b15801562006964575f80fd5b505af115801562006977573d5f803e3d5ffd5b505050505b5f5b8560ff168160ff16101562006b1a578060ff168360ff16031562006b11576001600160a01b03821663aafea312620069b8836001620095eb565b6027805460ff8816908110620069d257620069d26200931b565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b15801562006a3c575f80fd5b505af115801562006a4f573d5f803e3d5ffd5b50505050816001600160a01b031663a718531b82600162006a719190620095eb565b6028805460ff881690811062006a8b5762006a8b6200931b565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b15801562006af9575f80fd5b505af115801562006b0c573d5f803e3d5ffd5b505050505b6001016200697e565b5050600101620067b6565b606060158054806020026020016040519081016040528092919081815260200182805480156200247d57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116200245e575050505050905090565b5f60235f62006b95868662006d51565b63ffffffff16815260208101919091526040015f908120546001600160a01b031691508062006bc48462007764565b915091505f604051806060016040528062006be0898962006eab565b63ffffffff16815260200162006bf7898962006ebc565b815260200162006c08898962006ed8565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e84848462006c348c8c62006efe565b62006c408d8d62006f12565b62006c4c8e8e6200735e565b60405180602001604052805f8152506040518963ffffffff1660e01b815260040162006c7e969594939291906200a29a565b5f604051808303818589803b15801562006c96575f80fd5b5088f115801562006ca9573d5f803e3d5ffd5b50505050505050505050505050565b5f80620047b68484620078a7565b5f62006cd3858562006d51565b90505f62006ce2868662007921565b63ffffffff83165f90815260208080526040808320848452909152812091925062006d0e888862006f12565b905062006d1c828262007932565b5f81815260216020526040902062006d36888a836200a35f565b505f818152602260205260409020620044fc8688836200a35f565b5f62006d626031602d84866200a464565b62006d6d916200a48d565b60e01c9392505050565b5f805f805f62006d89866005620079e4565b915091508162006e1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f7074696f6e7348656c7065723a206c7a52656164206f7074696f6e206e6f7460448201527f20666f756e640000000000000000000000000000000000000000000000000000606482015260840162003c92565b6040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca869062006e5a90849060040162008730565b606060405180830381865afa15801562006e76573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062006e9c91906200a4d4565b94509450945050509193909250565b5f62006d62600d600984866200a464565b5f62006ecd602d600d84866200a464565b62002599916200a51a565b5f62006ee96009600184866200a464565b62006ef4916200a557565b60c01c9392505050565b5f6200259962006f0f848462007921565b90565b5f62006ecd6071605184866200a464565b62006f2d6200803f565b565b6040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015f604051808303815f87803b15801562006fa2575f80fd5b505af115801562006fb5573d5f803e3d5ffd5b505050505050565b5f808360405160200162006fd291906200a59e565b60408051601f198184030181529082905262006ff39185906020016200a5bb565b60405160208183030381529060405290508051602082015ff09150813b62003c0a575f80fd5b5f805f805f6200702b866003620079e4565b9150915081620070be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a436f6d706f7365206f7074696f6e2060448201527f6e6f7420666f756e640000000000000000000000000000000000000000000000606482015260840162003c92565b6040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab090620070fc90849060040162008730565b606060405180830381865afa15801562007118573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200713e91906200a5ed565b91986fffffffffffffffffffffffffffffffff9182169850911695509350505050565b5f80806012841480159062007177575060228414155b15620071af576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620071bc85855f62008090565b9250620071cc85856002620080ba565b915060228414620071de575f620071ec565b620071ec85856012620080ba565b90509250925092565b365f620047b660518285876200a464565b365f620047b683605181876200a464565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290526060905f90605c0160408051601f198184030181529082905280516020909101207fe341eaa4000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291505f9081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e341eaa490604401606060405180830381865afa158015620072dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200730291906200a620565b6040805160208101939093528281019190915260f89290921b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260619091019091529695505050505050565b365f620047b683607181876200a464565b5f368160018401816200738488888462008090565b6002929092019190506200739a888884620080e4565b94506001820161ffff82168301620073b581838b8d6200a464565b979b909a50969850505061ffff160193505050565b5f620073ff825470010000000000000000000000000000000081046fffffffffffffffffffffffffffffffff90811691161490565b1562007411576200741160326200810b565b5080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909204821601165f9081526001909101602052604090205490565b80545f906fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811691168103620074b357620074b360316200810b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016fffffffffffffffffffffffffffffffff9081165f818152600185016020526040812080549190558454909216700100000000000000000000000000000000909102179092555090565b5f6200752c8383620079e4565b509392505050565b5f805f8062007545856002620079e4565b9150915081620075d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696f6e7348656c7065723a206e617469766544726f70206f7074696f6e60448201527f206e6f7420666f756e6400000000000000000000000000000000000000000000606482015260840162003c92565b6040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf6906200761690849060040162008730565b6040805180830381865afa15801562007631573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200765791906200a657565b6fffffffffffffffffffffffffffffffff909116969095509350505050565b5f8080601484148015906200768c575060248414155b15620076c4576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620076d185855f620080ba565b9250620076e1858560106200811c565b915060248414620076f3575f620071ec565b620071ec85856014620080ba565b5f80603083146200773e576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200774b84845f620080ba565b91506200775b8484601062008146565b90509250929050565b5f805f8062007775856001620079e4565b915091508162007808576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a52656365697665206f7074696f6e2060448201527f6e6f7420666f756e640000000000000000000000000000000000000000000000606482015260840162003c92565b6040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d61906200784690849060040162008730565b6040805180830381865afa15801562007861573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200788791906200a686565b6fffffffffffffffffffffffffffffffff91821697911695509350505050565b5f8060108314801590620078bc575060208314155b15620078f4576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200790184845f620080ba565b91506020831462007913575f6200775b565b6200775b84846010620080ba565b5f62006ecd6051603184866200a464565b81546fffffffffffffffffffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0191700100000000000000000000000000000000900481169082160362007996576200799660416200810b565b6fffffffffffffffffffffffffffffffff165f81815260018401602052604090209190915581547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016179055565b601f546040517fe5c5e9a30000000000000000000000000000000000000000000000000000000081525f91606091839161010090046001600160a01b03169063e5c5e9a39062007a3990889060040162008730565b5f60405180830381865afa15801562007a54573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405262007a7d91908101906200a6b8565b50604080515f80825260208201909252919250908190819081905b855185101562008014576040517f6e1775e30000000000000000000000000000000000000000000000000000000081525f90819081903090636e1775e39062007ae8908c908c9060040162009a72565b5f60405180830381865afa15801562007b03573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405262007b2c91908101906200a71f565b9250925092508b60ff168360ff160362008009575f808080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff89160162007c71576040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d619062007bae908a9060040162008730565b6040805180830381865afa15801562007bc9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062007bef91906200a686565b909550935062007c00858d6200a77b565b9b5062007c0e848c6200a77b565b9a508b8b60405160200162007c5a929190608092831b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000090811682529190921b16601082015260200190565b604051602081830303815290604052985062008003565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff89160162007d6e576040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf69062007cda908a9060040162008730565b6040805180830381865afa15801562007cf5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062007d1b91906200a657565b909450925062007d2c848c6200a77b565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b16602082015260308101859052909b5060500162007c5a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff89160162007eab576040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab09062007dd7908a9060040162008730565b606060405180830381865afa15801562007df3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062007e1991906200a5ed565b9096509450915062007e2c858d6200a77b565b9b5062007e3a848c6200a77b565b6040517fffff00000000000000000000000000000000000000000000000000000000000060f085901b1660208201527fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b8216602284015283901b166032820152909b5060420162007c5a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff89160162008003576040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca869062007f14908a9060040162008730565b606060405180830381865afa15801562007f30573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062007f5691906200a4d4565b919650909450905062007f6a848c6200a77b565b9a5062007f78858d6200a77b565b9b5062007f86818b6200a7a7565b6040517fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b821660208401527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1660308401528e901b166034820152909a5060440160405160208183030381529060405298505b50505050505b965062007a98915050565b80515f036200802e575f97509550620047bb945050505050565b60019a909950975050505050505050565b6040516200804d9062008473565b604051809103905ff08015801562008067573d5f803e3d5ffd5b50601f60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550565b5f60028201620080a3818486886200a464565b620080ae916200a7c7565b60f01c95945050505050565b5f60108201620080cd818486886200a464565b620080d8916200a80e565b60801c95945050505050565b5f838383818110620080fa57620080fa6200931b565b919091013560f81c95945050505050565b634e487b715f52806020526024601cfd5b5f600482016200812f818486886200a464565b6200813a916200a48d565b60e01c95945050505050565b5f6020820162008159818486886200a464565b62008164916200a51a565b95945050505050565b613f7b806200a85683390190565b611b1c806200e7d183390190565b61355f80620102ed83390190565b6124be806201384c83390190565b828054828255905f5260205f2090810192821562008213579160200282015b828111156200821357825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909116178255602090920191600190910190620081c4565b506200822192915062008481565b5090565b828054828255905f5260205f209060070160089004810192821562008213579160200282015f5b838211156200829257835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026200824c565b8015620082c45782816101000a81549063ffffffff021916905560040160208160030104928301926001030262008292565b50506200822192915062008481565b615fc28062015d0a83390190565b616193806201bccc83390190565b61196d8062021e5f83390190565b61588180620237cc83390190565b612b7c806202904d83390190565b615cb2806202bbc983390190565b613af9806203187b83390190565b611b50806203537483390190565b614aae8062036ec483390190565b612470806203b97283390190565b60405180604001604052805f63ffffffff168152602001620083bf6040518060c001604052805f67ffffffffffffffff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b905290565b60405180604001604052805f63ffffffff168152602001620083bf60405180604001604052805f63ffffffff1681526020015f6001600160a01b031681525090565b60405180604001604052805f63ffffffff168152602001620083bf6040518060c001604052805f6001600160a01b031681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b611e15806203dde283390190565b610aa9806203fbf783390190565b5b8082111562008221575f815560010162008482565b63ffffffff81168114620084a9575f80fd5b50565b6001600160a01b0381168114620084a9575f80fd5b5f8060408385031215620084d3575f80fd5b8235620084e08162008497565b91506020830135620084f281620084ac565b809150509250929050565b5f8083601f8401126200850e575f80fd5b50813567ffffffffffffffff81111562008526575f80fd5b602083019150836020828501011115620047bb575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156200859157620085916200853e565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715620085c357620085c36200853e565b604052919050565b5f67ffffffffffffffff821115620085e757620085e76200853e565b50601f01601f191660200190565b5f82601f83011262008605575f80fd5b81356200861c6200861682620085cb565b62008597565b81815284602083860101111562008631575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f806060858703121562008661575f80fd5b843567ffffffffffffffff8082111562008679575f80fd5b6200868788838901620084fd565b90965094506020870135915080821115620086a0575f80fd5b620086ae88838901620085f5565b93506040870135915080821115620086c4575f80fd5b50620086d387828801620085f5565b91505092959194509250565b5f5b83811015620086fb578181015183820152602001620086e1565b50505f910152565b5f81518084526200871c816020860160208601620086df565b601f01601f19169290920160200192915050565b602081525f62002599602083018462008703565b60ff81168114620084a9575f80fd5b80356002811062008762575f80fd5b919050565b5f806040838503121562008779575f80fd5b8235620087868162008744565b91506200775b6020840162008753565b5f815180845260208085019450602084015f5b83811015620087d05781516001600160a01b031687529582019590820190600101620087a9565b509495945050505050565b602081525f62002599602083018462008796565b5f805f6060848603121562008802575f80fd5b833567ffffffffffffffff81111562008819575f80fd5b6200882786828701620085f5565b93505060208401356200883a8162008744565b915060408401356200884c8162008744565b809150509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b84811015620088a657601f198684030189526200889383835162008703565b9884019892509083019060010162008874565b5090979650505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101562008944578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b03168452870151878401879052620089308785018262008857565b9588019593505090860190600101620088da565b509098975050505050505050565b5f805f805f805f60c0888a03121562008969575f80fd5b8735620089768162008497565b965060208801356200898881620084ac565b9550604088013567ffffffffffffffff80821115620089a5575f80fd5b620089b38b838c01620085f5565b965060608a0135955060808a01359150620089ce82620084ac565b90935060a08901359080821115620089e4575f80fd5b50620089f38a828b01620084fd565b989b979a50959850939692959293505050565b5f806020838503121562008a18575f80fd5b823567ffffffffffffffff81111562008a2f575f80fd5b62008a3d85828601620084fd565b90969095509350505050565b61ffff81168114620084a9575f80fd5b5f806040838503121562008a6b575f80fd5b823562008a788162008a49565b946020939093013593505050565b5f805f6040848603121562008a99575f80fd5b833567ffffffffffffffff8082111562008ab1575f80fd5b62008abf87838801620084fd565b9095509350602086013591508082111562008ad8575f80fd5b5062008ae786828701620085f5565b9150509250925092565b5f67ffffffffffffffff82111562008b0d5762008b0d6200853e565b5060051b60200190565b5f82601f83011262008b27575f80fd5b8135602062008b3a620086168362008af1565b8083825260208201915060208460051b87010193508684111562008b5c575f80fd5b602086015b8481101562008b8557803562008b7781620084ac565b835291830191830162008b61565b509695505050505050565b5f806040838503121562008ba2575f80fd5b823567ffffffffffffffff8082111562008bba575f80fd5b62008bc88683870162008b17565b935060209150818501358181111562008bdf575f80fd5b85019050601f8101861362008bf2575f80fd5b803562008c03620086168262008af1565b81815260059190911b8201830190838101908883111562008c22575f80fd5b928401925b8284101562008c4d57833562008c3d8162008497565b8252928401929084019062008c27565b80955050505050509250929050565b5f815180845260208085019450602084015f5b83811015620087d05781517fffffffff00000000000000000000000000000000000000000000000000000000168752958201959082019060010162008c6f565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101562008944577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151805187855262008d1b8886018262008703565b91890151858303868b015291905062008d35818362008c5c565b96890196945050509086019060010162008cd6565b5f805f6040848603121562008d5d575f80fd5b833567ffffffffffffffff81111562008d74575f80fd5b62008d8286828701620084fd565b909790965060209590950135949350505050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b60ff85168152606060208201525f62008ddd60608301858762008d96565b905082604083015295945050505050565b5f6020828403121562008dff575f80fd5b813567ffffffffffffffff81111562008e16575f80fd5b62008e248482850162008b17565b949350505050565b5f805f805f60a0868803121562008e41575f80fd5b853562008e4e8162008497565b94506020860135935060408601359250606086013562008e6e81620084ac565b9150608086013567ffffffffffffffff81111562008e8a575f80fd5b62008e9888828901620085f5565b9150509295509295909350565b602081525f62002599602083018462008857565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101562008944578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b0316845287015187840187905262008f368785018262008c5c565b958801959350509086019060010162008ee0565b5f805f805f6080868803121562008f5f575f80fd5b853567ffffffffffffffff8082111562008f77575f80fd5b62008f8589838a01620084fd565b9097509550602088013591508082111562008f9e575f80fd5b5062008fad88828901620085f5565b93505060408601359150606086013562008fc781620084ac565b809150509295509295909350565b5f6020828403121562008fe6575f80fd5b81356200259981620084ac565b5f806040838503121562009005575f80fd5b823562008a788162008497565b5f805f6060848603121562009025575f80fd5b8335620090328162008744565b9250620090426020850162008753565b9150604084013567ffffffffffffffff8111156200905e575f80fd5b62008ae78682870162008b17565b6fffffffffffffffffffffffffffffffff81168114620084a9575f80fd5b5f602082840312156200909b575f80fd5b813562002599816200906c565b5f805f8060408587031215620090bc575f80fd5b843567ffffffffffffffff80821115620090d4575f80fd5b620090e288838901620084fd565b90965094506020870135915080821115620090fb575f80fd5b506200910a87828801620084fd565b95989497509550505050565b855163ffffffff1681526020808701519082015260408087015167ffffffffffffffff16908201526001600160a01b038516606082015283608082015260e060a08201525f6200916a60e083018562008703565b82810360c08401526200917e818562008703565b98975050505050505050565b608081525f620091c760808301600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200920481600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b0380851660408401528084166060840152509392505050565b608081525f6200926460808301600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200920481600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b608081525f620092de60808301600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200920481600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b606081525f6200938560608301600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b8281036020840152620093c281600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b038316604083015292915050565b608081525f6200941760808301600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200920481600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b608081525f6200949160808301600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200920481600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b600181811c90821680620094e357607f821691505b6020821081036200951b577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101562008944578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052620095a98186018362008703565b96890196945050509086019060010162009548565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff8181168382160190811115620028d957620028d9620095be565b60ff8281168282160390811115620028d957620028d9620095be565b5f6001600160a01b03808a16835280891660208401525086604083015261ffff8616606083015260c060808301526200966160c08301858762008d96565b82810360a084015262009675818562008703565b9a9950505050505050505050565b80516200876281620084ac565b5f8060408385031215620096a2575f80fd5b8251620096af81620084ac565b60208401519092508015158114620084f2575f80fd5b805167ffffffffffffffff8116811462008762575f80fd5b8051620087628162008744565b5f805f60608486031215620096fd575f80fd5b6200970884620096c5565b925060208401516200971a8162008744565b60408501519092506200884c8162008744565b5f82601f8301126200973d575f80fd5b81516200974e6200861682620085cb565b81815284602083860101111562009763575f80fd5b62008e24826020830160208701620086df565b5f6020828403121562009787575f80fd5b815167ffffffffffffffff8111156200979e575f80fd5b62008e24848285016200972d565b5f82601f830112620097bc575f80fd5b81516020620097cf620086168362008af1565b8083825260208201915060208460051b870101935086841115620097f1575f80fd5b602086015b8481101562008b855780516200980c81620084ac565b8352918301918301620097f6565b5f602082840312156200982b575f80fd5b815167ffffffffffffffff8082111562009843575f80fd5b9083019060c0828603121562009857575f80fd5b620098616200856b565b6200986c83620096c5565b81526200987c60208401620096dd565b60208201526200988f60408401620096dd565b6040820152620098a260608401620096dd565b6060820152608083015182811115620098b9575f80fd5b620098c787828601620097ac565b60808301525060a083015182811115620098df575f80fd5b620098ed87828601620097ac565b60a08301525095945050505050565b818382375f9101908152919050565b606081525f6200991f606083018662008703565b905083602083015260ff83166040830152949350505050565b80820180821115620028d957620028d9620095be565b63ffffffff851681526001600160a01b0384166020820152608060408201525f6200997d608083018562008703565b905082606083015295945050505050565b5f602082840312156200999f575f80fd5b5051919050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101562008944577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160a063ffffffff82511685526001600160a01b0389830151168986015287820151818987015262009a338287018262008703565b91505060608083015181870152506080808301519250858203818701525062009a5d818362008703565b968901969450505090860190600101620099cd565b604081525f62009a86604083018562008703565b90508260208301529392505050565b5f6020828403121562009aa6575f80fd5b815167ffffffffffffffff8082111562009abe575f80fd5b9083019060c0828603121562009ad2575f80fd5b62009adc6200856b565b6200986c8362009683565b8281525f825162009b00816020850160208701620086df565b919091016020019392505050565b606081525f62009b22606083018662008703565b60208301949094525060400152919050565b602081525f62008e2460208301848662008d96565b5f6020828403121562009b5a575f80fd5b81516200259981620084ac565b5f6020828403121562009b78575f80fd5b8151620025998162008497565b5f8162009b965762009b96620095be565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b604081525f62009bd0604083018562008703565b828103602084015262008164818562008703565b606081525f62009bf8606083018662008703565b828103602084015262009c0c818662008703565b9050828103604084015262009c22818562008703565b9695505050505050565b608081525f62009c40608083018762008703565b828103602084015262009c54818762008703565b9150508360408301526001600160a01b038316606083015295945050505050565b63ffffffff881681525f6001600160a01b03808916602084015260c0604084015262009ca560c084018962008703565b876060850152818716608085015283810360a085015262009cc881868862008d96565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f6001600160a01b038089168352808816602084015260c0604084015262009d3060c084018862008796565b8187166060850152818616608085015283810360a085015262009675818662008796565b63ffffffff881681525f602060ff8916602084015260e0604084015262009d7f60e084018962008796565b6001600160a01b038881166060860152848203608086015287548083525f8981526020808220940191905b8181101562009dca57845484168352600194850194928601920162009daa565b505067ffffffffffffffff881660a087015285810360c087015262009df0818862008796565b9d9c50505050505050505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101562008944577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff168552880151888501889052805167ffffffffffffffff16888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c0808801529062009eca61010088018362008796565b920151868303840160e088015291905062009ee6818362008796565b978a019795505050918701915060010162009e28565b602080825282518282018190525f919060409081850190868401855b8281101562009f5f578151805163ffffffff9081168652908701518051909116878601528601516001600160a01b0316858501526060909301929085019060010162009f18565b5091979650505050505050565b5f6020828403121562009f7d575f80fd5b815162002599816200906c565b6fffffffffffffffffffffffffffffffff81811683821602808216919082811462009fb95762009fb9620095be565b505092915050565b602080825282518282018190525f919060409081850190868401855b8281101562009f5f578151805163ffffffff90811686529087015180516fffffffffffffffffffffffffffffffff16888701528088015167ffffffffffffffff16878701528601511660608501526080909301929085019060010162009fdd565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101562008944577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff16855288015188850188905280516001600160a01b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200a10661010088018362008796565b920151868303840160e08801529190506200a122818362008796565b978a01979550505091870191506001016200a065565b602080825282518282018190525f919060409081850190868401855b8281101562009f5f578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c090930192908501906001016200a154565b602080825282518282018190525f919060409081850190868401855b8281101562009f5f578151805163ffffffff1685528681015167ffffffffffffffff16878601528581015161ffff16868601526060908101516fffffffffffffffffffffffffffffffff1690850152608090930192908501906001016200a1ef565b602080825282518282018190525f919060409081850190868401855b8281101562009f5f578151805163ffffffff1685528601518685015292840192908501906001016200a26d565b865163ffffffff1681526020808801519082015260408088015167ffffffffffffffff16908201526001600160a01b038616606082015284608082015260e060a08201525f6200a2ef60e08301858762008d96565b82810360c08401526200a303818562008703565b9998505050505050505050565b601f8211156200377f57805f5260205f20601f840160051c810160208510156200a3375750805b601f840160051c820191505b818110156200a358575f81556001016200a343565b5050505050565b67ffffffffffffffff8311156200a37a576200a37a6200853e565b6200a392836200a38b8354620094ce565b836200a310565b5f601f8411600181146200a3e5575f85156200a3ae5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556200a358565b5f83815260208120601f198716915b828110156200a41657868501358255602094850194600190920191016200a3f4565b50868210156200a452577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f80858511156200a473575f80fd5b838611156200a480575f80fd5b5050820193919092039150565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101562009fb95760049490940360031b84901b1690921692915050565b5f805f606084860312156200a4e7575f80fd5b83516200a4f4816200906c565b60208501519093506200a5078162008497565b60408501519092506200884c816200906c565b80356020831015620028d9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff000000000000000000000000000000000000000000000000813581811691600885101562009fb95760089490940360031b84901b1690921692915050565b5f82516200a5b1818460208701620086df565b9190910192915050565b5f83516200a5ce818460208801620086df565b8351908301906200a5e4818360208801620086df565b01949350505050565b5f805f606084860312156200a600575f80fd5b83516200a60d8162008a49565b60208501519093506200a507816200906c565b5f805f606084860312156200a633575f80fd5b83516200a6408162008744565b602085015160409095015190969495509392505050565b5f80604083850312156200a669575f80fd5b82516200a676816200906c565b6020939093015192949293505050565b5f80604083850312156200a698575f80fd5b82516200a6a5816200906c565b6020840151909250620084f2816200906c565b5f80604083850312156200a6ca575f80fd5b825167ffffffffffffffff808211156200a6e2575f80fd5b6200a6f0868387016200972d565b935060208501519150808211156200a706575f80fd5b506200a715858286016200972d565b9150509250929050565b5f805f606084860312156200a732575f80fd5b83516200a73f8162008744565b602085015190935067ffffffffffffffff8111156200a75c575f80fd5b6200a76a868287016200972d565b925050604084015190509250925092565b6fffffffffffffffffffffffffffffffff81811683821601908082111562003c0a5762003c0a620095be565b63ffffffff81811683821601908082111562003c0a5762003c0a620095be565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101562009fb95760029490940360031b84901b1690921692915050565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000813581811691601085101562009fb95760109490940360031b84901b169092169291505056fe60c060405234801562000010575f80fd5b5060405162003f7b38038062003f7b8339810160408190526200003391620002c2565b83838383838360128484818181818d6001600160a01b0381166200007057604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200007b8162000191565b506001600160a01b038083166080528116620000aa57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b158015620000ef575f80fd5b505af115801562000102573d5f803e3d5ffd5b50505050505050506200011a620001e060201b60201c565b60ff168360ff16101562000141576040516301e9714b60e41b815260040160405180910390fd5b6200014e60068462000360565b6200015b90600a6200047b565b60a052506008915062000171905083826200051c565b5060096200018082826200051c565b5050505050505050505050620005e8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000209575f80fd5b81516001600160401b0380821115620002265762000226620001e5565b604051601f8301601f19908116603f01168101908282118183101715620002515762000251620001e5565b81604052838152602092508660208588010111156200026e575f80fd5b5f91505b8382101562000291578582018301518183018401529082019062000272565b5f602085830101528094505050505092915050565b80516001600160a01b0381168114620002bd575f80fd5b919050565b5f805f8060808587031215620002d6575f80fd5b84516001600160401b0380821115620002ed575f80fd5b620002fb88838901620001f9565b9550602087015191508082111562000311575f80fd5b506200032087828801620001f9565b9350506200033160408601620002a6565b91506200034160608601620002a6565b905092959194509250565b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156200037c576200037c6200034c565b92915050565b600181815b80851115620003c257815f1904821115620003a657620003a66200034c565b80851615620003b457918102915b93841c939080029062000387565b509250929050565b5f82620003da575060016200037c565b81620003e857505f6200037c565b81600181146200040157600281146200040c576200042c565b60019150506200037c565b60ff8411156200042057620004206200034c565b50506001821b6200037c565b5060208310610133831016604e8410600b841016171562000451575081810a6200037c565b6200045d838362000382565b805f19048211156200047357620004736200034c565b029392505050565b5f6200048b60ff841683620003ca565b9392505050565b600181811c90821680620004a757607f821691505b602082108103620004c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200051757805f5260205f20601f840160051c81016020851015620004f35750805b601f840160051c820191505b8181101562000514575f8155600101620004ff565b50505b505050565b81516001600160401b03811115620005385762000538620001e5565b620005508162000549845462000492565b84620004cc565b602080601f83116001811462000586575f84156200056e5750858301515b5f19600386901b1c1916600185901b178555620005e0565b5f85815260208120601f198616915b82811015620005b65788860151825594840194600190910190840162000595565b5085821015620005d457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60805160a05161392b620006505f395f81816106f301528181611f9b0152818161200d015261229a01525f81816105a301528181610b5901528181611296015281816115bc01528181611a17015281816123ee0152818161251301526125fb015261392b5ff3fe6080604052600436106102d7575f3560e01c80637d25a05e1161017b578063bb0b6a53116100d1578063d045a0dc11610087578063f2fde38b11610062578063f2fde38b146108d0578063fc0c546a1461052c578063ff7bd03d146108ef575f80fd5b8063d045a0dc1461084d578063d424388514610860578063dd62ed3e1461087f575f80fd5b8063bd815db0116100b7578063bd815db0146107fa578063c7c7f5b31461080d578063ca5eb5e11461082e575f80fd5b8063bb0b6a53146107b0578063bc70b354146107db575f80fd5b8063963efcaa11610131578063a9059cbb1161010c578063a9059cbb14610746578063b731ea0a14610765578063b98bd07014610791575f80fd5b8063963efcaa146106e25780639dc29fac146107155780639f68b96414610734575f80fd5b8063857749b011610161578063857749b0146106925780638da5cb5b146106a557806395d89b41146106ce575f80fd5b80637d25a05e1461063957806382413eac14610673575f80fd5b8063313ce567116102305780635535d461116101e65780636fc1b31e116101c15780636fc1b31e146105c557806370a08231146105e4578063715018a614610625575f80fd5b80635535d4611461053e5780635a0dfe4d1461055d5780635e280f1114610592575f80fd5b80633b6f743b116102165780633b6f743b146104e157806340c10f191461050d57806352ae28791461052c575f80fd5b8063313ce567146104a15780633400288b146104c2575f80fd5b8063134d4f251161029057806318160ddd1161026b57806318160ddd146104505780631f5e13341461046e57806323b872dd14610482575f80fd5b8063134d4f25146103c8578063156a0d0f146103ef57806317442b701461042f575f80fd5b80630d35b415116102c05780630d35b41514610334578063111ecdad1461036257806313137d65146103b3575f80fd5b806306fdde03146102db578063095ea7b314610305575b5f80fd5b3480156102e6575f80fd5b506102ef61090e565b6040516102fc91906127f6565b60405180910390f35b348015610310575f80fd5b5061032461031f366004612829565b61099e565b60405190151581526020016102fc565b34801561033f575f80fd5b5061035361034e366004612869565b6109b7565b6040516102fc9392919061289b565b34801561036d575f80fd5b5060045461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102fc565b6103c66103c13660046129a5565b610b57565b005b3480156103d3575f80fd5b506103dc600281565b60405161ffff90911681526020016102fc565b3480156103fa575f80fd5b50604080517f02e49c2c00000000000000000000000000000000000000000000000000000000815260016020820152016102fc565b34801561043a575f80fd5b50604080516001815260026020820152016102fc565b34801561045b575f80fd5b506007545b6040519081526020016102fc565b348015610479575f80fd5b506103dc600181565b34801561048d575f80fd5b5061032461049c366004612a3e565b610c56565b3480156104ac575f80fd5b5060125b60405160ff90911681526020016102fc565b3480156104cd575f80fd5b506103c66104dc366004612a94565b610c7b565b3480156104ec575f80fd5b506105006104fb366004612abb565b610c91565b6040516102fc9190612b0a565b348015610518575f80fd5b506103c6610527366004612829565b610cf5565b348015610537575f80fd5b503061038e565b348015610549575f80fd5b506102ef610558366004612b32565b610cff565b348015610568575f80fd5b50610324610577366004612a94565b63ffffffff919091165f908152600160205260409020541490565b34801561059d575f80fd5b5061038e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d0575f80fd5b506103c66105df366004612b63565b610da1565b3480156105ef575f80fd5b506104606105fe366004612b63565b73ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604090205490565b348015610630575f80fd5b506103c6610e23565b348015610644575f80fd5b5061065a610653366004612a94565b5f92915050565b60405167ffffffffffffffff90911681526020016102fc565b34801561067e575f80fd5b5061032461068d366004612b7e565b610e36565b34801561069d575f80fd5b5060066104b0565b3480156106b0575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661038e565b3480156106d9575f80fd5b506102ef610e58565b3480156106ed575f80fd5b506104607f000000000000000000000000000000000000000000000000000000000000000081565b348015610720575f80fd5b506103c661072f366004612829565b610e67565b34801561073f575f80fd5b505f610324565b348015610751575f80fd5b50610324610760366004612829565b610e71565b348015610770575f80fd5b5060025461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561079c575f80fd5b506103c66107ab366004612c22565b610e7e565b3480156107bb575f80fd5b506104606107ca366004612c61565b60016020525f908152604090205481565b3480156107e6575f80fd5b506102ef6107f5366004612c7a565b610e98565b6103c6610808366004612c22565b611052565b61082061081b366004612cd7565b611216565b6040516102fc929190612d5e565b348015610839575f80fd5b506103c6610848366004612b63565b611249565b6103c661085b3660046129a5565b6112f0565b34801561086b575f80fd5b506103c661087a366004612b63565b611338565b34801561088a575f80fd5b50610460610899366004612db0565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260066020908152604080832093909416825291909152205490565b3480156108db575f80fd5b506103c66108ea366004612b63565b6113b3565b3480156108fa575f80fd5b50610324610909366004612ddc565b611416565b60606008805461091d90612df6565b80601f016020809104026020016040519081016040528092919081815260200182805461094990612df6565b80156109945780601f1061096b57610100808354040283529160200191610994565b820191905f5260205f20905b81548152906001019060200180831161097757829003601f168201915b5050505050905090565b5f336109ab81858561144a565b60019150505b92915050565b604080518082019091525f808252602082015260606109e760405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a569190612e41565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac29190612e5c565b604080518082018252848152602080820184905282515f80825291810190935290975091925090610b15565b604080518082019091525f815260606020820152815260200190600190039081610aee5790505b5093505f80610b39604089013560608a0135610b3460208c018c612c61565b61145c565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610bcd576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b60208701803590610be790610be2908a612c61565b6114b0565b14610c3e57610bf96020880188612c61565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610bc4565b610c4d87878787878787611504565b50505050505050565b5f33610c63858285611695565b610c6e858585611762565b60019150505b9392505050565b610c8361180b565b610c8d828261185d565b5050565b604080518082019091525f80825260208201525f610cbf60408501356060860135610b346020880188612c61565b9150505f80610cce86846118b1565b9092509050610ceb610ce36020880188612c61565b838388611a02565b9695505050505050565b610c8d8282611aed565b600360209081525f928352604080842090915290825290208054610d2290612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4e90612df6565b8015610d995780601f10610d7057610100808354040283529160200191610d99565b820191905f5260205f20905b815481529060010190602001808311610d7c57829003601f168201915b505050505081565b610da961180b565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610e2b61180b565b610e345f611b47565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b60606009805461091d90612df6565b610c8d8282611bbb565b5f336109ab818585611762565b610e8661180b565b610c8d610e938284612f80565b611c15565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ecb90612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef790612df6565b8015610f425780601f10610f1957610100808354040283529160200191610f42565b820191905f5260205f20905b815481529060010190602001808311610f2557829003601f168201915b5050505050905080515f03610f905783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610e509350505050565b5f839003610f9f579050610e50565b6002831061101c57610fe584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611d1692505050565b80610ff38460028188613089565b604051602001611005939291906130b0565b604051602081830303815290604052915050610e50565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc492919061311d565b5f5b81811015611155573683838381811061106f5761106f613130565b9050602002810190611081919061315d565b90506110b36110936020830183612c61565b602083013563ffffffff919091165f908152600160205260409020541490565b6110bd575061114d565b3063d045a0dc60c08301358360a08101356110dc610100830183613199565b6110ed610100890160e08a01612b63565b6110fb6101208a018a613199565b6040518963ffffffff1660e01b815260040161111d979695949392919061320f565b5f604051808303818588803b158015611134575f80fd5b505af1158015611146573d5f803e3d5ffd5b5050505050505b600101611054565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa15801561119e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111e391908101906132a2565b6040517f8351eea7000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b61121e612747565b604080518082019091525f808252602082015261123c858585611d5b565b915091505b935093915050565b61125161180b565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b1580156112d7575f80fd5b505af11580156112e9573d5f803e3d5ffd5b5050505050565b333014611329576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c4d87878787878787610c3e565b61134061180b565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610e18565b6113bb61180b565b73ffffffffffffffffffffffffffffffffffffffff811661140a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b61141381611b47565b50565b5f60208201803590600190839061142d9086612c61565b63ffffffff16815260208101919091526040015f20541492915050565b6114578383836001611e53565b505050565b5f8061146785611f98565b915081905083811015611241576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610bc4565b63ffffffff81165f90815260016020526040812054806109b1576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610bc4565b5f6115156115128787611fce565b90565b90505f6115408261152e6115298a8a611fe5565b612007565b61153b60208d018d612c61565b61203c565b90506028861115611626575f61157c61155f60608c0160408d0161330b565b61156c60208d018d612c61565b846115778c8c612070565b6120ba565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906115f79086908d905f908790600401613326565b5f604051808303815f87803b15801561160e575f80fd5b505af1158015611620573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61166c60208d018d612c61565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600660209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461175c578181101561174e576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610bc4565b61175c84848484035f611e53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166117b1576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8216611800576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b6114578383836120ec565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610e34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610bc4565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61190c85602001356118c686612293565b6118d360a0890189613199565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061230692505050565b90935090505f8161191e576001611921565b60025b90506119416119336020880188612c61565b826107f560808a018a613199565b60045490935073ffffffffffffffffffffffffffffffffffffffff1680156119f8576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906119b79088908890600401613364565b602060405180830381865afa1580156119d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f69190613388565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff168152602001611a71896114b0565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611aa69291906133a3565b6040805180830381865afa158015611ac0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae49190613474565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611b3c576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d5f83836120ec565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611c0a576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d825f836120ec565b5f5b8151811015611ce657611c46828281518110611c3557611c35613130565b602002602001015160400151611d16565b818181518110611c5857611c58613130565b60200260200101516040015160035f848481518110611c7957611c79613130565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611cb057611cb0613130565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611cdd91906134d2565b50600101611c17565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610e1891906135ee565b600281015161ffff8116600314610c8d57816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b611d63612747565b604080518082019091525f80825260208201525f80611d9833604089013560608a0135611d9360208c018c612c61565b612398565b915091505f80611da889846118b1565b9092509050611dd4611dbd60208b018b612c61565b8383611dce368d90038d018d613695565b8b6123bd565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611e22908d018d612c61565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff8416611ea2576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8316611ef1576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600660209081526040808320938716835292905220829055801561175c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611f8a91815260200190565b60405180910390a350505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000611fc481846136f2565b6109b1919061372a565b5f611fdc6020828486613089565b610c7491613741565b5f611ff4602860208486613089565b611ffd9161377d565b60c01c9392505050565b5f6109b17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff841661372a565b5f73ffffffffffffffffffffffffffffffffffffffff841661205e5761dead93505b6120688484611aed565b509092915050565b606061207f8260288186613089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b6060848484846040516020016120d394939291906137c5565b6040516020818303038152906040529050949350505050565b73ffffffffffffffffffffffffffffffffffffffff8316612123578060075f8282546121189190613842565b909155506121d39050565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260056020526040902054818110156121a8576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610bc4565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526005602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166121fc57600780548290039055612227565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526005602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161228691815260200190565b60405180910390a3505050565b5f806122bf7f0000000000000000000000000000000000000000000000000000000000000000846136f2565b905067ffffffffffffffff8111156109b1576040517fe2ce941300000000000000000000000000000000000000000000000000000000815260048101829052602401610bc4565b805160609015158061236757848460405160200161235392919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b60405160208183030381529060405261238e565b8484338560405160200161237e9493929190613855565b6040516020818303038152906040525b9150935093915050565b5f806123a585858561145c565b90925090506123b48683611bbb565b94509492505050565b6123c5612747565b5f6123d2845f01516124d0565b6020850151909150156123ec576123ec8460200151612510565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff1681526020016124498c6114b0565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b81526004016124849291906133a3565b60806040518083038185885af11580156124a0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906124c591906138ad565b979650505050505050565b5f81341461250c576040517f9f704120000000000000000000000000000000000000000000000000000000008152346004820152602401610bc4565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259e9190612e41565b905073ffffffffffffffffffffffffffffffffffffffff81166125ed576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805133602482018190527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff81811660448501526064808501889052855180860390910181526084909401909452602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001781528451610c8d96881695899361175c9388935f9283929091839182885af1806126c7576040513d5f823e3d81fd5b50505f513d915081156126de5780600114156126f8565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561175c576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610bc4565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161278660405180604001604052805f81526020015f81525090565b905290565b5f5b838110156127a557818101518382015260200161278d565b50505f910152565b5f81518084526127c481602086016020860161278b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610c7460208301846127ad565b73ffffffffffffffffffffffffffffffffffffffff81168114611413575f80fd5b5f806040838503121561283a575f80fd5b823561284581612808565b946020939093013593505050565b5f60e08284031215612863575f80fd5b50919050565b5f60208284031215612879575f80fd5b813567ffffffffffffffff81111561288f575f80fd5b610e5084828501612853565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612932578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261291f878901826127ad565b97505093820193908201906001016128d5565b50508751606088015250505060208501516080850152509050610e50565b5f60608284031215612863575f80fd5b5f8083601f840112612970575f80fd5b50813567ffffffffffffffff811115612987575f80fd5b60208301915083602082850101111561299e575f80fd5b9250929050565b5f805f805f805f60e0888a0312156129bb575f80fd5b6129c58989612950565b965060608801359550608088013567ffffffffffffffff808211156129e8575f80fd5b6129f48b838c01612960565b909750955060a08a01359150612a0982612808565b90935060c08901359080821115612a1e575f80fd5b50612a2b8a828b01612960565b989b979a50959850939692959293505050565b5f805f60608486031215612a50575f80fd5b8335612a5b81612808565b92506020840135612a6b81612808565b929592945050506040919091013590565b803563ffffffff81168114612a8f575f80fd5b919050565b5f8060408385031215612aa5575f80fd5b61284583612a7c565b8015158114611413575f80fd5b5f8060408385031215612acc575f80fd5b823567ffffffffffffffff811115612ae2575f80fd5b612aee85828601612853565b9250506020830135612aff81612aae565b809150509250929050565b8151815260208083015190820152604081016109b1565b803561ffff81168114612a8f575f80fd5b5f8060408385031215612b43575f80fd5b612b4c83612a7c565b9150612b5a60208401612b21565b90509250929050565b5f60208284031215612b73575f80fd5b8135610c7481612808565b5f805f8060a08587031215612b91575f80fd5b612b9b8686612950565b9350606085013567ffffffffffffffff811115612bb6575f80fd5b612bc287828801612960565b9094509250506080850135612bd681612808565b939692955090935050565b5f8083601f840112612bf1575f80fd5b50813567ffffffffffffffff811115612c08575f80fd5b6020830191508360208260051b850101111561299e575f80fd5b5f8060208385031215612c33575f80fd5b823567ffffffffffffffff811115612c49575f80fd5b612c5585828601612be1565b90969095509350505050565b5f60208284031215612c71575f80fd5b610c7482612a7c565b5f805f8060608587031215612c8d575f80fd5b612c9685612a7c565b9350612ca460208601612b21565b9250604085013567ffffffffffffffff811115612cbf575f80fd5b612ccb87828801612960565b95989497509550505050565b5f805f8385036080811215612cea575f80fd5b843567ffffffffffffffff811115612d00575f80fd5b612d0c87828801612853565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612d3e575f80fd5b506020840191506060840135612d5381612808565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff60208501511660208301526040840151612d99604084018280518252602090810151910152565b5082516080830152602083015160a0830152610c74565b5f8060408385031215612dc1575f80fd5b8235612dcc81612808565b91506020830135612aff81612808565b5f60608284031215612dec575f80fd5b610c748383612950565b600181811c90821680612e0a57607f821691505b602082108103612863577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208284031215612e51575f80fd5b8151610c7481612808565b5f60208284031215612e6c575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715612ec357612ec3612e73565b60405290565b6040805190810167ffffffffffffffff81118282101715612ec357612ec3612e73565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f3357612f33612e73565b604052919050565b5f67ffffffffffffffff821115612f5457612f54612e73565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612f9a57612f9a612e73565b8360051b6020612fab818301612eec565b868152918501918181019036841115612fc2575f80fd5b865b8481101561307d57803586811115612fda575f80fd5b88016060368290031215612fec575f80fd5b612ff4612ea0565b612ffd82612a7c565b815261300a868301612b21565b8682015260408083013589811115613020575f80fd5b929092019136601f840112613033575f80fd5b823561304661304182612f3b565b612eec565b8181523689838701011115613059575f80fd5b818986018a8301375f91810189019190915290820152845250918301918301612fc4565b50979650505050505050565b5f8085851115613097575f80fd5b838611156130a3575f80fd5b5050820193919092039150565b5f84516130c181846020890161278b565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610e506020830184866130d6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261318f575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126131cc575f80fd5b83018035915067ffffffffffffffff8211156131e6575f80fd5b60200191503681900382131561299e575f80fd5b67ffffffffffffffff81168114611413575f80fd5b63ffffffff61321d89612a7c565b168152602088013560208201525f6040890135613239816131fa565b67ffffffffffffffff811660408401525087606083015260e0608083015261326560e0830187896130d6565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c08401526132948185876130d6565b9a9950505050505050505050565b5f602082840312156132b2575f80fd5b815167ffffffffffffffff8111156132c8575f80fd5b8201601f810184136132d8575f80fd5b80516132e661304182612f3b565b8181528560208385010111156132fa575f80fd5b611ae482602083016020860161278b565b5f6020828403121561331b575f80fd5b8135610c74816131fa565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f610ceb60808301846127ad565b604081525f61337660408301856127ad565b8281036020840152611ae481856127ad565b5f60208284031215613398575f80fd5b8151610c7481612aae565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a060808401526133d860e08401826127ad565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a085015261341382826127ad565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215613456575f80fd5b61345e612ec9565b9050815181526020820151602082015292915050565b5f60408284031215613484575f80fd5b610c748383613446565b601f82111561145757805f5260205f20601f840160051c810160208510156134b35750805b601f840160051c820191505b818110156112e9575f81556001016134bf565b815167ffffffffffffffff8111156134ec576134ec612e73565b613500816134fa8454612df6565b8461348e565b602080601f831160018114613552575f841561351c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556135e6565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561359e5788860151825594840194600190910190840161357f565b50858210156135da57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015613687578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052613673818601836127ad565b968901969450505090860190600101613615565b509098975050505050505050565b5f604082840312156136a5575f80fd5b6136ad612ec9565b82358152602083013560208201528091505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f82613725577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109b1576109b16136c5565b803560208310156109b1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156137bd5780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161383281602c85016020870161278b565b91909101602c0195945050505050565b808201808211156109b1576109b16136c5565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f825161389d81604885016020870161278b565b9190910160480195945050505050565b5f608082840312156138bd575f80fd5b6138c5612ea0565b8251815260208301516138d7816131fa565b60208201526138e98460408501613446565b6040820152939250505056fea2646970667358221220a7e78c28d4976391911497373c3bfff426de060fa72d1fbc537e431a0fece95964736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b1c38038062001b1c833981016040819052620000339162000240565b808383600362000044838262000351565b50600462000053828262000351565b5050505f8062000069836200009b60201b60201c565b91509150816200007b5760126200007d565b805b60ff1660a05250506001600160a01b03166080525062000452915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691620000e3916200041d565b5f60405180830381855afa9150503d805f81146200011d576040519150601f19603f3d011682016040523d82523d5f602084013e62000122565b606091505b50915091508180156200013757506020815110155b156200016e575f818060200190518101906200015491906200043a565b905060ff81116200016c576001969095509350505050565b505b505f9485945092505050565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015620001aa57818101518382015260200162000190565b50505f910152565b5f82601f830112620001c2575f80fd5b81516001600160401b0380821115620001df57620001df6200017a565b604051601f8301601f19908116603f011681019082821181831017156200020a576200020a6200017a565b8160405283815286602085880101111562000223575f80fd5b620002368460208301602089016200018e565b9695505050505050565b5f805f6060848603121562000253575f80fd5b83516001600160401b03808211156200026a575f80fd5b6200027887838801620001b2565b945060208601519150808211156200028e575f80fd5b506200029d86828701620001b2565b604086015190935090506001600160a01b0381168114620002bc575f80fd5b809150509250925092565b600181811c90821680620002dc57607f821691505b602082108103620002fb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200034c57805f5260205f20601f840160051c81016020851015620003285750805b601f840160051c820191505b8181101562000349575f815560010162000334565b50505b505050565b81516001600160401b038111156200036d576200036d6200017a565b62000385816200037e8454620002c7565b8462000301565b602080601f831160018114620003bb575f8415620003a35750858301515b5f19600386901b1c1916600185901b17855562000415565b5f85815260208120601f198616915b82811015620003eb57888601518255948401946001909101908401620003ca565b50858210156200040957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251620004308184602087016200018e565b9190910192915050565b5f602082840312156200044b575f80fd5b5051919050565b60805160a051611693620004895f395f6105d301525f818161027c0152818161043101528181610a880152610bd601526116935ff3fe608060405234801561000f575f80fd5b50600436106101b0575f3560e01c806370a08231116100f3578063ba08765211610093578063ce96cb771161006e578063ce96cb77146103c3578063d905777e146103d6578063dd62ed3e146103e9578063ef8b30f7146103b0575f80fd5b8063ba0876521461039d578063c63d75b6146102a6578063c6e6f592146103b0575f80fd5b80639dc29fac116100ce5780639dc29fac14610351578063a9059cbb14610364578063b3d7f6b914610377578063b460af941461038a575f80fd5b806370a082311461030157806394bf804d1461033657806395d89b4114610349575f80fd5b806323b872dd1161015e578063402d267d11610139578063402d267d146102a657806340c10f19146102d95780634cdad506146101e45780636e553f65146102ee575f80fd5b806323b872dd14610235578063313ce5671461024857806338d52e0f14610262575f80fd5b8063095ea7b31161018e578063095ea7b3146101f75780630a28a4771461021a57806318160ddd1461022d575f80fd5b806301e1d114146101b457806306fdde03146101cf57806307a2d13a146101e4575b5f80fd5b6101bc61042e565b6040519081526020015b60405180910390f35b6101d76104e3565b6040516101c69190611222565b6101bc6101f236600461128c565b610573565b61020a6102053660046112cb565b610584565b60405190151581526020016101c6565b6101bc61022836600461128c565b61059b565b6002546101bc565b61020a6102433660046112f3565b6105a7565b6102506105cc565b60405160ff90911681526020016101c6565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c6565b6101bc6102b436600461132c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b6102ec6102e73660046112cb565b6105f7565b005b6101bc6102fc366004611345565b610605565b6101bc61030f36600461132c565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b6101bc610344366004611345565b610655565b6101d761068f565b6102ec61035f3660046112cb565b61069e565b61020a6103723660046112cb565b6106a8565b6101bc61038536600461128c565b6106b5565b6101bc61039836600461136f565b6106c1565b6101bc6103ab36600461136f565b610750565b6101bc6103be36600461128c565b6107d6565b6101bc6103d136600461132c565b6107e1565b6101bc6103e436600461132c565b610810565b6101bc6103f73660046113a8565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b5f7f00000000000000000000000000000000000000000000000000000000000000006040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa1580156104ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104de91906113d0565b905090565b6060600380546104f2906113e7565b80601f016020809104026020016040519081016040528092919081815260200182805461051e906113e7565b80156105695780601f1061054057610100808354040283529160200191610569565b820191905f5260205f20905b81548152906001019060200180831161054c57829003601f168201915b5050505050905090565b5f61057e825f61083a565b92915050565b5f33610591818585610872565b5060019392505050565b5f61057e826001610884565b5f336105b48582856108b3565b6105bf858585610980565b60019150505b9392505050565b5f6104de817f0000000000000000000000000000000000000000000000000000000000000000611465565b6106018282610a29565b5050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610635565b60405180910390fd5b5f61063f856107d6565b905061064d33858784610a83565b949350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f610681856106b5565b905061064d33858388610a83565b6060600480546104f2906113e7565b6106018282610b2f565b5f33610591818585610980565b5f61057e82600161083a565b5f806106cc836107e1565b90508085111561072e576040517ffe9cceec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107388661059b565b90506107473386868985610b89565b95945050505050565b5f8061075b83610810565b9050808511156107bd576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107c786610573565b9050610747338686848a610b89565b5f61057e825f610884565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e905f61083a565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e565b5f6105c561084661042e565b61085190600161147e565b61085c5f600a6115af565b600254610869919061147e565b85919085610c8a565b61087f8383836001610ccc565b505050565b5f6105c561089382600a6115af565b6002546108a0919061147e565b6108a861042e565b61086990600161147e565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461097a578181101561096c576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018290526044810183905260640161062c565b61097a84848484035f610ccc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109cf576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8216610a1e576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b61087f838383610e03565b73ffffffffffffffffffffffffffffffffffffffff8216610a78576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b6106015f8383610e03565b610aaf7f0000000000000000000000000000000000000000000000000000000000000000853085610faa565b610ab98382610a29565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051610b21929190918252602082015260400190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b7e576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b610601825f83610e03565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610bc757610bc78386836108b3565b610bd18382610b2f565b610bfc7f00000000000000000000000000000000000000000000000000000000000000008584611033565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051610c7b929190918252602082015260400190565b60405180910390a45050505050565b5f610cb7610c9783611071565b8015610cb257505f8480610cad57610cad6115bd565b868809115b151590565b610cc286868661109d565b610747919061147e565b73ffffffffffffffffffffffffffffffffffffffff8416610d1b576040517fe602df050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8316610d6a576040517f94280d620000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600160209081526040808320938716835292905220829055801561097a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b2191815260200190565b73ffffffffffffffffffffffffffffffffffffffff8316610e3a578060025f828254610e2f919061147e565b90915550610eea9050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020819052604090205481811015610ebf576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602481018290526044810183905260640161062c565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610f1357600280548290039055610f3e565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f9d91815260200190565b60405180910390a3505050565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283811660448301526064820183905261097a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611172565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261087f91859182169063a9059cbb90606401610fec565b5f6002826003811115611086576110866115ea565b6110909190611617565b60ff166001149050919050565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f036110f0578382816110e6576110e66115bd565b04925050506105c5565b808411611107576111076003851502601118611211565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f8060205f8451602086015f885af180611191576040513d5f823e3d81fd5b50505f513d915081156111a85780600114156111c2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561097a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161062c565b634e487b715f52806020526024601cfd5b5f602080835283518060208501525f5b8181101561124e57858101830151858201604001528201611232565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f6020828403121561129c575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112c6575f80fd5b919050565b5f80604083850312156112dc575f80fd5b6112e5836112a3565b946020939093013593505050565b5f805f60608486031215611305575f80fd5b61130e846112a3565b925061131c602085016112a3565b9150604084013590509250925092565b5f6020828403121561133c575f80fd5b6105c5826112a3565b5f8060408385031215611356575f80fd5b82359150611366602084016112a3565b90509250929050565b5f805f60608486031215611381575f80fd5b83359250611391602085016112a3565b915061139f604085016112a3565b90509250925092565b5f80604083850312156113b9575f80fd5b6113c2836112a3565b9150611366602084016112a3565b5f602082840312156113e0575f80fd5b5051919050565b600181811c908216806113fb57607f821691505b602082108103611432577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff818116838216019081111561057e5761057e611438565b8082018082111561057e5761057e611438565b600181815b808511156114ea57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156114d0576114d0611438565b808516156114dd57918102915b93841c9390800290611496565b509250929050565b5f826115005750600161057e565b8161150c57505f61057e565b8160018114611522576002811461152c57611548565b600191505061057e565b60ff84111561153d5761153d611438565b50506001821b61057e565b5060208310610133831016604e8410600b841016171561156b575081810a61057e565b6115758383611491565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156115a7576115a7611438565b029392505050565b5f6105c560ff8416836114f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff83168061164e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff8416069150509291505056fea2646970667358221220e4c7204716e83cc6436d4c089c98eaebf1301b2ac725b313f068e28e347d110264736f6c6343000816003360e060405234801562000010575f80fd5b506040516200355f3803806200355f833981016040819052620000339162000240565b828282826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000099919062000287565b8282818181813380620000c557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000d081620001d0565b506001600160a01b038083166080528116620000ff57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b15801562000144575f80fd5b505af115801562000157573d5f803e3d5ffd5b50505050505050506200016f6200021f60201b60201c565b60ff168360ff16101562000196576040516301e9714b60e41b815260040160405180910390fd5b620001a3600684620002c4565b620001b090600a620003df565b60a0525050506001600160a01b0390921660c05250620003ef9350505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b80516001600160a01b03811681146200023b575f80fd5b919050565b5f805f6060848603121562000253575f80fd5b6200025e8462000224565b92506200026e6020850162000224565b91506200027e6040850162000224565b90509250925092565b5f6020828403121562000298575f80fd5b815160ff81168114620002a9575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b60ff8281168282160390811115620002e057620002e0620002b0565b92915050565b600181815b808511156200032657815f19048211156200030a576200030a620002b0565b808516156200031857918102915b93841c9390800290620002eb565b509250929050565b5f826200033e57506001620002e0565b816200034c57505f620002e0565b8160018114620003655760028114620003705762000390565b6001915050620002e0565b60ff841115620003845762000384620002b0565b50506001821b620002e0565b5060208310610133831016604e8410600b8410161715620003b5575081810a620002e0565b620003c18383620002e6565b805f1904821115620003d757620003d7620002b0565b029392505050565b5f620002a960ff8416836200032e565b60805160a05160c0516130f16200046e5f395f818161069e015281816119b40152611b9001525f8181610514015281816118f10152818161196a0152611a6601525f81816104110152818161088301528181610f6d015281816112810152818161156601528181611bf201528181611de90152611ee001526130f15ff3fe6080604052600436106101f5575f3560e01c806382413eac11610117578063bc70b354116100ac578063d045a0dc1161007c578063f2fde38b11610062578063f2fde38b14610671578063fc0c546a14610690578063ff7bd03d146106c2575f80fd5b8063d045a0dc1461063f578063d424388514610652575f80fd5b8063bc70b354146105cd578063bd815db0146105ec578063c7c7f5b3146105ff578063ca5eb5e114610620575f80fd5b80639f68b964116100e75780639f68b96414610544578063b731ea0a14610557578063b98bd07014610583578063bb0b6a53146105a2575f80fd5b806382413eac146104a0578063857749b0146104bf5780638da5cb5b146104da578063963efcaa14610503575f80fd5b80633b6f743b1161018d5780635e280f111161015d5780635e280f11146104005780636fc1b31e14610433578063715018a6146104525780637d25a05e14610466575f80fd5b80633b6f743b1461035157806352ae28791461037d5780635535d4611461038f5780635a0dfe4d146103bb575f80fd5b8063156a0d0f116101c8578063156a0d0f146102bd57806317442b70146102fd5780631f5e13341461031e5780633400288b14610332575f80fd5b80630d35b415146101f9578063111ecdad1461023057806313137d6514610281578063134d4f2514610296575b5f80fd5b348015610204575f80fd5b50610218610213366004611ffe565b6106e1565b6040516102279392919061209b565b60405180910390f35b34801561023b575f80fd5b5060045461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610227565b61029461028f3660046121c6565b610881565b005b3480156102a1575f80fd5b506102aa600281565b60405161ffff9091168152602001610227565b3480156102c8575f80fd5b50604080517f02e49c2c0000000000000000000000000000000000000000000000000000000081526001602082015201610227565b348015610308575f80fd5b5060408051600181526002602082015201610227565b348015610329575f80fd5b506102aa600181565b34801561033d575f80fd5b5061029461034c366004612277565b610980565b34801561035c575f80fd5b5061037061036b3660046122ac565b610996565b60405161022791906122fb565b348015610388575f80fd5b503061025c565b34801561039a575f80fd5b506103ae6103a9366004612323565b6109fc565b6040516102279190612354565b3480156103c6575f80fd5b506103f06103d5366004612277565b63ffffffff919091165f908152600160205260409020541490565b6040519015158152602001610227565b34801561040b575f80fd5b5061025c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043e575f80fd5b5061029461044d366004612366565b610a9e565b34801561045d575f80fd5b50610294610b20565b348015610471575f80fd5b50610487610480366004612277565b5f92915050565b60405167ffffffffffffffff9091168152602001610227565b3480156104ab575f80fd5b506103f06104ba366004612381565b610b33565b3480156104ca575f80fd5b5060405160068152602001610227565b3480156104e5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661025c565b34801561050e575f80fd5b506105367f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610227565b34801561054f575f80fd5b5060016103f0565b348015610562575f80fd5b5060025461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561058e575f80fd5b5061029461059d366004612425565b610b55565b3480156105ad575f80fd5b506105366105bc366004612464565b60016020525f908152604090205481565b3480156105d8575f80fd5b506103ae6105e736600461247d565b610b6f565b6102946105fa366004612425565b610d29565b61061261060d3660046124da565b610eed565b604051610227929190612561565b34801561062b575f80fd5b5061029461063a366004612366565b610f20565b61029461064d3660046121c6565b610fc7565b34801561065d575f80fd5b5061029461066c366004612366565b61100f565b34801561067c575f80fd5b5061029461068b366004612366565b61108a565b34801561069b575f80fd5b507f000000000000000000000000000000000000000000000000000000000000000061025c565b3480156106cd575f80fd5b506103f06106dc3660046125b3565b6110ed565b604080518082019091525f8082526020820152606061071160405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078091906125cd565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ec91906125e8565b604080518082018252848152602080820184905282515f8082529181019093529097509192509061083f565b604080518082019091525f8152606060208201528152602001906001900390816108185790505b5093505f80610863604089013560608a013561085e60208c018c612464565b611121565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146108f7576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b602087018035906109119061090c908a612464565b611175565b14610968576109236020880188612464565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602088013560248201526044016108ee565b610977878787878787876111c9565b50505050505050565b61098861135a565b61099282826113ac565b5050565b604080518082019091525f80825260208201525f6109c46040850135606086013561085e6020880188612464565b9150505f806109d38684611400565b90925090506109f06109e86020880188612464565b838388611551565b93505050505b92915050565b600360209081525f928352604080842090915290825290208054610a1f9061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4b9061262c565b8015610a965780601f10610a6d57610100808354040283529160200191610a96565b820191905f5260205f20905b815481529060010190602001808311610a7957829003601f168201915b505050505081565b610aa661135a565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610b2861135a565b610b315f61163c565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b610b5d61135a565b610992610b6a8284612757565b6116b0565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ba29061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bce9061262c565b8015610c195780601f10610bf057610100808354040283529160200191610c19565b820191905f5260205f20905b815481529060010190602001808311610bfc57829003601f168201915b5050505050905080515f03610c675783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610b4d9350505050565b5f839003610c76579050610b4d565b60028310610cf357610cbc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506117b192505050565b80610cca8460028188612860565b604051602001610cdc93929190612887565b604051602081830303815290604052915050610b4d565b83836040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9291906128f4565b5f5b81811015610e2c5736838383818110610d4657610d46612907565b9050602002810190610d589190612934565b9050610d8a610d6a6020830183612464565b602083013563ffffffff919091165f908152600160205260409020541490565b610d945750610e24565b3063d045a0dc60c08301358360a0810135610db3610100830183612970565b610dc4610100890160e08a01612366565b610dd26101208a018a612970565b6040518963ffffffff1660e01b8152600401610df497969594939291906129e6565b5f604051808303818588803b158015610e0b575f80fd5b505af1158015610e1d573d5f803e3d5ffd5b5050505050505b600101610d2b565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015610e75573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610eba9190810190612a79565b6040517f8351eea70000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b610ef5611fa4565b604080518082019091525f8082526020820152610f138585856117f6565b915091505b935093915050565b610f2861135a565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b158015610fae575f80fd5b505af1158015610fc0573d5f803e3d5ffd5b5050505050565b333014611000576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097787878787878787610968565b61101761135a565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610b15565b61109261135a565b73ffffffffffffffffffffffffffffffffffffffff81166110e1576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016108ee565b6110ea8161163c565b50565b5f6020820180359060019083906111049086612464565b63ffffffff16815260208101919091526040015f20541492915050565b5f8061112c856118ee565b915081905083811015610f18576040517f71c4efed00000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016108ee565b63ffffffff81165f90815260016020526040812054806109f6576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff841660048201526024016108ee565b5f6111da6111d78787611924565b90565b90505f611205826111f36111ee8a8a611942565b611964565b61120060208d018d612464565b611999565b905060288611156112eb575f61124161122460608c0160408d01612ae2565b61123160208d018d612464565b8461123c8c8c6119e3565b611a2d565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112bc9086908d905f908790600401612afd565b5f604051808303815f87803b1580156112d3575f80fd5b505af11580156112e5573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61133160208d018d612464565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b31576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016108ee565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61145b856020013561141586611a5f565b61142260a0890189612970565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611ad292505050565b90935090505f8161146d576001611470565b60025b90506114906114826020880188612464565b826105e760808a018a612970565b60045490935073ffffffffffffffffffffffffffffffffffffffff168015611547576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906115069088908890600401612b45565b602060405180830381865afa158015611521573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115459190612b69565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff1681526020016115c089611175565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016115f5929190612b84565b6040805180830381865afa15801561160f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116339190612c55565b95945050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b8151811015611781576116e18282815181106116d0576116d0612907565b6020026020010151604001516117b1565b8181815181106116f3576116f3612907565b60200260200101516040015160035f84848151811061171457611714612907565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f84848151811061174b5761174b612907565b60200260200101516020015161ffff1661ffff1681526020019081526020015f2090816117789190612cb3565b506001016116b2565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610b159190612dcf565b600281015161ffff811660031461099257816040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b6117fe611fa4565b604080518082019091525f80825260208201525f8061183333604089013560608a013561182e60208c018c612464565b611b64565b915091505f806118438984611400565b909250905061186f61185860208b018b612464565b8383611869368d90038d018d612e76565b8b611bc1565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118bd908d018d612464565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b5f7f000000000000000000000000000000000000000000000000000000000000000061191a8184612ea6565b6109f69190612ede565b5f6119326020828486612860565b61193b91612f1a565b9392505050565b5f611951602860208486612860565b61195a91612f56565b60c01c9392505050565b5f6109f67f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff8416612ede565b5f6119db73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585611cd4565b509092915050565b60606119f28260288186612860565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606084848484604051602001611a469493929190612f9e565b6040516020818303038152906040529050949350505050565b5f80611a8b7f000000000000000000000000000000000000000000000000000000000000000084612ea6565b905067ffffffffffffffff8111156109f6576040517fe2ce9413000000000000000000000000000000000000000000000000000000008152600481018290526024016108ee565b8051606090151580611b33578484604051602001611b1f92919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b604051602081830303815290604052611b5a565b84843385604051602001611b4a949392919061301b565b6040516020818303038152906040525b9150935093915050565b5f80611b71858585611121565b9092509050611bb873ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016873085611d5a565b94509492505050565b611bc9611fa4565b5f611bd6845f0151611da6565b602085015190915015611bf057611bf08460200151611de6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff168152602001611c4d8c611175565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b8152600401611c88929190612b84565b60806040518083038185885af1158015611ca4573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611cc99190613073565b979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052611d5591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611f05565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052611da09186918216906323b872dd90608401611d0e565b50505050565b5f813414611de2576040517f9f7041200000000000000000000000000000000000000000000000000000000081523460048201526024016108ee565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7491906125cd565b905073ffffffffffffffffffffffffffffffffffffffff8116611ec3576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61099273ffffffffffffffffffffffffffffffffffffffff8216337f000000000000000000000000000000000000000000000000000000000000000085611d5a565b5f8060205f8451602086015f885af180611f24576040513d5f823e3d81fd5b50505f513d91508115611f3b578060011415611f55565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611da0576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016108ee565b60405180606001604052805f80191681526020015f67ffffffffffffffff168152602001611fe360405180604001604052805f81526020015f81525090565b905290565b5f60e08284031215611ff8575f80fd5b50919050565b5f6020828403121561200e575f80fd5b813567ffffffffffffffff811115612024575f80fd5b610b4d84828501611fe8565b5f5b8381101561204a578181015183820152602001612032565b50505f910152565b5f8151808452612069816020860160208601612030565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612132578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261211f87890182612052565b97505093820193908201906001016120d5565b50508751606088015250505060208501516080850152509050610b4d565b5f60608284031215611ff8575f80fd5b5f8083601f840112612170575f80fd5b50813567ffffffffffffffff811115612187575f80fd5b60208301915083602082850101111561219e575f80fd5b9250929050565b73ffffffffffffffffffffffffffffffffffffffff811681146110ea575f80fd5b5f805f805f805f60e0888a0312156121dc575f80fd5b6121e68989612150565b965060608801359550608088013567ffffffffffffffff80821115612209575f80fd5b6122158b838c01612160565b909750955060a08a0135915061222a826121a5565b90935060c0890135908082111561223f575f80fd5b5061224c8a828b01612160565b989b979a50959850939692959293505050565b803563ffffffff81168114612272575f80fd5b919050565b5f8060408385031215612288575f80fd5b6122918361225f565b946020939093013593505050565b80151581146110ea575f80fd5b5f80604083850312156122bd575f80fd5b823567ffffffffffffffff8111156122d3575f80fd5b6122df85828601611fe8565b92505060208301356122f08161229f565b809150509250929050565b8151815260208083015190820152604081016109f6565b803561ffff81168114612272575f80fd5b5f8060408385031215612334575f80fd5b61233d8361225f565b915061234b60208401612312565b90509250929050565b602081525f61193b6020830184612052565b5f60208284031215612376575f80fd5b813561193b816121a5565b5f805f8060a08587031215612394575f80fd5b61239e8686612150565b9350606085013567ffffffffffffffff8111156123b9575f80fd5b6123c587828801612160565b90945092505060808501356123d9816121a5565b939692955090935050565b5f8083601f8401126123f4575f80fd5b50813567ffffffffffffffff81111561240b575f80fd5b6020830191508360208260051b850101111561219e575f80fd5b5f8060208385031215612436575f80fd5b823567ffffffffffffffff81111561244c575f80fd5b612458858286016123e4565b90969095509350505050565b5f60208284031215612474575f80fd5b61193b8261225f565b5f805f8060608587031215612490575f80fd5b6124998561225f565b93506124a760208601612312565b9250604085013567ffffffffffffffff8111156124c2575f80fd5b6124ce87828801612160565b95989497509550505050565b5f805f83850360808112156124ed575f80fd5b843567ffffffffffffffff811115612503575f80fd5b61250f87828801611fe8565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612541575f80fd5b506020840191506060840135612556816121a5565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff6020850151166020830152604084015161259c604084018280518252602090810151910152565b5082516080830152602083015160a083015261193b565b5f606082840312156125c3575f80fd5b61193b8383612150565b5f602082840312156125dd575f80fd5b815161193b816121a5565b5f602082840312156125f8575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b600181811c9082168061264057607f821691505b602082108103611ff8577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b6040516060810167ffffffffffffffff8111828210171561269a5761269a6125ff565b60405290565b6040805190810167ffffffffffffffff8111828210171561269a5761269a6125ff565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561270a5761270a6125ff565b604052919050565b5f67ffffffffffffffff82111561272b5761272b6125ff565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612771576127716125ff565b8360051b60206127828183016126c3565b868152918501918181019036841115612799575f80fd5b865b84811015612854578035868111156127b1575f80fd5b880160603682900312156127c3575f80fd5b6127cb612677565b6127d48261225f565b81526127e1868301612312565b86820152604080830135898111156127f7575f80fd5b929092019136601f84011261280a575f80fd5b823561281d61281882612712565b6126c3565b8181523689838701011115612830575f80fd5b818986018a8301375f9181018901919091529082015284525091830191830161279b565b50979650505050505050565b5f808585111561286e575f80fd5b8386111561287a575f80fd5b5050820193919092039150565b5f8451612898818460208901612030565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610b4d6020830184866128ad565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112612966575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129a3575f80fd5b83018035915067ffffffffffffffff8211156129bd575f80fd5b60200191503681900382131561219e575f80fd5b67ffffffffffffffff811681146110ea575f80fd5b63ffffffff6129f48961225f565b168152602088013560208201525f6040890135612a10816129d1565b67ffffffffffffffff811660408401525087606083015260e06080830152612a3c60e0830187896128ad565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c0840152612a6b8185876128ad565b9a9950505050505050505050565b5f60208284031215612a89575f80fd5b815167ffffffffffffffff811115612a9f575f80fd5b8201601f81018413612aaf575f80fd5b8051612abd61281882612712565b818152856020838501011115612ad1575f80fd5b611633826020830160208601612030565b5f60208284031215612af2575f80fd5b813561193b816129d1565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f612b3b6080830184612052565b9695505050505050565b604081525f612b576040830185612052565b82810360208401526116338185612052565b5f60208284031215612b79575f80fd5b815161193b8161229f565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a06080840152612bb960e0840182612052565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a0850152612bf48282612052565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215612c37575f80fd5b612c3f6126a0565b9050815181526020820151602082015292915050565b5f60408284031215612c65575f80fd5b61193b8383612c27565b601f821115611d5557805f5260205f20601f840160051c81016020851015612c945750805b601f840160051c820191505b81811015610fc0575f8155600101612ca0565b815167ffffffffffffffff811115612ccd57612ccd6125ff565b612ce181612cdb845461262c565b84612c6f565b602080601f831160018114612d33575f8415612cfd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612dc7565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612d7f57888601518255948401946001909101908401612d60565b5085821015612dbb57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015612e68578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612e5481860183612052565b968901969450505090860190600101612df6565b509098975050505050505050565b5f60408284031215612e86575f80fd5b612e8e6126a0565b82358152602083013560208201528091505092915050565b5f82612ed9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109f6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b803560208310156109f6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015612f965780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161300b81602c850160208701612030565b91909101602c0195945050505050565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f8251613063816048850160208701612030565b9190910160480195945050505050565b5f60808284031215613083575f80fd5b61308b612677565b82518152602083015161309d816129d1565b60208201526130af8460408501612c27565b6040820152939250505056fea26469706673582212201d2eeb249efab86d32800173e736d788fc450154b978b7660829bc5ead288d1364736f6c6343000816003361016060405234801562000011575f80fd5b50604051620024be380380620024be833981016040819052620000349162000608565b60015f556001600160a01b03808416608052821660a081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa15801562000087573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000659565b6001600160a01b0390811660c052811660e081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa158015620000fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000122919062000659565b6001600160a01b0316610100816001600160a01b03168152505060a0516001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a1919062000659565b6001600160a01b03166101208190526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620001ea573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200021091906200067e565b63ffffffff1661014052608051610100516001600160a01b039081169116146200026c576101005160805160405163070bc55b60e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b6080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d1919062000659565b6001600160a01b031660c0516001600160a01b031614620003815760c0516080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000354919062000659565b60405163ba9d665f60e01b81526001600160a01b0392831660048201529116602482015260440162000263565b60e0516001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e69190620006a3565b620004145760e051604051637e0a8a5760e11b81526001600160a01b03909116600482015260240162000263565b60c05160405163095ea7b360e01b81526001600160a01b0385811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af115801562000465573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200048b9190620006a3565b506101005160405163095ea7b360e01b81526001600160a01b0383811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620004de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005049190620006a3565b50816001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000542573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005689190620006a3565b15620005e75760c05160405163095ea7b360e01b81526001600160a01b0384811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620005bf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005e59190620006a3565b505b505050620006c4565b6001600160a01b038116811462000605575f80fd5b50565b5f805f606084860312156200061b575f80fd5b83516200062881620005f0565b60208501519093506200063b81620005f0565b60408501519092506200064e81620005f0565b809150509250925092565b5f602082840312156200066a575f80fd5b81516200067781620005f0565b9392505050565b5f602082840312156200068f575f80fd5b815163ffffffff8116811462000677575f80fd5b5f60208284031215620006b4575f80fd5b8151801515811462000677575f80fd5b60805160a05160c05160e051610100516101205161014051611d246200079a5f395f81816102a5015261111301525f8181610200015261096b01525f818161027201528181610375015261119101525f818161018701528181610a1d0152610d4d01525f81816101540152818161031101526111b701525f818160e2015281816103be015281816108dd015281816109c601528181610da7015261113e01525f81816101ba015281816104560152818161055701528181610627015281816107230152818161104201526113290152611d245ff3fe6080604052600436106100c6575f3560e01c80636fad06f511610071578063a99ecc541161004c578063a99ecc5414610261578063aa72fe3f14610294578063d0a10260146102dc575f80fd5b80636fad06f5146101ef5780637e6e1e10146102225780639a6b198c1461024e575f80fd5b8063369caf83116100a1578063369caf8314610176578063411557d1146101a957806353174fa4146101dc575f80fd5b80630bfec755146100d157806319197ec61461012e5780631df34fa314610143575f80fd5b366100cd57005b5f80fd5b3480156100dc575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c36600461160e565b6102ef565b005b34801561014e575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b348015610181575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b4575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b6101416101ea36600461160e565b610353565b3480156101fa575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561022d575f80fd5b5061024161023c366004611661565b6103a9565b60405161012591906116c5565b61014161025c3660046116dc565b610843565b34801561026c575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561029f575f80fd5b506102c77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610125565b6101416102ea36600461177c565b610953565b6102f7610c50565b61033973ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d20565b61034e60015f55565b505050565b61035b610c50565b61039d73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d7a565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036105e0576040517fd905777e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063d905777e90602401602060405180830381865afa15801561049d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c19190611813565b905080841115610528576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716600482015260248101859052604481018290526064015b60405180910390fd5b6040517f4cdad506000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634cdad50690602401602060405180830381865afa1580156105b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d59190611813565b6040840152506107a8565b6040517f402d267d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063402d267d90602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611813565b9050808411156106f4576040517f79012fb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602481018590526044810182905260640161051f565b6040517fef8b30f7000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef8b30f790602401602060405180830381865afa15801561077d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a19190611813565b6040840152505b6040517f3b6f743b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690633b6f743b906107fc9085905f9060040161190a565b6040805180830381865afa158015610816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a919061197a565b95945050505050565b33301461087e576040517fa19dbf0000000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b5f808380602001905181019061089491906119e9565b91509150803410156108db576040517f7cb769dc0000000000000000000000000000000000000000000000000000000081526004810182905234602482015260440161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361093f5761093a85848432610d20565b61094b565b61094b85848432610d7a565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146109c4576040517f91ac5e4f00000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015610a6c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15610abb576040517f84fb3f0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816600482015260240161051f565b5f610ac68686610dcd565b90505f610ad38787610dee565b90505f610ae08888610dfd565b6040517f9a6b198c0000000000000000000000000000000000000000000000000000000081529091503090639a6b198c903490610b27908e90889087908990600401611ad0565b5f604051808303818588803b158015610b3e575f80fd5b505af193505050508015610b50575060015b610c19573d808015610b7d576040519150601f19603f3d011682016040523d82523d5f602084013e610b82565b606091505b507f7cb769dc00000000000000000000000000000000000000000000000000000000610bad82611b15565b7fffffffff000000000000000000000000000000000000000000000000000000001603610bdc57805181602001fd5b610be98b8a8a8632610e47565b6040518a907ffe509803c09416b28ff3d8f690c8b0c61462a892c46d5430c8fb20abe472daf0905f90a250610c44565b60405189907f27b5aea9f5736c02241d8a0272e9ec988ea44cf85c4b4760329431aa19678394905f90a25b50505050505050505050565b60025f5403610c8b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052610d1a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610f6c565b50505050565b5f610d2b858561100b565b9050610d3b8184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5050505050565b5f610d8585856112eb565b9050610d958184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5f610ddc604c602c8486611b64565b610de591611b8b565b90505b92915050565b5f610ddc602c600c8486611b64565b6060610e0c82604c8186611b64565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b610e8c6040518060e001604052805f63ffffffff1681526020015f80191681526020015f81526020015f81526020016060815260200160608152602001606081525090565b610e96858561136d565b63ffffffff168152610ea88585610dcd565b602080830191909152604080830185905280518082018252348082525f9382019390935290517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89169263c7c7f5b3929091610f219186918890600401611bc7565b60c06040518083038185885af1158015610f3d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f629190611c16565b5050505050505050565b5f8060205f8451602086015f885af180610f8b576040513d5f823e3d81fd5b50505f513d91508115610fa2578060011415610fbc565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610d1a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161051f565b6040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018290523060248201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636e553f65906044015b6020604051808303815f875af115801561109e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de59190611813565b80821015611106576040517f71c4efed000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161051f565b5050565b815163ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116911603611242575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146111b5577f00000000000000000000000000000000000000000000000000000000000000006111d7565b7f00000000000000000000000000000000000000000000000000000000000000005b90503415611211576040517f7578d2bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1a61121f846020015190565b604085015173ffffffffffffffffffffffffffffffffffffffff8416919061138f565b604080518082018252348082525f602083015291517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169263c7c7f5b39290916112aa9187918790600401611bc7565b60c06040518083038185885af11580156112c6573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d739190611c16565b6040517fba08765200000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ba08765290606401611082565b5f61137c600c60088486611b64565b61138591611ca6565b60e01c9392505050565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261034e91859182169063a9059cbb90606401610cd3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff8111828210171561141d5761141d6113cd565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561146a5761146a6113cd565b604052919050565b63ffffffff81168114611483575f80fd5b50565b803561149181611472565b919050565b5f67ffffffffffffffff8211156114af576114af6113cd565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126114ea575f80fd5b81356114fd6114f882611496565b611423565b818152846020838601011115611511575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0828403121561153d575f80fd5b6115456113fa565b905061155082611486565b8152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff8082111561158a575f80fd5b611596858386016114db565b608084015260a08401359150808211156115ae575f80fd5b6115ba858386016114db565b60a084015260c08401359150808211156115d2575f80fd5b506115df848285016114db565b60c08301525092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611491575f80fd5b5f805f60608486031215611620575f80fd5b83359250602084013567ffffffffffffffff81111561163d575f80fd5b6116498682870161152d565b925050611658604085016115eb565b90509250925092565b5f805f8060808587031215611674575f80fd5b61167d856115eb565b935061168b602086016115eb565b925060408501359150606085013567ffffffffffffffff8111156116ad575f80fd5b6116b98782880161152d565b91505092959194509250565b815181526020808301519082015260408101610de8565b5f805f80608085870312156116ef575f80fd5b6116f8856115eb565b935060208501359250604085013567ffffffffffffffff81111561171a575f80fd5b611726878288016114db565b949793965093946060013593505050565b5f8083601f840112611747575f80fd5b50813567ffffffffffffffff81111561175e575f80fd5b602083019150836020828501011115611775575f80fd5b9250929050565b5f805f805f805f60a0888a031215611792575f80fd5b61179b886115eb565b965060208801359550604088013567ffffffffffffffff808211156117be575f80fd5b6117ca8b838c01611737565b90975095508591506117de60608b016115eb565b945060808a01359150808211156117f3575f80fd5b506118008a828b01611737565b989b979a50959850939692959293505050565b5f60208284031215611823575f80fd5b5051919050565b5f5b8381101561184457818101518382015260200161182c565b50505f910152565b5f815180845261186381602086016020860161182a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526118d760e085018261184c565b905060a083015184820360a08601526118f0828261184c565b91505060c083015184820360c086015261083a828261184c565b604081525f61191c6040830185611895565b905082151560208301529392505050565b5f6040828403121561193d575f80fd5b6040516040810181811067ffffffffffffffff82111715611960576119606113cd565b604052825181526020928301519281019290925250919050565b5f6040828403121561198a575f80fd5b610de5838361192d565b805161149181611472565b5f82601f8301126119ae575f80fd5b81516119bc6114f882611496565b8181528460208386010111156119d0575f80fd5b6119e182602083016020870161182a565b949350505050565b5f80604083850312156119fa575f80fd5b825167ffffffffffffffff80821115611a11575f80fd5b9084019060e08287031215611a24575f80fd5b611a2c6113fa565b611a3583611994565b8152602083015160208201526040830151604082015260608301516060820152608083015182811115611a66575f80fd5b611a728882860161199f565b60808301525060a083015182811115611a89575f80fd5b611a958882860161199f565b60a08301525060c083015182811115611aac575f80fd5b611ab88882860161199f565b60c08301525060209590950151949694955050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f611b04608083018561184c565b905082606083015295945050505050565b5f815160208301517fffffffff0000000000000000000000000000000000000000000000000000000080821693506004831015611b5c5780818460040360031b1b83161693505b505050919050565b5f8085851115611b72575f80fd5b83861115611b7e575f80fd5b5050820193919092039150565b80356020831015610de8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b608081525f611bd96080830186611895565b9050611bf2602083018580518252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff83166060830152949350505050565b5f8082840360c0811215611c28575f80fd5b6080811215611c35575f80fd5b506040516060810167ffffffffffffffff8282108183111715611c5a57611c5a6113cd565b8160405285518352602086015191508082168214611c76575f80fd5b506020820152611c89856040860161192d565b60408201529150611c9d846080850161192d565b90509250929050565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611ce65780818660040360031b1b83161692505b50509291505056fea26469706673582212203c210af0c85b10469f135dd49d1274fa8e04b8bee0c2069213c4acfe2a3036b564736f6c6343000816003360c06040526001600d5534801562000015575f80fd5b5060405162005fc238038062005fc28339810160408190526200003891620002c2565b81816001600160a01b0381166200006957604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007481620000c8565b5063ffffffff166080526040516200008c90620002b4565b604051809103905ff080158015620000a6573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c09062000117565b505062000338565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200012162000284565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200016b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000191919062000310565b620001af5760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001e95760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002b25760405163118cdaa760e01b815233600482015260240162000060565b565b6102818062005d4183390190565b5f8060408385031215620002d4575f80fd5b825163ffffffff81168114620002e8575f80fd5b60208401519092506001600160a01b038116811462000305575f80fd5b809150509250929050565b5f6020828403121562000321575f80fd5b8151801515811462000331575f80fd5b9392505050565b60805160a0516159c46200037d5f395f61078601525f818161054301528181612d7701528181613782015281816137e801528181613f570152613fbd01526159c45ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b73578063ef667aa114610b92578063f2fde38b14610bdb578063f64be4c714610bfa575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b54575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614886565b610c2e565b005b348015610374575f80fd5b5061037d610d41565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c036600461492e565b610d71565b6103d86103d3366004614976565b6110f2565b60405161039d91906149c5565b3480156103f0575f80fd5b506103676103ff366004614a07565b611258565b34801561040f575f80fd5b5061042361041e366004614a72565b611315565b60405161039d9190614b2e565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614b57565b61142b565b34801561049b575f80fd5b506104636104aa366004614bb9565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614bf8565b6115ff565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614b57565b611694565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614c20565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614c39565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614c72565b611841565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614c8b565b61188f565b34801561067e575f80fd5b5061036761068d36600461492e565b611904565b34801561069d575f80fd5b506103676106ac366004614d7f565b611df9565b3480156106bc575f80fd5b506103676106cb366004614e59565b611e63565b3480156106db575f80fd5b5061070e6106ea366004614c72565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614c72565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f31565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004614ee3565b611f44565b3480156107ea575f80fd5b506106446107f9366004614f30565b612047565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120b2565b60405161039d9190614f59565b610367610849366004614fa5565b612112565b348015610859575f80fd5b50610367610868366004615049565b6122ce565b348015610878575f80fd5b5061060c610887366004614c39565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd366004615049565b6125c0565b3480156108dd575f80fd5b5061060c6108ec366004614c39565b612694565b3480156108fc575f80fd5b5061036761090b366004615089565b61272b565b34801561091b575f80fd5b5061036761092a3660046150b2565b612b2a565b34801561093a575f80fd5b506103676109493660046150cd565b612b42565b348015610959575f80fd5b50610463610968366004614c39565b612cd8565b348015610978575f80fd5b50610367610987366004615107565b612de6565b348015610997575f80fd5b506105ae6109a6366004614bf8565b61309d565b3480156109b6575f80fd5b506103676109c5366004614c20565b613123565b3480156109d5575f80fd5b506106446109e4366004614f30565b613198565b3480156109f4575f80fd5b50610463610a03366004615121565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614c20565b6131fc565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a366004615089565b613273565b348015610a8a575f80fd5b50610367610a99366004615121565b61356e565b348015610aa9575f80fd5b50610644610ab8366004614c20565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614bf8565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614976565b613690565b60405161039d9190615160565b348015610b4d575f80fd5b505f6105ae565b348015610b5f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b7e575f80fd5b50610367610b8d366004614c20565b6139b1565b348015610b9d575f80fd5b5061070e610bac366004614bf8565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610be6575f80fd5b50610367610bf5366004614c20565b613bab565b348015610c05575f80fd5b506105ae610c14366004614c72565b60096020525f90815260409020546001600160a01b031681565b610c7d86610c3f60208a018a614c72565b60208a0135610c5460608c0160408d01615177565b898989604051602001610c6993929190615190565b604051602081830303815290604052613c01565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cd1908b908a908a908a9033908b908b9060040161522a565b5f604051808303818588803b158015610ce8575f80fd5b505af1158015610cfa573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d30929190615280565b60405180910390a150505050505050565b5f80610d50600d546001141590565b610d5b575f80610d69565b610d69600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610dc4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e7d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3591906152d1565b6002811115610e4657610e466152a4565b03610e7d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f49576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610eef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1391906152fc565b610f49576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f5288613e3f565b5f610f5d89896115ff565b9150508015610f98576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03610ff6576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001015561108c565b43861161102f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b6110fa6147d8565b6111076020840184614c72565b336001600d5414611144576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d5561118390860160808701615317565b80156111985750600e546001600160a01b0316155b156111cf576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111db3388613ea8565b915091505f6111e73490565b90505f6112026111fd60a08b0160808c01615317565b614180565b90506112138460400151838361424a565b600e54604085015160200151611235916001600160a01b03169083868c6142b1565b6040840151516112479083858b6142de565b50506001600d555095945050505050565b61126185613e3f565b5f83838360405160200161127793929190615190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112d3866112b86020880188614c72565b60208801356112cd60608a0160408b01615177565b85613c01565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611305929190615280565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661136b576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113dc573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261142191908101906153f8565b9695505050505050565b61143485613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114bf576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061150b575080155b1561154e576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611305565b6001600160a01b038083165f90815260076020908152604080832063ffffffff86168452909152812054909116908161168d5763ffffffff83165f908152600a60205260409020546001600160a01b0316915081611689576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b61169d85613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611723576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114b6565b80158061176d57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117b0576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611305565b63ffffffff81165f908152600960205260408120546001600160a01b031615801590611889575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516118ee9a9998979695949392919061542a565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561193657506001600160a01b03811615155b1561196d576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a26575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119de91906152d1565b60028111156119ef576119ef6152a4565b03611a26576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611af2576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611a98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611abc91906152fc565b611af2576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611afb88613e3f565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b62576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d4f576001600160a01b0381161580611c1c57506001600160a01b038716155b15611c53576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c7a91906154bf565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d41918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611dee565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110df565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e4e9a999897969594939291906154d2565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611eb6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ebf85613e3f565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f0890889087908790600401615530565b5f604051808303815f87803b158015611f1f575f80fd5b505af1158015611dee573d5f803e3d5ffd5b611f39614308565b611f425f61434d565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fb2576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fc292919061567b565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161203891908890889088908890889061568a565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120ab9185918591859061207690850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166143b4565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561210857602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116120ea575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161215c908790879061567b565b604051809103902090508082146121a9576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114b6565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612230908e908d908c908c9033908d908d906004016156d2565b5f604051808303818588803b158015612247575f80fd5b505af1158015612259573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122ba94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561230057506001600160a01b03811615155b15612337576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b038116156123f1576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612385573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a991906152d1565b60028111156123ba576123ba6152a4565b036123f1576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124bd576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248791906152fc565b6124bd576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c687613e3f565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361252c576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d30565b5f805f6125cd86866115ff565b91509150816001600160a01b0316846001600160a01b0316036125f5576001925050506120ab565b5f81612628576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061263d565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126775750438160200151115b1561268857600193505050506120ab565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612723576001016126d0565b949350505050565b612733614308565b6001600160a01b0382165f90815260056020526040902054829060ff16612786576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561283f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f791906152d1565b6002811115612808576128086152a4565b0361283f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561290b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d591906152fc565b61290b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612966576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612a965763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a3b87436154bf565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b20565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b32614308565b612b3d83838361444c565b505050565b612b5982612b536020860186614c72565b336125c0565b612b8f576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bb790870187614c72565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612bf48484836143b4565b612c2a576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c3584848361446f565b612c6b576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c9783612c7c6020870187614c72565b6020870135612c916060890160408a01615177565b86614528565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612cca93929190615725565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d209067ffffffffffffffff16600161574d565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612dee614308565b6001600160a01b0381165f90815260056020526040902054819060ff16612e41576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612efb576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb391906152d1565b6002811115612ec457612ec46152a4565b03612efb576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fc7576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906152fc565b612fc7576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613020576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611305565b6001600160a01b038083165f90815260066020908152604080832063ffffffff861684529091529020541680611889575063ffffffff81165f908152600960205260409020546001600160a01b031680611889576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61312b614308565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b0381165f90815260016020908152604082206120ab918591859185906131c790850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff1661446f565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981910161318d565b6001600160a01b0382165f90815260056020526040902054829060ff166132c6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561337f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613313573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333791906152d1565b6002811115613348576133486152a4565b0361337f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561344b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156133f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061341591906152fc565b61344b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613453614308565b845f0361349d5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613522565b4385116134d6576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d30565b61357784613e3f565b613582848484612694565b61358d90600161574d565b67ffffffffffffffff168167ffffffffffffffff16146135e5576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612cca565b604080518082019091525f80825260208201526136b360a0840160808501615317565b80156136c85750600e546001600160a01b0316155b156136ff576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061372790870187614c72565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137629067ffffffffffffffff16600161574d565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137cd9190614c72565b63ffffffff168152602001866020013581526020016138c7847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061381a9190614c72565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b81526020016138d9604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139259050856109a66020890189614c72565b90506001600160a01b03811663d80e9bd98361394460608a018a61576e565b61395460a08c0160808d01615317565b6040518563ffffffff1660e01b815260040161397394939291906157cf565b6040805180830381865afa15801561398d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142191906158c3565b6139b9614308565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5891906152fc565b613a8e576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613ae0576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161318d565b613bb3614308565b6001600160a01b038116613bf5576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114b6565b613bfe8161434d565b50565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d5957600181015b8467ffffffffffffffff168167ffffffffffffffff1611613cf5576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613ced576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b600101613c4d565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613dec576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114b6565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613e7157506001600160a01b038181165f908152600f6020526040902054163314155b15613bfe576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613eb06147d8565b5f80613f3785613ec36020870187614c72565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fa29190614c72565b63ffffffff16815260200186602001358152602001613fef847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061381a9190614c72565b8152602001614001604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061404d9050876109a66020890189614c72565b90505f806001600160a01b038316634389e58f8561406e60608c018c61576e565b61407e60a08e0160808f01615317565b6040518563ffffffff1660e01b815260040161409d94939291906157cf565b5f604051808303815f875af11580156140b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526140fd91908101906158dd565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161413160608b018b61576e565b866040516141429493929190615929565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b5f811561424557600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156141e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061420a9190615969565b9050805f03614245576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b825182108061425c5750808360200151115b15612b3d57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114b6565b83156142c2576142c28583866145a7565b828410156142d7576142d785828686036145a7565b5050505050565b83156142ee576142ee82856145fb565b8284101561430257614302818585036145fb565b50505050565b5f546001600160a01b03163314611f42576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114b6565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061272357506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d9061440d908790600401615980565b602060405180830381865afa158015614428573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272391906152fc565b6001600160a01b03831661446457612b3d82826145fb565b612b3d8383836145a7565b5f67ffffffffffffffff821661448b6060860160408701615177565b67ffffffffffffffff16118061272357506001600160a01b0383165f90815260026020908152604082209082906144c490880188614c72565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f8660400160208101906145049190615177565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b8061455f576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6001600160a01b0382166145e7576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b3d6001600160a01b03841683836146d6565b6001600160a01b03821661463b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614684576040519150601f19603f3d011682016040523d82523d5f602084013e614689565b606091505b5050905080612b3d576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114b6565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b3d93879390925f9283929183919082885af180614772576040513d5f823e3d81fd5b50505f513d91508115614789578060011415614796565b6001600160a01b0384163b155b15614302576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114b6565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161481760405180604001604052805f81526020015f81525090565b905290565b5f6060828403121561482c575f80fd5b50919050565b80356001600160a01b0381168114614245575f80fd5b5f8083601f840112614858575f80fd5b50813567ffffffffffffffff81111561486f575f80fd5b60208301915083602082850101111561168d575f80fd5b5f805f805f805f60e0888a03121561489c575f80fd5b6148a6898961481c565b96506148b460608901614832565b95506080880135945060a088013567ffffffffffffffff808211156148d7575f80fd5b6148e38b838c01614848565b909650945060c08a01359150808211156148fb575f80fd5b506149088a828b01614848565b989b979a50959850939692959293505050565b803563ffffffff81168114614245575f80fd5b5f805f8060808587031215614941575f80fd5b61494a85614832565b93506149586020860161491b565b925061496660408601614832565b9396929550929360600135925050565b5f8060408385031215614987575f80fd5b823567ffffffffffffffff81111561499d575f80fd5b830160a081860312156149ae575f80fd5b91506149bc60208401614832565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614a00604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614a1b575f80fd5b614a2486614832565b9450614a33876020880161481c565b93506080860135925060a086013567ffffffffffffffff811115614a55575f80fd5b614a6188828901614848565b969995985093965092949392505050565b5f805f8060808587031215614a85575f80fd5b614a8e85614832565b9350614a9c60208601614832565b9250614aaa6040860161491b565b9150614ab86060860161491b565b905092959194509250565b5f5b83811015614add578181015183820152602001614ac5565b50505f910152565b5f8151808452614afc816020860160208601614ac3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120ab6020830184614ae5565b803567ffffffffffffffff81168114614245575f80fd5b5f805f805f60a08688031215614b6b575f80fd5b614b7486614832565b9450614b826020870161491b565b935060408601359250614b9760608701614b40565b949793965091946080013592915050565b803561ffff81168114614245575f80fd5b5f805f8060808587031215614bcc575f80fd5b614bd585614832565b9350614be360208601614832565b925060408501359150614ab860608601614ba8565b5f8060408385031215614c09575f80fd5b614c1283614832565b91506149bc6020840161491b565b5f60208284031215614c30575f80fd5b6120ab82614832565b5f805f60608486031215614c4b575f80fd5b614c5484614832565b9250614c626020850161491b565b9150604084013590509250925092565b5f60208284031215614c82575f80fd5b6120ab8261491b565b5f805f805f805f805f805f806101208d8f031215614ca7575f80fd5b614cb08d614832565b9b50614cbe60208e01614832565b9a5060408d01359950614cd360608e01614ba8565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614cfb575f80fd5b614d0b8e60c08f01358f01614848565b909650945067ffffffffffffffff60e08e01351115614d28575f80fd5b614d388e60e08f01358f01614848565b909450925067ffffffffffffffff6101008e01351115614d56575f80fd5b614d678e6101008f01358f01614848565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614d9a575f80fd5b614da48d8d61481c565b9a50614db260608d01614832565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614de2575f80fd5b614df28e60e08f01358f01614848565b90975095506101008d0135811015614e08575f80fd5b614e198e6101008f01358f01614848565b90955093506101208d0135811015614e2f575f80fd5b50614e418d6101208e01358e01614848565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614e6c575f80fd5b614e7585614832565b9350614e8360208601614832565b9250604085013567ffffffffffffffff80821115614e9f575f80fd5b818701915087601f830112614eb2575f80fd5b813581811115614ec0575f80fd5b8860208260051b8501011115614ed4575f80fd5b95989497505060200194505050565b5f805f805f60808688031215614ef7575f80fd5b614f0086614832565b945060208601359350614f1560408701614ba8565b9250606086013567ffffffffffffffff811115614a55575f80fd5b5f8060808385031215614f41575f80fd5b614f4b848461481c565b91506149bc60608401614832565b602080825282518282018190525f9190848201906040850190845b81811015614f995783516001600160a01b031683529284019291840191600101614f74565b50909695505050505050565b5f805f805f805f8060c0898b031215614fbc575f80fd5b614fc589614832565b9750614fd360208a01614832565b965060408901359550614fe860608a01614ba8565b9450608089013567ffffffffffffffff80821115615004575f80fd5b6150108c838d01614848565b909650945060a08b0135915080821115615028575f80fd5b506150358b828c01614848565b999c989b5096995094979396929594505050565b5f805f6060848603121561505b575f80fd5b61506484614832565b92506150726020850161491b565b915061508060408501614832565b90509250925092565b5f805f6060848603121561509b575f80fd5b6150a48461491b565b9250614c6260208501614832565b5f805f606084860312156150c4575f80fd5b6150a484614832565b5f805f60a084860312156150df575f80fd5b6150e9858561481c565b92506150f760608501614832565b9150608084013590509250925092565b5f8060408385031215615118575f80fd5b6149ae8361491b565b5f805f8060808587031215615134575f80fd5b61513d85614832565b935061514b6020860161491b565b925060408501359150614ab860608601614b40565b815181526020808301519082015260408101611889565b5f60208284031215615187575f80fd5b6120ab82614b40565b838152818360208301375f910160200190815292915050565b63ffffffff6151b78261491b565b1682526020810135602083015267ffffffffffffffff6151d960408301614b40565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b61523481896151a9565b86606082015260e060808201525f61525060e0830187896151e3565b6001600160a01b03861660a084015282810360c08401526152728185876151e3565b9a9950505050505050505050565b6080810161528e82856151a9565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f602082840312156152e1575f80fd5b8151600381106120ab575f80fd5b8015158114613bfe575f80fd5b5f6020828403121561530c575f80fd5b81516120ab816152ef565b5f60208284031215615327575f80fd5b81356120ab816152ef565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011261536e575f80fd5b815167ffffffffffffffff8082111561538957615389615332565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156153cf576153cf615332565b816040528381528660208588010111156153e7575f80fd5b611421846020830160208901614ac3565b5f60208284031215615408575f80fd5b815167ffffffffffffffff81111561541e575f80fd5b6127238482850161535f565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f61545960e08301888a6151e3565b82810360a084015261546c8187896151e3565b905082810360c08401526154818185876151e3565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561188957611889615492565b5f6101206154e0838e6151a9565b8b60608401528a60808401528960a08401528060c0840152615505818401898b6151e3565b905082810360e084015261551a8187896151e3565b90508281036101008401526154818185876151e3565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b8981101561566b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c36030181126155c4575f80fd5b8b0163ffffffff806155d58361491b565b168552806155e488840161491b565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811261561d575f80fd5b01858101903567ffffffffffffffff811115615637575f80fd5b803603821315615645575f80fd5b878986015261565788860182846151e3565b958701959450505090840190600101615564565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a060808301526156c660a0830184866151e3565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a060408401526156fb60a08401888a6151e3565b818716606085015283810360808501526157168186886151e3565b9b9a5050505050505050505050565b60a0810161573382866151a9565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614a0057614a00615492565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126157a1575f80fd5b83018035915067ffffffffffffffff8211156157bb575f80fd5b60200191503681900382131561168d575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f606086015161581f60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152615850610140840182614ae5565b905082810360208401526158658186886151e3565b915050612ddd604083018415159052565b5f60408284031215615886575f80fd5b6040516040810181811067ffffffffffffffff821117156158a9576158a9615332565b604052825181526020928301519281019290925250919050565b5f604082840312156158d3575f80fd5b6120ab8383615876565b5f80606083850312156158ee575f80fd5b6158f88484615876565b9150604083015167ffffffffffffffff811115615913575f80fd5b61591f8582860161535f565b9150509250929050565b606081525f61593b6060830187614ae5565b828103602084015261594e8186886151e3565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615979575f80fd5b5051919050565b6060810161188982846151a956fea2646970667358221220938f9466c98d432f294c8fa92afa649818bd8c0b591d10b7b71b464300e2a18764736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c6343000816003360e06040526001600d5534801562000015575f80fd5b5060405162006193380380620061938339810160408190526200003891620002ef565b828281816001600160a01b0381166200006b57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007681620000d9565b5063ffffffff166080526040516200008e90620002c5565b604051809103905ff080158015620000a8573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c29062000128565b50506001600160a01b031660c05250620003679050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200013262000295565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200017c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a291906200033f565b620001c05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001fa5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002c35760405163118cdaa760e01b815233600482015260240162000062565b565b6102818062005f1283390190565b80516001600160a01b0381168114620002ea575f80fd5b919050565b5f805f6060848603121562000302575f80fd5b835163ffffffff8116811462000316575f80fd5b92506200032660208501620002d3565b91506200033660408501620002d3565b90509250925092565b5f6020828403121562000350575f80fd5b8151801515811462000360575f80fd5b9392505050565b60805160a05160c051615b48620003ca5f395f8181610b500152818161314e015281816141df01526143f001525f61078601525f818161054301528181612d98015281816137b40152818161381a01528181613f860152613fec0152615b485ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b93578063ef667aa114610bb2578063f2fde38b14610bfb578063f64be4c714610c1a575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b74575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614a0a565b610c4e565b005b348015610374575f80fd5b5061037d610d61565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c0366004614ab2565b610d91565b6103d86103d3366004614afa565b611112565b60405161039d9190614b49565b3480156103f0575f80fd5b506103676103ff366004614b8b565b611279565b34801561040f575f80fd5b5061042361041e366004614bf6565b611336565b60405161039d9190614cb2565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614cdb565b61144c565b34801561049b575f80fd5b506104636104aa366004614d3d565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614d7c565b611620565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614cdb565b6116b5565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614da4565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614dbd565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614df6565b611862565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614e0f565b6118b0565b34801561067e575f80fd5b5061036761068d366004614ab2565b611925565b34801561069d575f80fd5b506103676106ac366004614f03565b611e1a565b3480156106bc575f80fd5b506103676106cb366004614fdd565b611e84565b3480156106db575f80fd5b5061070e6106ea366004614df6565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614df6565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f52565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004615067565b611f65565b3480156107ea575f80fd5b506106446107f93660046150b4565b612068565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120d3565b60405161039d91906150dd565b610367610849366004615129565b612133565b348015610859575f80fd5b506103676108683660046151cd565b6122ef565b348015610878575f80fd5b5061060c610887366004614dbd565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd3660046151cd565b6125e1565b3480156108dd575f80fd5b5061060c6108ec366004614dbd565b6126b5565b3480156108fc575f80fd5b5061036761090b36600461520d565b61274c565b34801561091b575f80fd5b5061036761092a366004615236565b612b4b565b34801561093a575f80fd5b50610367610949366004615251565b612b63565b348015610959575f80fd5b50610463610968366004614dbd565b612cf9565b348015610978575f80fd5b5061036761098736600461528b565b612e07565b348015610997575f80fd5b506105ae6109a6366004614d7c565b6130be565b3480156109b6575f80fd5b506103676109c5366004614da4565b613144565b3480156109d5575f80fd5b506106446109e43660046150b4565b6131c3565b3480156109f4575f80fd5b50610463610a033660046152a5565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614da4565b613227565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a36600461520d565b6132a5565b348015610a8a575f80fd5b50610367610a993660046152a5565b6135a0565b348015610aa9575f80fd5b50610644610ab8366004614da4565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614d7c565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614afa565b6136c2565b60405161039d91906152e4565b348015610b4d575f80fd5b507f00000000000000000000000000000000000000000000000000000000000000006105ae565b348015610b7f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b9e575f80fd5b50610367610bad366004614da4565b6139e3565b348015610bbd575f80fd5b5061070e610bcc366004614d7c565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c06575f80fd5b50610367610c15366004614da4565b613bdd565b348015610c25575f80fd5b506105ae610c34366004614df6565b60096020525f90815260409020546001600160a01b031681565b610c9d86610c5f60208a018a614df6565b60208a0135610c7460608c0160408d016152fb565b898989604051602001610c8993929190615314565b604051602081830303815290604052613c30565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cf1908b908a908a908a9033908b908b906004016153ae565b5f604051808303818588803b158015610d08575f80fd5b505af1158015610d1a573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d50929190615404565b60405180910390a150505050505050565b5f80610d70600d546001141590565b610d7b575f80610d89565b610d89600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610de4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e9d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e559190615455565b6002811115610e6657610e66615428565b03610e9d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f69576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610f0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f339190615480565b610f69576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f7288613e6e565b5f610f7d8989611620565b9150508015610fb8576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03611016576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600101556110ac565b43861161104f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b61111a61495c565b6111276020840184614df6565b336001600d5414611164576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d556111a39086016080870161549b565b80156111b85750600e546001600160a01b0316155b156111ef576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111fb3388613ed7565b915091505f6112086141af565b90505f61122361121e60a08b0160808c0161549b565b614255565b90506112348460400151838361431f565b600e54604085015160200151611256916001600160a01b03169083868c614386565b6040840151516112689083858b6143b3565b50506001600d555095945050505050565b61128285613e6e565b5f83838360405160200161129893929190615314565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112f4866112d96020880188614df6565b60208801356112ee60608a0160408b016152fb565b85613c30565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611326929190615404565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661138c576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113fd573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611442919081019061557c565b9695505050505050565b61145585613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114e0576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061152c575080155b1561156f576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611326565b6001600160a01b038083165f90815260076020908152604080832063ffffffff8616845290915281205490911690816116ae5763ffffffff83165f908152600a60205260409020546001600160a01b03169150816116aa576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b6116be85613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611744576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114d7565b80158061178e57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117d1576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611326565b63ffffffff81165f908152600960205260408120546001600160a01b0316158015906118aa575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d60405161190f9a999897969594939291906155ae565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561195757506001600160a01b03811615155b1561198e576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a47575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ff9190615455565b6002811115611a1057611a10615428565b03611a47576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611b13576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611ab9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611add9190615480565b611b13576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b1c88613e6e565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b83576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d70576001600160a01b0381161580611c3d57506001600160a01b038716155b15611c74576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c9b9190615643565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d62918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611e0f565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110ff565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e6f9a99989796959493929190615656565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611ed7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ee085613e6e565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f29908890879087906004016156b4565b5f604051808303815f87803b158015611f40575f80fd5b505af1158015611e0f573d5f803e3d5ffd5b611f5a61441e565b611f635f614463565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fd3576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fe39291906157ff565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161205991908890889088908890889061580e565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120cc9185918591859061209790850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166144ca565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561212957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161210b575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161217d90879087906157ff565b604051809103902090508082146121ca576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114d7565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612251908e908d908c908c9033908d908d90600401615856565b5f604051808303818588803b158015612268575f80fd5b505af115801561227a573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122db94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561232157506001600160a01b03811615155b15612358576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612412576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ca9190615455565b60028111156123db576123db615428565b03612412576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124de576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612484573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124a89190615480565b6124de576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124e787613e6e565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361254d576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d50565b5f805f6125ee8686611620565b91509150816001600160a01b0316846001600160a01b031603612616576001925050506120cc565b5f81612649576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061265e565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126985750438160200151115b156126a957600193505050506120cc565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612744576001016126f1565b949350505050565b61275461441e565b6001600160a01b0382165f90815260056020526040902054829060ff166127a7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615612860575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128189190615455565b600281111561282957612829615428565b03612860576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561292c576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f69190615480565b61292c576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612987576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612ab75763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a5c8743615643565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b41565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b5361441e565b612b5e838383614562565b505050565b612b7a82612b746020860186614df6565b336125e1565b612bb0576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bd890870187614df6565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612c158484836144ca565b612c4b576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c56848483614585565b612c8c576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cb883612c9d6020870187614df6565b6020870135612cb26060890160408a016152fb565b8661463e565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612ceb939291906158a9565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d419067ffffffffffffffff1660016158d1565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612e0f61441e565b6001600160a01b0381165f90815260056020526040902054819060ff16612e62576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612f1c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed49190615455565b6002811115612ee557612ee5615428565b03612f1c576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fe8576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fb29190615480565b612fe8576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613041576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611326565b6001600160a01b038083165f90815260066020908152604080832063ffffffff8616845290915290205416806118aa575063ffffffff81165f908152600960205260409020546001600160a01b0316806118aa576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61314c61441e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036131b7576040517f10647d0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131c0816146bd565b50565b6001600160a01b0381165f90815260016020908152604082206120cc918591859185906131f290850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff16614585565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d798398191015b60405180910390a150565b6001600160a01b0382165f90815260056020526040902054829060ff166132f8576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b038116156133b1575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133699190615455565b600281111561337a5761337a615428565b036133b1576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561347d576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015613423573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134479190615480565b61347d576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61348561441e565b845f036134cf5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613554565b438511613508576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d50565b6135a984613e6e565b6135b48484846126b5565b6135bf9060016158d1565b67ffffffffffffffff168167ffffffffffffffff1614613617576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612ceb565b604080518082019091525f80825260208201526136e560a084016080850161549b565b80156136fa5750600e546001600160a01b0316155b15613731576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061375990870187614df6565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137949067ffffffffffffffff1660016158d1565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137ff9190614df6565b63ffffffff168152602001866020013581526020016138f9847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061384c9190614df6565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b815260200161390b60408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139579050856109a66020890189614df6565b90506001600160a01b03811663d80e9bd98361397660608a018a6158f2565b61398660a08c0160808d0161549b565b6040518563ffffffff1660e01b81526004016139a59493929190615953565b6040805180830381865afa1580156139bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114429190615a47565b6139eb61441e565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a8a9190615480565b613ac0576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613b12576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161329a565b613be561441e565b6001600160a01b038116613c27576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114d7565b6131c081614463565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d8857600181015b8467ffffffffffffffff168167ffffffffffffffff1611613d24576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613d1c576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b600101613c7c565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613e1b576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114d7565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613ea057506001600160a01b038181165f908152600f6020526040902054163314155b156131c0576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613edf61495c565b5f80613f6685613ef26020870187614df6565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fd19190614df6565b63ffffffff1681526020018660200135815260200161401e847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061384c9190614df6565b815260200161403060408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061407c9050876109a66020890189614df6565b90505f806001600160a01b038316634389e58f8561409d60608c018c6158f2565b6140ad60a08e0160808f0161549b565b6040518563ffffffff1660e01b81526004016140cc9493929190615953565b5f604051808303815f875af11580156140e7573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261412c9190810190615a61565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161416060608b018b6158f2565b866040516141719493929190615aad565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561422c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142509190615aed565b905090565b5f811561431a57600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156142bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142df9190615aed565b9050805f0361431a576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b82518210806143315750808360200151115b15612b5e57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114d7565b83156143975761439785838661472b565b828410156143ac576143ac858286860361472b565b5050505050565b34156143eb576040517f9a317a5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144187f000000000000000000000000000000000000000000000000000000000000000085858585614386565b50505050565b5f546001600160a01b03163314611f63576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114d7565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061274457506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d90614523908790600401615b04565b602060405180830381865afa15801561453e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127449190615480565b6001600160a01b03831661457a57612b5e828261477f565b612b5e83838361472b565b5f67ffffffffffffffff82166145a160608601604087016152fb565b67ffffffffffffffff16118061274457506001600160a01b0383165f90815260026020908152604082209082906145da90880188614df6565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f86604001602081019061461a91906152fb565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b80614675576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6146c561441e565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a623969060200161329a565b6001600160a01b03821661476b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b5e6001600160a01b038416838361485a565b6001600160a01b0382166147bf576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614808576040519150601f19603f3d011682016040523d82523d5f602084013e61480d565b606091505b5050905080612b5e576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114d7565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b5e93879390925f9283929183919082885af1806148f6576040513d5f823e3d81fd5b50505f513d9150811561490d57806001141561491a565b6001600160a01b0384163b155b15614418576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114d7565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161499b60405180604001604052805f81526020015f81525090565b905290565b5f606082840312156149b0575f80fd5b50919050565b80356001600160a01b038116811461431a575f80fd5b5f8083601f8401126149dc575f80fd5b50813567ffffffffffffffff8111156149f3575f80fd5b6020830191508360208285010111156116ae575f80fd5b5f805f805f805f60e0888a031215614a20575f80fd5b614a2a89896149a0565b9650614a38606089016149b6565b95506080880135945060a088013567ffffffffffffffff80821115614a5b575f80fd5b614a678b838c016149cc565b909650945060c08a0135915080821115614a7f575f80fd5b50614a8c8a828b016149cc565b989b979a50959850939692959293505050565b803563ffffffff8116811461431a575f80fd5b5f805f8060808587031215614ac5575f80fd5b614ace856149b6565b9350614adc60208601614a9f565b9250614aea604086016149b6565b9396929550929360600135925050565b5f8060408385031215614b0b575f80fd5b823567ffffffffffffffff811115614b21575f80fd5b830160a08186031215614b32575f80fd5b9150614b40602084016149b6565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614b84604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614b9f575f80fd5b614ba8866149b6565b9450614bb787602088016149a0565b93506080860135925060a086013567ffffffffffffffff811115614bd9575f80fd5b614be5888289016149cc565b969995985093965092949392505050565b5f805f8060808587031215614c09575f80fd5b614c12856149b6565b9350614c20602086016149b6565b9250614c2e60408601614a9f565b9150614c3c60608601614a9f565b905092959194509250565b5f5b83811015614c61578181015183820152602001614c49565b50505f910152565b5f8151808452614c80816020860160208601614c47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120cc6020830184614c69565b803567ffffffffffffffff8116811461431a575f80fd5b5f805f805f60a08688031215614cef575f80fd5b614cf8866149b6565b9450614d0660208701614a9f565b935060408601359250614d1b60608701614cc4565b949793965091946080013592915050565b803561ffff8116811461431a575f80fd5b5f805f8060808587031215614d50575f80fd5b614d59856149b6565b9350614d67602086016149b6565b925060408501359150614c3c60608601614d2c565b5f8060408385031215614d8d575f80fd5b614d96836149b6565b9150614b4060208401614a9f565b5f60208284031215614db4575f80fd5b6120cc826149b6565b5f805f60608486031215614dcf575f80fd5b614dd8846149b6565b9250614de660208501614a9f565b9150604084013590509250925092565b5f60208284031215614e06575f80fd5b6120cc82614a9f565b5f805f805f805f805f805f806101208d8f031215614e2b575f80fd5b614e348d6149b6565b9b50614e4260208e016149b6565b9a5060408d01359950614e5760608e01614d2c565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614e7f575f80fd5b614e8f8e60c08f01358f016149cc565b909650945067ffffffffffffffff60e08e01351115614eac575f80fd5b614ebc8e60e08f01358f016149cc565b909450925067ffffffffffffffff6101008e01351115614eda575f80fd5b614eeb8e6101008f01358f016149cc565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614f1e575f80fd5b614f288d8d6149a0565b9a50614f3660608d016149b6565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614f66575f80fd5b614f768e60e08f01358f016149cc565b90975095506101008d0135811015614f8c575f80fd5b614f9d8e6101008f01358f016149cc565b90955093506101208d0135811015614fb3575f80fd5b50614fc58d6101208e01358e016149cc565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614ff0575f80fd5b614ff9856149b6565b9350615007602086016149b6565b9250604085013567ffffffffffffffff80821115615023575f80fd5b818701915087601f830112615036575f80fd5b813581811115615044575f80fd5b8860208260051b8501011115615058575f80fd5b95989497505060200194505050565b5f805f805f6080868803121561507b575f80fd5b615084866149b6565b94506020860135935061509960408701614d2c565b9250606086013567ffffffffffffffff811115614bd9575f80fd5b5f80608083850312156150c5575f80fd5b6150cf84846149a0565b9150614b40606084016149b6565b602080825282518282018190525f9190848201906040850190845b8181101561511d5783516001600160a01b0316835292840192918401916001016150f8565b50909695505050505050565b5f805f805f805f8060c0898b031215615140575f80fd5b615149896149b6565b975061515760208a016149b6565b96506040890135955061516c60608a01614d2c565b9450608089013567ffffffffffffffff80821115615188575f80fd5b6151948c838d016149cc565b909650945060a08b01359150808211156151ac575f80fd5b506151b98b828c016149cc565b999c989b5096995094979396929594505050565b5f805f606084860312156151df575f80fd5b6151e8846149b6565b92506151f660208501614a9f565b9150615204604085016149b6565b90509250925092565b5f805f6060848603121561521f575f80fd5b61522884614a9f565b9250614de6602085016149b6565b5f805f60608486031215615248575f80fd5b615228846149b6565b5f805f60a08486031215615263575f80fd5b61526d85856149a0565b925061527b606085016149b6565b9150608084013590509250925092565b5f806040838503121561529c575f80fd5b614b3283614a9f565b5f805f80608085870312156152b8575f80fd5b6152c1856149b6565b93506152cf60208601614a9f565b925060408501359150614c3c60608601614cc4565b8151815260208083015190820152604081016118aa565b5f6020828403121561530b575f80fd5b6120cc82614cc4565b838152818360208301375f910160200190815292915050565b63ffffffff61533b82614a9f565b1682526020810135602083015267ffffffffffffffff61535d60408301614cc4565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6153b8818961532d565b86606082015260e060808201525f6153d460e083018789615367565b6001600160a01b03861660a084015282810360c08401526153f6818587615367565b9a9950505050505050505050565b60808101615412828561532d565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60208284031215615465575f80fd5b8151600381106120cc575f80fd5b80151581146131c0575f80fd5b5f60208284031215615490575f80fd5b81516120cc81615473565b5f602082840312156154ab575f80fd5b81356120cc81615473565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126154f2575f80fd5b815167ffffffffffffffff8082111561550d5761550d6154b6565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715615553576155536154b6565b8160405283815286602085880101111561556b575f80fd5b611442846020830160208901614c47565b5f6020828403121561558c575f80fd5b815167ffffffffffffffff8111156155a2575f80fd5b612744848285016154e3565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f6155dd60e08301888a615367565b82810360a08401526155f0818789615367565b905082810360c0840152615605818587615367565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156118aa576118aa615616565b5f610120615664838e61532d565b8b60608401528a60808401528960a08401528060c0840152615689818401898b615367565b905082810360e084015261569e818789615367565b9050828103610100840152615605818587615367565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b898110156157ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c3603018112615748575f80fd5b8b0163ffffffff8061575983614a9f565b16855280615768888401614a9f565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181126157a1575f80fd5b01858101903567ffffffffffffffff8111156157bb575f80fd5b8036038213156157c9575f80fd5b87898601526157db8886018284615367565b9587019594505050908401906001016156e8565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a0608083015261584a60a083018486615367565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a0604084015261587f60a08401888a615367565b8187166060850152838103608085015261589a818688615367565b9b9a5050505050505050505050565b60a081016158b7828661532d565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614b8457614b84615616565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615925575f80fd5b83018035915067ffffffffffffffff82111561593f575f80fd5b6020019150368190038213156116ae575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f60608601516159a360c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e06101208401526159d4610140840182614c69565b905082810360208401526159e9818688615367565b915050612dfe604083018415159052565b5f60408284031215615a0a575f80fd5b6040516040810181811067ffffffffffffffff82111715615a2d57615a2d6154b6565b604052825181526020928301519281019290925250919050565b5f60408284031215615a57575f80fd5b6120cc83836159fa565b5f8060608385031215615a72575f80fd5b615a7c84846159fa565b9150604083015167ffffffffffffffff811115615a97575f80fd5b615aa3858286016154e3565b9150509250929050565b606081525f615abf6060830187614c69565b8281036020840152615ad2818688615367565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615afd575f80fd5b5051919050565b606081016118aa828461532d56fea264697066735822122068baa86dcd9bd8142959c16f23b905a6a20b9dbc18984656c1ecce183a4b190464736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c63430008160033608060405234801561000f575f80fd5b506040516200196d3803806200196d83398101604081905261003091610108565b338061005557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005e816100b9565b506001600160a01b03165f908152600260205260409020805460ff1916600190811790915580546001600160801b03191668056bc75e2d6310000017905560058054602f60801b6001600160801b0391909116179055610135565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610118575f80fd5b81516001600160a01b038116811461012e575f80fd5b9392505050565b61182a80620001435f395ff3fe608060405260043610610178575f3560e01c80638ca2fb08116100d1578063d350ad251161007c578063e0ad121a11610057578063e0ad121a14610607578063f2fde38b146106ba578063fd9be522146106d9575f80fd5b8063d350ad25146104d4578063da26663a146104f3578063dbbb4155146105e8575f80fd5b8063c1723a1d116100ac578063c1723a1d1461045f578063c184032714610472578063cd68b79b14610498575f80fd5b80638ca2fb08146103b55780638da5cb5b146103f357806392807f581461041c575f80fd5b80635d6d7ccb116101315780637bc3c9ab1161010c5780637bc3c9ab146102fa5780637dc438a41461033f57806388a4124c1461035e575f80fd5b80635d6d7ccb146102765780635e280f1114610295578063715018a6146102e6575f80fd5b80633161b7f6116101615780633161b7f6146101d257806336a5beba146101f157806352a7251014610257575f80fd5b806311f2c3431461017c5780632f7cb0b4146101b1575b5f80fd5b348015610187575f80fd5b5061019e61019636600461145a565b5f9392505050565b6040519081526020015b60405180910390f35b3480156101bc575f80fd5b506101d06101cb3660046114a9565b6106f8565b005b3480156101dd575f80fd5b506101d06101ec3660046114c9565b610735565b3480156101fc575f80fd5b506040805180820182525f8082526020918201528151808301835260045467ffffffffffffffff811680835263ffffffff680100000000000000009092048216928401928352845190815291511691810191909152016101a8565b348015610262575f80fd5b506101d061027136600461155b565b610901565b348015610281575f80fd5b506101d06102903660046114a9565b61095e565b3480156102a0575f80fd5b506006546102c19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a8565b3480156102f1575f80fd5b506101d0610a23565b348015610305575f80fd5b506103196103143660046115a5565b610a36565b604080519283526fffffffffffffffffffffffffffffffff9091166020830152016101a8565b34801561034a575f80fd5b506101d06103593660046115c0565b610ad0565b348015610369575f80fd5b5061037d61037836600461145a565b610bd9565b604080519485526fffffffffffffffffffffffffffffffff9384166020860152918316918401919091521660608201526080016101a8565b3480156103c0575f80fd5b506103e36103cf3660046115d6565b60026020525f908152604090205460ff1681565b60405190151581526020016101a8565b3480156103fe575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166102c1565b348015610427575f80fd5b506005546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff90911681526020016101a8565b61037d61046d36600461145a565b610bf9565b34801561047d575f80fd5b506001546fffffffffffffffffffffffffffffffff1661043e565b3480156104a3575f80fd5b5060055461043e9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b3480156104df575f80fd5b506101d06104ee3660046114a9565b610c29565b3480156104fe575f80fd5b506105a461050d3660046115ef565b60408051606080820183525f808352602080840182905292840181905263ffffffff94851681526003835283902083519182018452546fffffffffffffffffffffffffffffffff81168252700100000000000000000000000000000000810467ffffffffffffffff169282019290925278010000000000000000000000000000000000000000000000009091049092169082015290565b6040805182516fffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff16908201529181015163ffffffff16908201526060016101a8565b3480156105f3575f80fd5b506101d06106023660046115d6565b610c74565b348015610612575f80fd5b506105a4610621366004611608565b60408051606080820183525f808352602080840182905292840181905261ffff949094168452600382529282902082519384018352546fffffffffffffffffffffffffffffffff8116845267ffffffffffffffff700100000000000000000000000000000000820416918401919091527801000000000000000000000000000000000000000000000000900463ffffffff169082015290565b3480156106c5575f80fd5b506101d06106d43660046115d6565b610cc3565b3480156106e4575f80fd5b506101d06106f3366004611621565b610d26565b610700610d3c565b600580546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055565b336107545f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146107b757335f9081526002602052604090205460ff166107b7576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156108fc57368383838181106107d4576107d4611649565b6080029190910191506108f390506107ef60208301836115ef565b6108013684900384016020850161168d565b805160208083015160409384015184516060810186526fffffffffffffffffffffffffffffffff948516815267ffffffffffffffff92831681850190815263ffffffff9283168288019081529783165f908152600390955295909320925183549551965194167fffffffffffffffff000000000000000000000000000000000000000000000000909516949094177001000000000000000000000000000000009590911694909402939093177fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000009190921602179055565b506001016107b9565b505050565b610909610d3c565b73ffffffffffffffffffffffffffffffffffffffff919091165f90815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b3361097d5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146109e057335f9081526002602052604090205460ff166109e0576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610a2b610d3c565b610a345f610d8e565b565b5f808461ffff16606e1480610a5057508461ffff1661279f145b80610a6057508461ffff16614eaf145b15610a7d57610a748561ffff168585610e02565b91509150610ac8565b8461ffff16606f1480610a9557508461ffff16612794145b80610aa557508461ffff16614ea4145b15610ab957610a748561ffff168585610f5c565b610a748561ffff168585611104565b935093915050565b33610aef5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610b5257335f9081526002602052604090205460ff16610b52576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b626107ef60208301836115ef565b5f610b7360a083016080840161171c565b90505f610b8660c0840160a085016115ef565b6004805463ffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090921667ffffffffffffffff90941693909317179091555050565b5f805f80610be88787876111d7565b935093509350935093509350935093565b5f80808080610c0c565b60405180910390fd5b610c178888886111d7565b94509450945094505093509350935093565b610c31610d3c565b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610c7c610d3c565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ccb610d3c565b73ffffffffffffffffffffffffffffffffffffffff8116610d1a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610c03565b610d2381610d8e565b50565b610d2e610d3c565b610d3882826112ad565b5050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610a34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c03565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b63ffffffff8381165f90815260036020526040812060045460055492938493849268010000000000000000900490911690606490610e669070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1689611762565b610e7091906117ac565b610e7a9190611762565b82549091505f90610ead907801000000000000000000000000000000000000000000000000900463ffffffff1688611762565b83546004549192505f9167ffffffffffffffff70010000000000000000000000000000000090920482169184918691610ee791168b6117bf565b610ef191906117bf565b610efb91906117bf565b610f059190611762565b60015485549192506fffffffffffffffffffffffffffffffff90811691610f2d911683611762565b610f3791906117ac565b935493996fffffffffffffffffffffffffffffffff9094169850929650505050505050565b5f805f610f68866113af565b63ffffffff8082165f9081526003602052604081208054939450929091610fac91780100000000000000000000000000000000000000000000000090041688611762565b610fb890610c746117bf565b82549091505f90610fe790700100000000000000000000000000000000900467ffffffffffffffff1683611762565b63ffffffff808b165f908152600360205260408120805493945092909161102b9178010000000000000000000000000000000000000000000000009004168b611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661105a8b846117bf565b6110649190611762565b60015487549192505f916fffffffffffffffffffffffffffffffff9182169161108e911687611762565b61109891906117ac565b60015485549192505f916fffffffffffffffffffffffffffffffff918216916110c2911685611762565b6110cc91906117ac565b90505f6110d982846117bf565b9554959f6fffffffffffffffffffffffffffffffff9096169e50949c50505050505050505050505050565b63ffffffff8084165f908152600360205260408120805491928392839161114891780100000000000000000000000000000000000000000000000090041687611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661117787846117bf565b6111819190611762565b60015484549192506fffffffffffffffffffffffffffffffff908116916111a9911683611762565b6111b391906117ac565b925492986fffffffffffffffffffffffffffffffff90931697509195505050505050565b5f808080806111e8617530896117d2565b90508063ffffffff16606e148061120657508063ffffffff1661279f145b8061121857508063ffffffff16614eaf145b1561123257611228818888610e02565b9095509350611281565b8063ffffffff16606f148061124e57508063ffffffff16612794145b8061126057508063ffffffff16614ea4145b1561127057611228818888610f5c565b61127b818888611104565b90955093505b505060015460055493979296506fffffffffffffffffffffffffffffffff908116955090921692509050565b73ffffffffffffffffffffffffffffffffffffffff82166112fa576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114611350576040519150601f19603f3d011682016040523d82523d5f602084013e611355565b606091505b50509050806108fc576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c03565b5f806113bd617530846117d2565b90508063ffffffff16606f036113d65750606592915050565b8063ffffffff16612794036113ef575061278992915050565b8063ffffffff16614ea4036114085750614e9992915050565b6040517ff42c33dc00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c03565b803563ffffffff81168114611455575f80fd5b919050565b5f805f6060848603121561146c575f80fd5b61147584611442565b95602085013595506040909401359392505050565b80356fffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f602082840312156114b9575f80fd5b6114c28261148a565b9392505050565b5f80602083850312156114da575f80fd5b823567ffffffffffffffff808211156114f1575f80fd5b818501915085601f830112611504575f80fd5b813581811115611512575f80fd5b8660208260071b8501011115611526575f80fd5b60209290920196919550909350505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f806040838503121561156c575f80fd5b61157583611538565b915060208301358015158114611589575f80fd5b809150509250929050565b803561ffff81168114611455575f80fd5b5f805f606084860312156115b7575f80fd5b61147584611594565b5f60c082840312156115d0575f80fd5b50919050565b5f602082840312156115e6575f80fd5b6114c282611538565b5f602082840312156115ff575f80fd5b6114c282611442565b5f60208284031215611618575f80fd5b6114c282611594565b5f8060408385031215611632575f80fd5b61163b83611538565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b803567ffffffffffffffff81168114611455575f80fd5b5f6060828403121561169d575f80fd5b6040516060810181811067ffffffffffffffff821117156116e5577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040526116f18361148a565b81526116ff60208401611676565b602082015261171060408401611442565b60408201529392505050565b5f6020828403121561172c575f80fd5b6114c282611676565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761177957611779611735565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826117ba576117ba61177f565b500490565b8082018082111561177957611779611735565b5f63ffffffff808416806117e8576117e861177f565b9216919091069291505056fea2646970667358221220057b4584fe743c800fee37c9f14cc5705300ed67e417991ba4a7213c92a3bfad64736f6c6343000816003360e060405234801562000010575f80fd5b506040516200588138038062005881833981016040819052620000339162000185565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001cf565b6001600160a01b03821660805263ffffffff811660a05283833380620000d957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000e4816200011e565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b03989098169790971790965550620001fb945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811462000182575f80fd5b50565b5f805f806080858703121562000199575f80fd5b8451620001a6816200016d565b6020860151909450620001b9816200016d565b6040860151606090960151949790965092505050565b5f60208284031215620001e0575f80fd5b815163ffffffff81168114620001f4575f80fd5b9392505050565b60805160a05160c0516156426200023f5f395f8181612458015261264f01525f50505f81816107f80152818161093b015281816116c30152611daa01526156425ff3fe608060405260043610610186575f3560e01c806361d027b3116100d1578063d15b0d491161007c578063f2fde38b11610057578063f2fde38b14610528578063faaebd2114610547578063fd9be52214610580575f80fd5b8063d15b0d49146104be578063d80e9bd9146104dd578063f0f4426014610509575f80fd5b80638da5cb5b116100ac5780638da5cb5b1461044a5780639c33abf714610473578063c14c43491461049f575f80fd5b806361d027b3146103eb5780636750cd4c14610417578063715018a614610436575f80fd5b806329460b0b1161013157806343ea4fa91161010c57806343ea4fa9146103145780634d9632001461033357806354fd4d50146103c0575f80fd5b806329460b0b1461029c57806339e3f938146102bb5780634389e58f146102e7575f80fd5b80631881d94d116101615780631881d94d14610242578063200175f71461025c57806320efd7221461027d575f80fd5b806301ffc9a7146101915780630e97289b146101c5578063188183f414610216575f80fd5b3661018d57005b5f80fd5b34801561019c575f80fd5b506101b06101ab3660046141f9565b61059f565b60405190151581526020015b60405180910390f35b3480156101d0575f80fd5b506006546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b348015610221575f80fd5b50610235610230366004614285565b610683565b6040516101bc91906142bc565b34801561024d575f80fd5b505f6040516101bc91906142ef565b348015610267575f80fd5b5061027b61027636600461432e565b61078e565b005b348015610288575f80fd5b5061027b6102973660046143ad565b610939565b3480156102a7575f80fd5b5061027b6102b63660046143fe565b610aec565b3480156102c6575f80fd5b506102da6102d5366004614285565b610ccf565b6040516101bc91906144fe565b3480156102f2575f80fd5b5061030661030136600461451f565b610e6a565b6040516101bc929190614631565b34801561031f575f80fd5b506102da61032e366004614285565b610f1f565b34801561033e575f80fd5b5061038f61034d366004614285565b600460209081525f928352604080842090915290825290205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101bc565b3480156103cb575f80fd5b5060408051600381525f60208201526002918101919091526060016101bc565b3480156103f6575f80fd5b506003546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b348015610422575f80fd5b506101b0610431366004614654565b6112d0565b348015610441575f80fd5b5061027b6112da565b348015610455575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166101f1565b34801561047e575f80fd5b5061049261048d36600461466f565b6112ed565b6040516101bc91906146b7565b3480156104aa575f80fd5b5061027b6104b93660046146c9565b6113d4565b3480156104c9575f80fd5b5061027b6104d8366004614738565b611547565b3480156104e8575f80fd5b506104fc6104f736600461451f565b6115d5565b6040516101bc919061474f565b348015610514575f80fd5b5061027b610523366004614766565b611643565b348015610533575f80fd5b5061027b610542366004614766565b611657565b348015610552575f80fd5b50610572610561366004614766565b60056020525f908152604090205481565b6040519081526020016101bc565b34801561058b575f80fd5b5061027b61059a366004614781565b6116b7565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061063157507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b8061067d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080518082019091525f808252602082015263ffffffff8083165f8181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845260048352818420948452939091528120805492939092169081900361071257825463ffffffff16610714565b805b63ffffffff1684528154640100000000900473ffffffffffffffffffffffffffffffffffffffff1680610766578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16610768565b805b73ffffffffffffffffffffffffffffffffffffffff166020860152509295945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146107df576040517f885762a700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061088391906147ab565b73ffffffffffffffffffffffffffffffffffffffff16036108d0576040517fe695d04400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108db8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109a8576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610ae657368383838181106109c5576109c56147c6565b90506020028101906109d791906147f3565b90506109ee6109e96020830183614654565b611821565b6001610a006040830160208401614654565b63ffffffff1603610a4057610a3b610a1b6020830183614654565b86610a29604085018561482f565b810190610a369190614958565b611868565b610add565b6002610a526040830160208401614654565b63ffffffff1603610a8d57610a3b610a6d6020830183614654565b86610a7b604085018561482f565b810190610a889190614b11565b611914565b610a9d6040820160208301614654565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b506001016109aa565b50505050565b610af461195d565b5f5b81811015610c915736838383818110610b1157610b116147c6565b9050602002810190610b239190614b43565b905060ff610b346020830183614b75565b610b45906040810190602001614ba7565b60ff1603610b7f576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff610b8e6020830183614b75565b610b9f906060810190604001614ba7565b60ff1603610bd9576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff610bef6020830183614b75565b610bfd906020810190614bc0565b67ffffffffffffffff1603610c3e576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5c610c4e6020830183614b75565b610c5790614bd9565b6119af565b610c885f610c6d6020840184614654565b610c7a6020850185614b75565b610c8390614bd9565b611a00565b50600101610af6565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610cc3929190614c90565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a01000000000000000000009091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610dec57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dc1575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610e5957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e2e575b505050505081525050905092915050565b604080518082019091525f80825260208201526060610e8b86868686611d93565b6006546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815292945090925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610ee990849089908990600401614e2d565b5f604051808303815f87803b158015610f00575f80fd5b505af1158015610f12573d5f803e3d5ffd5b5050505094509492505050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610fce57825467ffffffffffffffff168452610fed565b67ffffffffffffffff81811614610fed5767ffffffffffffffff811684525b815468010000000000000000900460ff166110a157825468010000000000000000900460ff161561109c578260010180548060200260200160405190810160405280929190818152602001828054801561107b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611050575b50505050506080850152825468010000000000000000900460ff1660208501525b61113d565b815468010000000000000000900460ff9081161461113d578160010180548060200260200160405190810160405280929190818152602001828054801561111c57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116110f1575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff1661120a5782546901000000000000000000900460ff161561120557826002018054806020026020016040519081016040528092919081815260200182805480156111cd57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111a2575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112be565b81546901000000000000000000900460ff908116146112be578160020180548060200260200160405190810160405280929190818152602001828054801561128657602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161125b575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112c7846119af565b50505092915050565b5f61067d82611e8a565b6112e261195d565b6112eb5f611ef0565b565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161134c576113268385610683565b60405160200161133691906142bc565b60405160208183030381529060405290506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601611393576113838385610f1f565b60405160200161133691906144fe565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610ad4565b9392505050565b6113dc61195d565b5f5b8181101561151557368383838181106113f9576113f96147c6565b60609081029290920192505f916114169150830160408401614766565b73ffffffffffffffffffffffffffffffffffffffff1603611463576040517f20e9d05a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114736040820160208301614654565b63ffffffff165f036114b1576040517f49cfac4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec906114eb8385614654565b63ffffffff16815260208101919091526040015f2061150a8282614e8f565b5050506001016113de565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610cc3929190614f27565b61154f61195d565b600254811115611599576002546040517f34084fb8000000000000000000000000000000000000000000000000000000008152610ad4918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f806116246115fd6060890160408a01614766565b61160d60808a0160608b01614654565b61161a60c08b018b61482f565b9050878a8a611f64565b604080518082019091529182526020820152925050505b949350505050565b61164b61195d565b61165481612062565b50565b61165f61195d565b73ffffffffffffffffffffffffffffffffffffffff81166116ae576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b61165481611ef0565b6116c0816120d5565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174e91906147ab565b905061175b81848461213d565b6040805133815273ffffffffffffffffffffffffffffffffffffffff851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a66698839060600161092c565b73ffffffffffffffffffffffffffffffffffffffff82166117fb576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61181c73ffffffffffffffffffffffffffffffffffffffff8416838361216d565b505050565b61182a81611e8a565b611654576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610ad4565b73ffffffffffffffffffffffffffffffffffffffff8083165f90815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc8059061092c90849086908590614fb3565b61191f828483611a00565b6119298284610f1f565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161092c9392919061500f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146112eb576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ad4565b602081015160ff161580156119c95750606081015160ff16155b15611654576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff9081161480611a1b5750602081015160ff16155b15611a625760808101515115611a5d576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae1565b806020015160ff16816080015151141580611a9d57506002611a86600160ff615076565b611a90919061508f565b60ff16816020015160ff16115b15611ad4576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae181608001516121fa565b604081015160ff9081161480611afc5750604081015160ff16155b15611b825760a08101515115611b3e576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611b7d576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c59565b806040015160ff168160a0015151141580611bbd57506002611ba6600160ff615076565b611bb0919061508f565b60ff16816040015160ff16115b15611bf4576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff161580611c155750806040015160ff16816060015160ff16115b15611c4c576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c598160a001516121fa565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a0100000000000000000000959091169490940293909317835560808401518051859493611d6f93908501920190614166565b5060a08201518051611d8b916002840191602090910190614166565b505050505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314611e17576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611e24888888612292565b90925090505f80611e55611e3e60608c0160408d01614766565b611e4e60808d0160608e01614654565b858a612359565b9092509050611e6482846150d5565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff161515806113cd5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f80611f7286866124e3565b915091505f611f828b8b846124fc565b90505f611f8f8c8c610683565b9050611fa48a825f015163ffffffff16612508565b806020015173ffffffffffffffffffffffffffffffffffffffff1663709eb6648c8e8d886040518563ffffffff1660e01b8152600401611fe794939291906150e8565b602060405180830381865afa158015612002573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120269190615132565b61203090836150d5565b91505f806120408e8e868e612550565b909250905061204f82856150d5565b9e909d509b505050505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016115ca565b335f9081526005602052604090205480821115612128576040517f34084fb80000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b335f9081526005602052604090209190039055565b73ffffffffffffffffffffffffffffffffffffffff83166121625761181c8282612691565b61181c8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261181c908490612793565b5f805b825181101561181c575f838281518110612219576122196147c6565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611612288576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b91506001016121fd565b60605f805f6122a186866124e3565b90925090505f6122ca6122ba60608a0160408b01614766565b61023060808b0160608c01614654565b90505f6122da60c08a018a61482f565b905090506122f181835f015163ffffffff16612508565b60208201516123219061230a60808c0160608d01614654565b61231a60608d0160408e01614766565b8488612832565b61232b90866150d5565b94505f806123398b86612966565b909250905061234882886150d5565b909b909a5098505050505050505050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526003549192505f9182916124809173ffffffffffffffffffffffffffffffffffffffff16907f000000000000000000000000000000000000000000000000000000000000000090849087612988565b9150915061249087878484612a33565b909550935084156124d75760035473ffffffffffffffffffffffffffffffffffffffff165f90815260056020526040812080548792906124d19084906150d5565b90915550505b50505094509492505050565b6060806124f08484612aaa565b915091505b9250929050565b5f61163b848484612b90565b8082111561254c576040517fc667af3e0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b5050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526003549192505f9182916126759173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086612c04565b9150915061268587878484612a33565b94509450505050611e81565b73ffffffffffffffffffffffffffffffffffffffff82166126de576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612734576040519150601f19603f3d011682016040523d82523d5f602084013e612739565b606091505b505090508061181c576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ad4565b5f8060205f8451602086015f885af1806127b2576040513d5f823e3d81fd5b50505f513d915081156127c95780600114156127e3565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610ae6576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ad4565b6040517f717e8a420000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff87169063717e8a429061288c9088908890889088906004016150e8565b6020604051808303815f875af11580156128a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128cc9190615132565b9050801561290e5773ffffffffffffffffffffffffffffffffffffffff86165f90815260056020526040812080548392906129089084906150d5565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff88168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b5f606061297d6005612977866151d3565b85612cab565b909590945092505050565b5f6060863b8083036129ad57604080515f808252602082019092529250925050612a29565b5f805f8761ffff1667ffffffffffffffff8111156129cd576129cd614890565b6040519080825280601f01601f1916602001820160405280156129f7576020820181803683370190505b5090505f80885160208a018c8f8ff191503d925087831115612a17578792505b828152825f602083013e909450925050505b9550959350505050565b5f80831580612a43575082516020115b15612a5257505f905080611e81565b5f83806020019051810190612a679190615132565b90508515612a7757809150612aa0565b5f6002548811612a8957600254612a8b565b875b9050808211612a9a5781612a9c565b805b9350505b5094509492505050565b6060805f80612ab98686612dfe565b9150915080515f03612b0e57604080515f808252602082019092528391612b02565b604080518082019091525f815260606020820152815260200190600190039081612adb5790505b509350935050506124f5565b6040805160018082528183019092525f91816020015b604080518082019091525f815260606020820152815260200190600190039081612b245790505090506040518060400160405280600260ff16815260200183815250815f81518110612b7857612b786147c6565b60209081029190910101529196919550909350505050565b5f80612b9c8585610f1f565b90505f83515f14612bca57835f81518110612bb957612bb96147c6565b602002602001015160200151612bda565b60405180602001604052805f8152505b90505f80612be783613034565b91509150612bf884888a85856132ce565b98975050505050505050565b5f6060853b808303612c2957604080515f808252602082019092529250925050611e81565b5f805f8761ffff1667ffffffffffffffff811115612c4957612c49614890565b6040519080825280601f01601f191660200182016040528015612c73576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115612c92578792505b828152825f602083013e90999098509650505050505050565b5f60605f612cb885613486565b90505f612cc48661356c565b805160208201206060880151604089015192935090915f612ce58284610f1f565b90505f89515f14612d1357895f81518110612d0257612d026147c6565b602002602001015160200151612d23565b60405180602001604052805f8152505b90506060612d828d846040518060a001604052808963ffffffff1681526020018c81526020018a8152602001875f015167ffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525085613589565b604051919b509150612d9a908990899060200161526e565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a0015183604051612de69392919061529c565b60405180910390a15050505050505050935093915050565b6060806002831015612e3e576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b5f612e4c60028286886152f8565b612e559161531f565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161301d57805f5b86831015612faa575f612e9e60018501858a8c6152f8565b612ea791615367565b60f81c90505f819003612ee8576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b8160ff165f03612efa57809150612f36565b8160ff168160ff1614612f3657365f612f1586868c8e6152f8565b91509150612f26898986858561385b565b9099509750859450919250829150505b60018401935f90612f4c90600301868b8d6152f8565b612f559161531f565b60f01c90505f819003612f97576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101869052602401610ad4565b8060020161ffff16850194505050612e86565b828714612fe6576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b600287111561301657365f612ffd85858b8d6152f8565b9150915061300e888885858561385b565b909850965050505b505061302b565b6130288287876139ce565b93505b50509250929050565b60608082515f0361304457915091565b5f61304e84613c49565b90508060ff166001036130fe5760408051600180825281830190925290816020015b606081526020019060019003908161307057905050925083835f8151811061309a5761309a6147c6565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506130d2846003613d6b565b825f815181106130e4576130e46147c6565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561311a5761311a614890565b604051908082528060200260200182016040528015613143578160200160208202803683370190505b5091508060ff1667ffffffffffffffff81111561316257613162614890565b60405190808252806020026020018201604052801561319557816020015b60608152602001906001900390816131805790505b5092505f8060ff5b8651831015613245576001909201915f6131b78885613dea565b6002949094019390505f6131cb8986613d6b565b90508260ff1660ff036131e057809250613236565b8260ff168160ff1614613236577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f61321e8b8784613e69565b905061322c8a8a8784613fe2565b5093909301929150815b5061ffff16929092019161319d565b8183035f613254898584613e69565b905061326288888584613fe2565b5f5b8660ff168160ff1610156132c257878160ff1681518110613287576132876147c6565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613264565b50505050505050915091565b5f80866040015187602001516132e491906153ad565b90505f5b8160ff168160ff16101561347b575f886020015160ff168260ff161061333c5760a089015160208a015161331c9084615076565b60ff168151811061332f5761332f6147c6565b602002602001015161335e565b88608001518260ff1681518110613355576133556147c6565b60200260200101515b60408051602081019091525f808252919250905b86518110156133ca578360ff16878281518110613391576133916147c6565b602002602001015160ff16036133c2578781815181106133b3576133b36147c6565b602002602001015191506133ca565b600101613372565b5089516040517f30bb3aac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416916330bb3aac91613423918d918d9087906004016153c6565b602060405180830381865afa15801561343e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134629190615132565b61346c90866150d5565b945050508060010190506132e8565b505095945050505050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001613556929190615410565b5f60605f8061359785613034565b915091505f876040015188602001516135b091906153ad565b90508060ff1667ffffffffffffffff8111156135ce576135ce614890565b6040519080825280602002602001820160405280156135f7578160200160208202803683370190505b5093505f5b8160ff168160ff161015610f12575f896020015160ff168260ff16106136505760a08a015160208b01516136309084615076565b60ff1681518110613643576136436147c6565b6020026020010151613672565b89608001518260ff1681518110613669576136696147c6565b60200260200101515b60408051602081019091525f808252919250905b85518110156136de578360ff168682815181106136a5576136a56147c6565b602002602001015160ff16036136d6578681815181106136c7576136c76147c6565b602002602001015191506136de565b600101613686565b506040517f95d376d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906395d376d790613733908d908590600401615435565b6020604051808303815f875af115801561374f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137739190615132565b878460ff1681518110613788576137886147c6565b6020026020010181815250505f878460ff16815181106137aa576137aa6147c6565b6020026020010151111561385157868360ff16815181106137cd576137cd6147c6565b60200260200101518c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461381f91906150d5565b92505081905550868360ff168151811061383b5761383b6147c6565b60200260200101518861384e91906150d5565b97505b50506001016135fc565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8616016138f5578651156138b8578684846040516020016138a4939291906154b2565b6040516020818303038152906040526138ee565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b96506139c3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff86160161398c5785511561394f5785848460405160200161393b939291906154b2565b604051602081830303815290604052613985565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b95506139c3565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff86166004820152602401610ad4565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff851601613af35760228214613a35576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613a55613a476022600286886152f8565b613a50916154d8565b61410d565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b1660248201529091506034016040516020818303038152906040529150506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff851601613c1157604282111580613b2e5750606282115b15613b65576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613b77613a476022600286886152f8565b90505f613b8b613a476042602287896152f8565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613bbe866042818a6152f8565b613bc7916154d8565b60405160086020938403029190911c9250613bf8916001916011918391889183916031916002918b918b9101615514565b60405160208183030381529060405293505050506113cd565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff85166004820152602401610ad4565b5f80805b8351821015613d27576001909101905f613c678584613dea565b905060028301925060028161ffff161015613cb1576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b5f613cbc8685613d6b565b90508060ff1660ff03613cfb576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b8316613d185760019485019460ff82161b831792505b5061ffff169190910190613c4d565b83518214613d64576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101839052602401610ad4565b5050919050565b5f613d778260016150d5565b83511015613de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401610ad4565b50016001015190565b5f613df68260026150d5565b83511015613e60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606401610ad4565b50016002015190565b606081613e7781601f6150d5565b1015613edf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ad4565b613ee982846150d5565b84511015613f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ad4565b606082158015613f715760405191505f825260208201604052613fd9565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613faa578051835260209283019201613f92565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff0361401f576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61402b8360016153ad565b90505f5b8451811015611d8b575f85828151811061404b5761404b6147c6565b602002602001015190508060ff168360ff16036140c057868281518110614074576140746147c6565b60200260200101518460405160200161408e92919061526e565b6040516020818303038152906040528783815181106140af576140af6147c6565b602002602001018190525050611d8b565b8060ff165f0361410457828683815181106140dd576140dd6147c6565b602002602001019060ff16908160ff1681525050838783815181106140af576140af6147c6565b5060010161402f565b5f6fffffffffffffffffffffffffffffffff821115614162576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526080600482015260248101839052604401610ad4565b5090565b828054828255905f5260205f209081019282156141de579160200282015b828111156141de57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614184565b506141629291505b80821115614162575f81556001016141e6565b5f60208284031215614209575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113cd575f80fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611654575f80fd5b803561426481614238565b919050565b63ffffffff81168114611654575f80fd5b803561426481614269565b5f8060408385031215614296575f80fd5b82356142a181614238565b915060208301356142b181614269565b809150509250929050565b815163ffffffff16815260208083015173ffffffffffffffffffffffffffffffffffffffff16908201526040810161067d565b6020810160038310614328577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f805f60608486031215614340575f80fd5b833561434b81614238565b9250602084013561435b81614238565b929592945050506040919091013590565b5f8083601f84011261437c575f80fd5b50813567ffffffffffffffff811115614393575f80fd5b6020830191508360208260051b85010111156124f5575f80fd5b5f805f604084860312156143bf575f80fd5b83356143ca81614238565b9250602084013567ffffffffffffffff8111156143e5575f80fd5b6143f18682870161436c565b9497909650939450505050565b5f806020838503121561440f575f80fd5b823567ffffffffffffffff811115614425575f80fd5b6144318582860161436c565b90969095509350505050565b5f815180845260208085019450602084015f5b8381101561448257815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614450565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c060808501526144dc60c085018261443d565b905060a083015184820360a08601526144f5828261443d565b95945050505050565b602081525f6113cd602083018461448d565b80358015158114614264575f80fd5b5f805f8060608587031215614532575f80fd5b843567ffffffffffffffff80821115614549575f80fd5b9086019060e0828903121561455c575f80fd5b90945060208601359080821115614571575f80fd5b818701915087601f830112614584575f80fd5b813581811115614592575f80fd5b8860208285010111156145a3575f80fd5b6020830195508094505050506145bb60408601614510565b905092959194509250565b5f5b838110156145e05781810151838201526020016145c8565b50505f910152565b5f81518084526145ff8160208601602086016145c6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f61163b60608301846145e8565b5f60208284031215614664575f80fd5b81356113cd81614269565b5f805f60608486031215614681575f80fd5b833561468c81614269565b9250602084013561469c81614238565b915060408401356146ac81614269565b809150509250925092565b602081525f6113cd60208301846145e8565b5f80602083850312156146da575f80fd5b823567ffffffffffffffff808211156146f1575f80fd5b818501915085601f830112614704575f80fd5b813581811115614712575f80fd5b866020606083028501011115614726575f80fd5b60209290920196919550909350505050565b5f60208284031215614748575f80fd5b5035919050565b81518152602080830151908201526040810161067d565b5f60208284031215614776575f80fd5b81356113cd81614238565b5f8060408385031215614792575f80fd5b823561479d81614238565b946020939093013593505050565b5f602082840312156147bb575f80fd5b81516113cd81614238565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614825575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614862575f80fd5b83018035915067ffffffffffffffff82111561487c575f80fd5b6020019150368190038213156124f5575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156148e0576148e0614890565b60405290565b60405160e0810167ffffffffffffffff811182821017156148e0576148e0614890565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561495057614950614890565b604052919050565b5f60408284031215614968575f80fd5b6040516040810181811067ffffffffffffffff8211171561498b5761498b614890565b604052823561499981614269565b815260208301356149a981614238565b60208201529392505050565b803567ffffffffffffffff81168114614264575f80fd5b803560ff81168114614264575f80fd5b5f82601f8301126149eb575f80fd5b8135602067ffffffffffffffff821115614a0757614a07614890565b8160051b614a16828201614909565b9283528481018201928281019087851115614a2f575f80fd5b83870192505b84831015614a57578235614a4881614238565b82529183019190830190614a35565b979650505050505050565b5f60c08284031215614a72575f80fd5b614a7a6148bd565b9050614a85826149b5565b8152614a93602083016149cc565b6020820152614aa4604083016149cc565b6040820152614ab5606083016149cc565b6060820152608082013567ffffffffffffffff80821115614ad4575f80fd5b614ae0858386016149dc565b608084015260a0840135915080821115614af8575f80fd5b50614b05848285016149dc565b60a08301525092915050565b5f60208284031215614b21575f80fd5b813567ffffffffffffffff811115614b37575f80fd5b61163b84828501614a62565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614825575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614825575f80fd5b5f60208284031215614bb7575f80fd5b6113cd826149cc565b5f60208284031215614bd0575f80fd5b6113cd826149b5565b5f61067d3683614a62565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c17575f80fd5b830160208101925035905067ffffffffffffffff811115614c36575f80fd5b8060051b36038213156124f5575f80fd5b8183525f60208085019450825f5b85811015614482578135614c6881614238565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614c55565b60208082528181018390525f906040808401600586901b8501820187855b88811015614e1f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112614d0f575f80fd5b8b018035614d1c81614269565b63ffffffff16855280880135368290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41018112614d58575f80fd5b8589018890520167ffffffffffffffff614d71826149b5565b1687860152614d818882016149cc565b606060ff80831682890152614d978a85016149cc565b92506080818416818a0152614dad8386016149cc565b935060a09250818416838a0152614dc681860186614be4565b60c08b81015294509150614de1905061010089018483614c47565b925050614df081840184614be4565b93509050838783030160e0880152614e09828483614c47565b978a019796505050928701925050600101614cae565b509098975050505050505050565b604081525f614e3f60408301866145e8565b8281036020840152838152838560208301375f6020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b8135614e9a81614269565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135614eda81614238565b77ffffffffffffffffffffffffffffffffffffffff000000008160201b16837fffffffffffffffff0000000000000000000000000000000000000000000000008416171784555050505050565b60208082528181018390525f90604080840186845b87811015614fa6578135614f4f81614269565b63ffffffff90811684528286013590614f6782614269565b168386015281840135614f7981614238565b73ffffffffffffffffffffffffffffffffffffffff16838501526060928301929190910190600101614f3c565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526080810161163b6040830184805163ffffffff16825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6144f5606083018461448d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561067d5761067d615049565b5f60ff8316806150c6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b8082018082111561067d5761067d615049565b63ffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201525f61512860808301846145e8565b9695505050505050565b5f60208284031215615142575f80fd5b5051919050565b5f82601f830112615158575f80fd5b813567ffffffffffffffff81111561517257615172614890565b6151a360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614909565b8181528460208386010111156151b7575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e082360312156151e3575f80fd5b6151eb6148e6565b6151f4836149b5565b81526152026020840161427a565b602082015261521360408401614259565b60408201526152246060840161427a565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff811115615256575f80fd5b61526236828601615149565b60c08301525092915050565b5f835161527f8184602088016145c6565b8351908301906152938183602088016145c6565b01949350505050565b606081525f6152ae606083018661443d565b602083820360208501526152c2828761443d565b8481036040860152855180825260208088019450909101905f5b81811015614e1f578451835293830193918301916001016152dc565b5f8085851115615306575f80fd5b83861115615312575f80fd5b5050820193919092039150565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561535f5780818660020360031b1b83161692505b505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561535f5760019490940360031b84901b1690921692915050565b60ff818116838216019081111561067d5761067d615049565b63ffffffff8516815267ffffffffffffffff8416602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201525f61512860808301846145e8565b8281525f82516154278160208501602087016145c6565b919091016020019392505050565b6040815263ffffffff83511660408201525f602084015160a0606084015261546060e08401826145e8565b90506040850151608084015267ffffffffffffffff60608601511660a084015273ffffffffffffffffffffffffffffffffffffffff60808601511660c084015282810360208401526144f581856145e8565b5f84516154c38184602089016145c6565b8201838582375f930192835250909392505050565b8035602083101561067d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b166017840152506155f4601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea264697066735822122007106a9f1a4ad0c76a6c3862b682c6be555db12b22a4209a408302fac9b0046164736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002b7c38038062002b7c833981016040819052620000339162000139565b8080816001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000072573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000098919062000168565b3380620000be57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c981620000ea565b506001600160a01b0390911660805263ffffffff1660a052506200018d9050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156200014a575f80fd5b81516001600160a01b038116811462000161575f80fd5b9392505050565b5f6020828403121562000179575f80fd5b815163ffffffff8116811462000161575f80fd5b60805160a0516129c6620001b65f395f61036301525f818161048301526104e701526129c65ff3fe608060405234801561000f575f80fd5b5060043610610115575f3560e01c806343ea4fa9116100ad5780638da5cb5b1161007d578063c40ff83511610063578063c40ff835146102b6578063e084d952146102c9578063f2fde38b146102dc575f80fd5b80638da5cb5b1461026f5780639c33abf714610296575f80fd5b806343ea4fa91461022257806354fd4d50146102355780636750cd4c14610254578063715018a614610267575f80fd5b806320efd722116100e857806320efd7221461017857806329460b0b1461018b57806339e3f9381461019e5780633c782a52146101be575f80fd5b806301ffc9a7146101195780630223536e146101415780630894edf1146101565780631881d94d14610169575b5f80fd5b61012c610127366004611bf2565b6102ef565b60405190151581526020015b60405180910390f35b61015461014f366004611c92565b61034a565b005b610154610164366004611ceb565b61035c565b60016040516101389190611d33565b610154610186366004611dd6565b6104e5565b610154610199366004611e25565b610645565b6101b16101ac366004611e77565b610828565b6040516101389190611f69565b6102026101cc366004611f7b565b600260209081525f938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff909116602083015201610138565b6101b1610230366004611e77565b6109c3565b60408051600381525f6020820152600291810191909152606001610138565b61012c610262366004611fad565b610d74565b610154610d7e565b5f5460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610138565b6102a96102a4366004611fc6565b610d91565b6040516101389190611ffd565b6101546102c4366004612067565b610e31565b61012c6102d7366004612283565b610e41565b6101546102ea3660046122cd565b610e55565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0ab7be9f000000000000000000000000000000000000000000000000000000001480610344575061034482610eb8565b92915050565b61035684848484610f4e565b50505050565b61038783837f0000000000000000000000000000000000000000000000000000000000000000611060565b5f610392848461112e565b90505f61039f858561113f565b90505f6103ac83836109c3565b90506103d08187876040516103c29291906122e6565b604051809103902086611161565b5f60405180606001604052808463ffffffff1681526020016103f2898961130a565b81526020016104018989611322565b67ffffffffffffffff908116909152604080517fa825d747000000000000000000000000000000000000000000000000000000008152835163ffffffff1660048201526020840151602482015290830151909116604482015273ffffffffffffffffffffffffffffffffffffffff8681166064830152608482018890529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b1580156104c6575f80fd5b505af11580156104d8573d5f803e3d5ffd5b5050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610554576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156103565736838383818110610571576105716122f5565b90506020028101906105839190612322565b905061059a6105956020830183611fad565b611344565b60026105ac6040830160208401611fad565b63ffffffff16036105ec576105e76105c76020830183611fad565b866105d5604085018561235e565b8101906105e291906123bf565b61138b565b61063c565b6105fc6040820160208301611fad565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610556565b61064d6113e1565b5f5b818110156107ea573683838381811061066a5761066a6122f5565b905060200281019061067c91906123f1565b905060ff61068d6020830183612423565b61069e906040810190602001612455565b60ff16036106d8576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6106e76020830183612423565b6106f8906060810190604001612455565b60ff1603610732576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6107486020830183612423565b61075690602081019061246e565b67ffffffffffffffff1603610797576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b56107a76020830183612423565b6107b090612487565b611433565b6107e15f6107c66020840184611fad565b6107d36020850185612423565b6107dc90612487565b611484565b5060010161064f565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b560828260405161081c92919061253c565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561094557602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161091a575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156109b257602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610987575b505050505081525050905092915050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610a7257825467ffffffffffffffff168452610a91565b67ffffffffffffffff81811614610a915767ffffffffffffffff811684525b815468010000000000000000900460ff16610b4557825468010000000000000000900460ff1615610b405782600101805480602002602001604051908101604052809291908181526020018280548015610b1f57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610af4575b50505050506080850152825468010000000000000000900460ff1660208501525b610be1565b815468010000000000000000900460ff90811614610be15781600101805480602002602001604051908101604052809291908181526020018280548015610bc057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b95575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610cae5782546901000000000000000000900460ff1615610ca95782600201805480602002602001604051908101604052809291908181526020018280548015610c7157602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c46575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d62565b81546901000000000000000000900460ff90811614610d625781600201805480602002602001604051908101604052809291908181526020018280548015610d2a57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610cff575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d6b84611433565b50505092915050565b5f61034482611817565b610d866113e1565b610d8f5f61187d565b565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601610df057610dca83856109c3565b604051602001610dda9190611f69565b6040516020818303038152906040529050610e2a565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610633565b9392505050565b610e3c838383611060565b505050565b5f610e4d8484846118f1565b949350505050565b610e5d6113e1565b73ffffffffffffffffffffffffffffffffffffffff8116610eac576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610633565b610eb58161187d565b50565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061034457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610344565b6040805180820182526001815267ffffffffffffffff8316602082015290516002905f90610f7f90889088906122e6565b604080519182900390912082526020808301939093529081015f9081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916110529187908790869088906126d6565b60405180910390a150505050565b6051821461109a576040517fc9bf37b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016110a684846119f1565b60ff16146110e0576040517f3a9ae7b900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff166110f18484611a12565b63ffffffff1614610e3c576040517f42d2c97e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e2a61113c8484611a21565b90565b5f61114e600d60098486612759565b61115791612780565b60e01c9392505050565b61116c8383836118f1565b6111a2576040517f4c3118d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611257575f5b836020015160ff168160ff161015611255575f83815260026020908152604080832085845290915281206080860151805191929160ff85169081106111f8576111f86122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001690556001016111b1565b505b604083015160ff1615610e3c575f5b836040015160ff168160ff161015610356575f838152600260209081526040808320858452909152812060a0860151805191929160ff85169081106112ad576112ad6122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611266565b5f611319602d600d8486612759565b610e2a916127c8565b5f611331600960018486612759565b61133a91612804565b60c01c9392505050565b61134d81611817565b610eb5576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610633565b611396828483611484565b6113a082846109c3565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516113d49392919061284a565b60405180910390a1505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610d8f576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610633565b602081015160ff1615801561144d5750606081015160ff16155b15610eb5576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff908116148061149f5750602081015160ff16155b156114e657608081015151156114e1576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611565565b806020015160ff168160800151511415806115215750600261150a600160ff6128b1565b61151491906128ca565b60ff16816020015160ff16115b15611558576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115658160800151611a30565b604081015160ff90811614806115805750604081015160ff16155b156116065760a081015151156115c2576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611601576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd565b806040015160ff168160a00151511415806116415750600261162a600160ff6128b1565b61163491906128ca565b60ff16816040015160ff16115b15611678576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806116995750806040015160ff16816060015160ff16115b156116d0576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd8160a00151611a30565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a01000000000000000000009590911694909402939093178355608084015180518594936117f393908501920190611b56565b5060a0820151805161180f916002840191602090910190611b56565b505050505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff16151580610e2a5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60208301515f9060ff161561196f575f5b846020015160ff168160ff1610156119585761194385608001518260ff1681518110611930576119306122f5565b60200260200101518585885f0151611ac8565b611950575f915050610e2a565b600101611902565b50836040015160ff165f0361196f57506001610e2a565b60608401515f5b856040015160ff168160ff1610156119e6576119b78660a001518260ff16815181106119a4576119a46122f5565b60200260200101518686895f0151611ac8565b156119de57816119c681612910565b9250508160ff165f036119de57600192505050610e2a565b600101611976565b505f95945050505050565b5f6119ff6001828486612759565b611a089161294a565b60f81c9392505050565b5f61114e6031602d8486612759565b5f611319605160318486612759565b5f805b8251811015610e3c575f838281518110611a4f57611a4f6122f5565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611611abe576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101611a33565b5f838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff16938301939093529091611b4c57508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b828054828255905f5260205f20908101928215611bce579160200282015b82811115611bce57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190611b74565b50611bda929150611bde565b5090565b5b80821115611bda575f8155600101611bdf565b5f60208284031215611c02575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e2a575f80fd5b5f8083601f840112611c41575f80fd5b50813567ffffffffffffffff811115611c58575f80fd5b602083019150836020828501011115611c6f575f80fd5b9250929050565b803567ffffffffffffffff81168114611c8d575f80fd5b919050565b5f805f8060608587031215611ca5575f80fd5b843567ffffffffffffffff811115611cbb575f80fd5b611cc787828801611c31565b90955093505060208501359150611ce060408601611c76565b905092959194509250565b5f805f60408486031215611cfd575f80fd5b833567ffffffffffffffff811115611d13575f80fd5b611d1f86828701611c31565b909790965060209590950135949350505050565b6020810160038310611d6c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b803573ffffffffffffffffffffffffffffffffffffffff81168114611c8d575f80fd5b5f8083601f840112611da5575f80fd5b50813567ffffffffffffffff811115611dbc575f80fd5b6020830191508360208260051b8501011115611c6f575f80fd5b5f805f60408486031215611de8575f80fd5b611df184611d72565b9250602084013567ffffffffffffffff811115611e0c575f80fd5b611e1886828701611d95565b9497909650939450505050565b5f8060208385031215611e36575f80fd5b823567ffffffffffffffff811115611e4c575f80fd5b611e5885828601611d95565b90969095509350505050565b803563ffffffff81168114611c8d575f80fd5b5f8060408385031215611e88575f80fd5b611e9183611d72565b9150611e9f60208401611e64565b90509250929050565b5f815180845260208085019450602084015f5b83811015611eed57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611ebb565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152611f4760c0850182611ea8565b905060a083015184820360a0860152611f608282611ea8565b95945050505050565b602081525f610e2a6020830184611ef8565b5f805f60608486031215611f8d575f80fd5b8335925060208401359150611fa460408501611d72565b90509250925092565b5f60208284031215611fbd575f80fd5b610e2a82611e64565b5f805f60608486031215611fd8575f80fd5b611fe184611e64565b9250611fef60208501611d72565b9150611fa460408501611e64565b5f602080835283518060208501525f5b818110156120295785810183015185820160400152820161200d565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f805f60408486031215612079575f80fd5b833567ffffffffffffffff81111561208f575f80fd5b61209b86828701611c31565b9094509250611fa4905060208501611e64565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156120fe576120fe6120ae565b60405290565b803560ff81168114611c8d575f80fd5b5f82601f830112612123575f80fd5b8135602067ffffffffffffffff80831115612140576121406120ae565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715612183576121836120ae565b60405293845260208187018101949081019250878511156121a2575f80fd5b6020870191505b848210156121c9576121ba82611d72565b835291830191908301906121a9565b979650505050505050565b5f60c082840312156121e4575f80fd5b6121ec6120db565b90506121f782611c76565b815261220560208301612104565b602082015261221660408301612104565b604082015261222760608301612104565b6060820152608082013567ffffffffffffffff80821115612246575f80fd5b61225285838601612114565b608084015260a084013591508082111561226a575f80fd5b5061227784828501612114565b60a08301525092915050565b5f805f60608486031215612295575f80fd5b833567ffffffffffffffff8111156122ab575f80fd5b6122b7868287016121d4565b9660208601359650604090950135949350505050565b5f602082840312156122dd575f80fd5b610e2a82611d72565b818382375f9101908152919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112612354575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612391575f80fd5b83018035915067ffffffffffffffff8211156123ab575f80fd5b602001915036819003821315611c6f575f80fd5b5f602082840312156123cf575f80fd5b813567ffffffffffffffff8111156123e5575f80fd5b610e4d848285016121d4565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612354575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612354575f80fd5b5f60208284031215612465575f80fd5b610e2a82612104565b5f6020828403121561247e575f80fd5b610e2a82611c76565b5f61034436836121d4565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124c5575f80fd5b830160208101925035905067ffffffffffffffff8111156124e4575f80fd5b8060051b3603821315611c6f575f80fd5b8183525f60208085019450825f5b85811015611eed5773ffffffffffffffffffffffffffffffffffffffff61252983611d72565b1687529582019590820190600101612503565b60208082528181018390525f906040808401600586901b8501820187855b888110156126c8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c36030181126125bb575f80fd5b8b0163ffffffff6125cb82611e64565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612601575f80fd5b8589018890520167ffffffffffffffff61261a82611c76565b168786015261262a888201612104565b606060ff808316828901526126408a8501612104565b92506080818416818a0152612656838601612104565b935060a09250818416838a015261266f81860186612492565b60c08b8101529450915061268a9050610100890184836124f5565b92505061269981840184612492565b93509050838783030160e08801526126b28284836124f5565b978a01979650505092870192505060010161255a565b509098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a08301375f60a085830101525f60a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b5f8085851115612767575f80fd5b83861115612773575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156127c05780818660040360031b1b83161692505b505092915050565b80356020831015610344577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156127c05760089490940360031b84901b1690921692915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f611f606060830184611ef8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561034457610344612884565b5f60ff831680612901577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b5f60ff82168061292257612922612884565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156127c05760019490940360031b84901b169092169291505056fea264697066735822122049ae6e8c1120ac3b04c6e78fb5426f5903144b4cb03d43aa8492006a0cbef95864736f6c6343000816003360e060405234801562000010575f80fd5b5060405162005cb238038062005cb2833981016040819052620000339162000170565b82836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000071573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000979190620001ba565b3380620000bd57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c88162000109565b506001600160a01b0391821660805263ffffffff1660a05260c092909252600655600280546001600160a01b031916939091169290921790915550620001e6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016d575f80fd5b50565b5f805f806080858703121562000184575f80fd5b8451620001918162000158565b6020860151909450620001a48162000158565b6040860151606090960151949790965092505050565b5f60208284031215620001cb575f80fd5b815163ffffffff81168114620001df575f80fd5b9392505050565b60805160a05160c051615a7e620002345f395f81816121c00152612ffa01525f610e0f01525f81816107510152818161089401528181610a0f01528181610ff80152611cee0152615a7e5ff3fe60806040526004361061019c575f3560e01c80637620fd01116100dc578063d15b0d4911610087578063f0f4426011610062578063f0f442601461055b578063f2fde38b1461057a578063faaebd2114610599578063fd9be522146105c4575f80fd5b8063d15b0d49146104f1578063d80e9bd914610510578063ea69d69d1461053c575f80fd5b80639c33abf7116100b75780639c33abf714610487578063ab750e75146104b3578063c85f4b4e146104d2575f80fd5b80637620fd01146103d65780638da5cb5b146104325780638eb0bf301461045b575f80fd5b806320efd7221161014757806354fd4d501161012257806354fd4d5014610359578063594924da146103845780636750cd4c146103a3578063715018a6146103c2575f80fd5b806320efd722146102d15780633c782a52146102f05780634389e58f1461032c575f80fd5b80631881d94d116101775780631881d94d1461024b5780631fb5122514610266578063200175f7146102b0575f80fd5b806301ffc9a7146101a7578063052368ca146101db5780630e97289b146101fa575f80fd5b366101a357005b5f80fd5b3480156101b2575f80fd5b506101c66101c1366004614622565b6105e3565b60405190151581526020015b60405180910390f35b3480156101e6575f80fd5b506101c66101f5366004614661565b6106c7565b348015610205575f80fd5b506002546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b348015610256575f80fd5b5060026040516101d291906146b5565b348015610271575f80fd5b506102a261028036600461474f565b600360209081525f938452604080852082529284528284209052825290205481565b6040519081526020016101d2565b3480156102bb575f80fd5b506102cf6102ca366004614791565b6106e7565b005b3480156102dc575f80fd5b506102cf6102eb366004614817565b610892565b3480156102fb575f80fd5b506102a261030a366004614868565b600460209081525f938452604080852082529284528284209052825290205481565b348015610337575f80fd5b5061034b6103463660046148dc565b6109f8565b6040516101d29291906149c9565b348015610364575f80fd5b5060408051600a81525f60208201526002918101919091526060016101d2565b34801561038f575f80fd5b506102cf61039e3660046149ec565b610d8d565b3480156103ae575f80fd5b506101c66103bd366004614a39565b61105c565b3480156103cd575f80fd5b506102cf611066565b3480156103e1575f80fd5b5061040660075460065473ffffffffffffffffffffffffffffffffffffffff90911691565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d2565b34801561043d575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610226565b348015610466575f80fd5b5061047a610475366004614a52565b611079565b6040516101d29190614b52565b348015610492575f80fd5b506104a66104a1366004614b64565b6114bd565b6040516101d29190614b9d565b3480156104be575f80fd5b506102cf6104cd3660046149ec565b61155d565b3480156104dd575f80fd5b506102cf6104ec366004614baf565b6115e6565b3480156104fc575f80fd5b506102cf61050b366004614bee565b6117cd565b34801561051b575f80fd5b5061052f61052a3660046148dc565b61185b565b6040516101d29190614c05565b348015610547575f80fd5b5061047a610556366004614a52565b6119c4565b348015610566575f80fd5b506102cf610575366004614c1c565b611b7e565b348015610585575f80fd5b506102cf610594366004614c1c565b611bf9565b3480156105a4575f80fd5b506102a26105b3366004614c1c565b60056020525f908152604090205481565b3480156105cf575f80fd5b506102cf6105de366004614c37565b611c5c565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061067557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b806106c157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f6106dc6106d486614e6e565b858585611dcc565b90505b949350505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610738576040517f96830d1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107dc9190614e79565b73ffffffffffffffffffffffffffffffffffffffff1603610829576040517fb77f504400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610834838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610901576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156109f2573683838381811061091e5761091e614e94565b90506020028101906109309190614ec1565b90506109476109426020830183614a39565b611fac565b60016109596040830160208401614a39565b63ffffffff1603610999576109946109746020830183614a39565b866109826040850185614efd565b81019061098f9190614f5e565b611ff3565b6109e9565b6109a96040820160208301614a39565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610903565b50505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610a7c576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6080860135610aad610a946060890160408a01614c1c565b73ffffffffffffffffffffffffffffffffffffffff1690565b14610ae4576040517fa4884a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80610af188888861203c565b90925090505f80610b22610b0b60608c0160408d01614c1c565b610b1b60808d0160608e01614a39565b858a6120c1565b9092509050610b318284614fbd565b9250610b4060c08b018b614efd565b604051610b4e929190614fd0565b604051809103902060035f8c6040016020810190610b6c9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f90812090610ba460808e0160608f01614a39565b63ffffffff1681526020808201929092526040015f90812091610bc9908e018e614fdf565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f20819055505f610ce36040518060e001604052808d5f016020810190610c0f9190614fdf565b67ffffffffffffffff1681526020018d6060016020810190610c319190614a39565b63ffffffff1681526020018d6040016020810190610c4f9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff1681526020018d6020016020810190610c7d9190614a39565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610ca960c08f018f614efd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505091525061224b565b6002546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610d3e9084908e908e9060040161503f565b5f604051808303815f87803b158015610d55575f80fd5b505af1158015610d67573d5f803e3d5ffd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610dc7576040517f864d08b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001610dd385856122b0565b60ff1614610e0d576040517f7952a82f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610e3e85856122d1565b63ffffffff1614610e7b576040517f3e96df1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e8685856122f3565b90505f610e938686612304565b90505f610ea08787612313565b73ffffffffffffffffffffffffffffffffffffffff84165f90815260036020908152604080832063ffffffff87168452825280832067ffffffffffffffff851684529091529020549091508514610f23576040517f660e96ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610f2e8484611079565b9050610f53818989604051610f44929190614fd0565b60405180910390208888612335565b5f60405180606001604052808563ffffffff168152602001610f758b8b6124ca565b815267ffffffffffffffff858116602092830152604080517fa825d747000000000000000000000000000000000000000000000000000000008152845163ffffffff16600482015292840151602484015283015116604482015273ffffffffffffffffffffffffffffffffffffffff8781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b15801561103b575f80fd5b505af115801561104d573d5f803e3d5ffd5b50505050505050505050505050565b5f6106c1826124e2565b61106e612560565b6110775f6125b2565b565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88811685526001845286852092855291909252939091208054929391929091168061113057825473ffffffffffffffffffffffffffffffffffffffff16611132565b805b73ffffffffffffffffffffffffffffffffffffffff168452815474010000000000000000000000000000000000000000900460ff1661122257825474010000000000000000000000000000000000000000900460ff161561121d57826001018054806020026020016040519081016040528092919081815260200182805480156111f057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111c5575b50505050506080850152825474010000000000000000000000000000000000000000900460ff1660208501525b6112d6565b815474010000000000000000000000000000000000000000900460ff908116146112d657816001018054806020026020016040519081016040528092919081815260200182805480156112a957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161127e575b50505050506080850152815474010000000000000000000000000000000000000000900460ff1660208501525b81547501000000000000000000000000000000000000000000900460ff166113d35782547501000000000000000000000000000000000000000000900460ff16156113ce578260020180548060200260200160405190810160405280929190818152602001828054801561137e57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611353575b505050505060a0850152825460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114ab565b81547501000000000000000000000000000000000000000000900460ff908116146114ab578160020180548060200260200160405190810160405280929190818152602001828054801561145b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611430575b505050505060a0850152815460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114b484612626565b50505092915050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161151c576114f68385611079565b6040516020016115069190614b52565b6040516020818303038152906040529050611556565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff831660048201526024016109e0565b9392505050565b8060045f8686604051611571929190614fd0565b604080519182900390912082526020808301939093529081015f90812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a95258916115d891879087908790879061506e565b60405180910390a150505050565b6115ee612560565b5f5b8181101561178f573683838381811061160b5761160b614e94565b905060200281019061161d91906150b1565b905060ff61162e60208301836150e3565b61163f906040810190602001615115565b60ff1603611679576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff61168860208301836150e3565b611699906060810190604001615115565b60ff16036116d3576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f16116e360208301836150e3565b6116ec90614e6e565b612626565b5f6116ff60208301836150e3565b61170d906020810190614c1c565b73ffffffffffffffffffffffffffffffffffffffff160361175a576040517f76df55a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117865f61176b6020840184614a39565b61177860208501856150e3565b61178190614e6e565b612677565b506001016115f0565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f3482826040516117c19291906151da565b60405180910390a15050565b6117d5612560565b60065481111561181f576006546040517fb79d12630000000000000000000000000000000000000000000000000000000081526109e0918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f8061187a8686612a25565b90925090505f6118906060890160408a01614c1c565b90505f6118a360808a0160608b01614a39565b90505f6118b08383611079565b90505f6118df82856118c96118c48f61540c565b612c5b565b8e8060c001906118d99190614efd565b8a612d2f565b82516040517fc8f8dcd100000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063c8f8dcd1906119379087908a906004016154a7565b602060405180830381865afa158015611952573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197691906154d5565b6119809082614fbd565b90505f806119908686858d612efb565b909250905061199f8284614fbd565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8084165f90815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff7401000000000000000000000000000000000000000087048116828501527501000000000000000000000000000000000000000000870481168287015276010000000000000000000000000000000000000000000090960490951660608601529182018054845181840281018401909552808552929360808601939092830182828015611b0057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611ad5575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015611b6d57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611b42575b505050505081525050905092915050565b611b86612560565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f90602001611850565b611c01612560565b73ffffffffffffffffffffffffffffffffffffffff8116611c50576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b611c59816125b2565b50565b335f9081526005602052604090205480821115611caf576040517fb79d126300000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016109e0565b335f908152600560209081526040808320858503905580517fe1758bd800000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169263e1758bd892600480820193918290030181865afa158015611d48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190614e79565b9050611d7981858561303c565b6040805133815273ffffffffffffffffffffffffffffffffffffffff861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a6669883906060016115d8565b60208401515f9060ff1615611e80575f5b856020015160ff168160ff161015611e6957611e5486608001518260ff1681518110611e0b57611e0b614e94565b60200260200101518686865f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b611e61575f9150506106df565b600101611ddd565b50846040015160ff165f03611e80575060016106df565b60608501515f5b866040015160ff168160ff161015611f2d57611efe8760a001518260ff1681518110611eb557611eb5614e94565b60200260200101518787875f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b15611f255781611f0d816154ec565b9250508160ff165f03611f25576001925050506106df565b600101611e87565b505f9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611f86576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa773ffffffffffffffffffffffffffffffffffffffff8416838361306c565b505050565b611fb5816124e2565b611c59576040517f0ff03e5400000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526024016109e0565b611ffe828483612677565b6120088284611079565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e14282848360405161088593929190615526565b60605f805f61204b8686612a25565b90925090505f61207461206460608a0160408b01614c1c565b61047560808b0160608c01614a39565b80519091506120939061208d60608b0160408c01614c1c565b856130f9565b93505f806120a2838b86613227565b90925090506120b18287614fbd565b909a909950975050505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526007549192505f9182916121e89173ffffffffffffffffffffffffffffffffffffffff16907f0000000000000000000000000000000000000000000000000000000000000000908490876132ed565b915091506121f887878484613398565b9095509350841561223f5760075473ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604081208054879290612239908490614fbd565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a01519551939861229a986001989197919673ffffffffffffffffffffffffffffffffffffffff169501615560565b6040516020818303038152906040529050919050565b5f6122be6001828486615625565b6122c79161564c565b60f81c9392505050565b5f6122e06031602d8486615625565b6122e991615694565b60e01c9392505050565b5f611556612301848461340f565b90565b5f6122e0600d60098486615625565b5f612322600960018486615625565b61232b916156da565b60c01c9392505050565b61234184848484611dcc565b612377576040517f28ca4b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084015160ff161561241e575f5b846020015160ff168160ff16101561241c575f84815260046020908152604080832086845290915281206080870151805191929160ff85169081106123cd576123cd614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9055806001019050612386565b505b604084015160ff16156109f2575f5b846040015160ff168160ff1610156124c3575f848152600460209081526040808320868452909152812060a0870151805191929160ff851690811061247457612474614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f905580600101905061242d565b5050505050565b5f6124d9602d600d8486615625565b61155691615720565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805474010000000000000000000000000000000000000000900460ff16151580611556575054760100000000000000000000000000000000000000000000900460ff16151592915050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611077576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016109e0565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff161580156126405750606081015160ff16155b15611c59576040517f9b5f9f7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806126925750602081015160ff16155b156126d957608081015151156126d4576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758565b806020015160ff16816080015151141580612714575060026126fd600160ff61575c565b6127079190615775565b60ff16816020015160ff16115b1561274b576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758816080015161341e565b604081015160ff90811614806127735750604081015160ff16155b156127f95760a081015151156127b5576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16156127f4576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d0565b806040015160ff168160a00151511415806128345750600261281d600160ff61575c565b6128279190615775565b60ff16816040015160ff16115b1561286b576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16158061288c5750806040015160ff16816060015160ff16115b156128c3576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d08160a0015161341e565b73ffffffffffffffffffffffffffffffffffffffff8381165f90815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097167fffffffffffffffffffffff000000000000000000000000000000000000000000909116177401000000000000000000000000000000000000000060ff96871602177fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000968616969096027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16959095177601000000000000000000000000000000000000000000009490951693909302939093178255608084015180518594612a0193850192019061458f565b5060a08201518051612a1d91600284019160209091019061458f565b505050505050565b6060806002831015612a65576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b5f612a736002828688615625565b612a7c916157bb565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8201612c4457805f5b86831015612bd1575f612ac560018501858a8c615625565b612ace9161564c565b60f81c90505f819003612b0f576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b8160ff165f03612b2157809150612b5d565b8160ff168160ff1614612b5d57365f612b3c86868c8e615625565b91509150612b4d89898685856134b6565b9099509750859450919250829150505b60018401935f90612b7390600301868b8d615625565b612b7c916157bb565b60f01c90505f819003612bbe576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016109e0565b8060020161ffff16850194505050612aad565b828714612c0d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b6002871115612c3d57365f612c2485858b8d615625565b91509150612c3588888585856134b6565b909850965050505b5050612c52565b612c4f828787613629565b93505b50509250929050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d830152605182015260710161229a565b5f805f612d3b846138a4565b915091505f89604001518a60200151612d549190615801565b90505f5b8160ff168160ff161015612eed575f8b6020015160ff168260ff1610612dac5760a08c015160208d0151612d8c908461575c565b60ff1681518110612d9f57612d9f614e94565b6020026020010151612dce565b8b608001518260ff1681518110612dc557612dc5614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015612e3a578360ff16868281518110612e0157612e01614e94565b602002602001015160ff1603612e3257868181518110612e2357612e23614e94565b60200260200101519150612e3a565b600101612de2565b506040517ffdb9b0f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063fdb9b0f190612e95908f908f908f908f90889060040161581a565b602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed491906154d5565b612ede9088614fbd565b96505050806001019050612d58565b505050509695505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526007549192505f9182916130209173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086613b3e565b9150915061303087878484613398565b94509450505050610d84565b73ffffffffffffffffffffffffffffffffffffffff831661306157611fa78282613be5565b611fa7838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611fa7908490613ce7565b6040517fc015bb7d0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff85169063c015bb7d9061314f90869086906004016154a7565b6020604051808303815f875af115801561316b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061318f91906154d5565b905080156131d15773ffffffffffffffffffffffffffffffffffffffff84165f90815260056020526040812080548392906131cb908490614fbd565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff86168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b5f6060816132376118c48661540c565b90505f61324b6132468761540c565b613d86565b905060606132768861326289840160408b01614c1c565b8561327060c08c018c614efd565b8b613da3565b604051919650915061328e908490849060200161587b565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a00151836040516132da939291906158a9565b60405180910390a1505050935093915050565b5f6060863b80830361331257604080515f80825260208201909252925092505061338e565b5f805f8761ffff1667ffffffffffffffff81111561333257613332614c61565b6040519080825280601f01601f19166020018201604052801561335c576020820181803683370190505b5090505f80885160208a018c8f8ff191503d92508783111561337c578792505b828152825f602083013e909450925050505b9550959350505050565b5f808315806133a8575082516020115b156133b757505f905080610d84565b5f838060200190518101906133cc91906154d5565b905085156133dc57809150613405565b5f60065488116133ee576006546133f0565b875b90508082116133ff5781613401565b805b9350505b5094509492505050565b5f6124d9605160318486615625565b5f805b8251811015611fa7575f83828151811061343d5761343d614e94565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116134ac576040517fc0762a5d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101613421565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161355057865115613513578684846040516020016134ff93929190615905565b604051602081830303815290604052613549565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b965061361e565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016135e7578551156135aa5785848460405160200161359693929190615905565b6040516020818303038152906040526135e0565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b955061361e565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016109e0565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff85160161374e5760228214613690576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6136b06136a2602260028688615625565b6136ab91615720565b614072565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050611556565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff85160161386c576042821115806137895750606282115b156137c0576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6137d26136a2602260028688615625565b90505f6137e66136a2604260228789615625565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613819866042818a615625565b61382291615720565b60405160086020938403029190911c9250613853916001916011918391889183916031916002918b918b910161592b565b6040516020818303038152906040529350505050611556565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016109e0565b60608082515f036138b457915091565b5f6138be846140cb565b90508060ff1660010361396e5760408051600180825281830190925290816020015b60608152602001906001900390816138e057905050925083835f8151811061390a5761390a614e94565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506139428460036141ed565b825f8151811061395457613954614e94565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561398a5761398a614c61565b6040519080825280602002602001820160405280156139b3578160200160208202803683370190505b5091508060ff1667ffffffffffffffff8111156139d2576139d2614c61565b604051908082528060200260200182016040528015613a0557816020015b60608152602001906001900390816139f05790505b5092505f8060ff5b8651831015613ab5576001909201915f613a27888561426c565b6002949094019390505f613a3b89866141ed565b90508260ff1660ff03613a5057809250613aa6565b8260ff168160ff1614613aa6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f613a8e8b87846142eb565b9050613a9c8a8a8784614464565b5093909301929150815b5061ffff169290920191613a0d565b8183035f613ac48985846142eb565b9050613ad288888584614464565b5f5b8660ff168160ff161015613b3257878160ff1681518110613af757613af7614e94565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613ad4565b50505050505050915091565b5f6060853b808303613b6357604080515f808252602082019092529250925050610d84565b5f805f8761ffff1667ffffffffffffffff811115613b8357613b83614c61565b6040519080825280601f01601f191660200182016040528015613bad576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115613bcc578792505b828152825f602083013e90999098509650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216613c32576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114613c88576040519150601f19603f3d011682016040523d82523d5f602084013e613c8d565b606091505b5050905080611fa7576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016109e0565b5f8060205f8451602086015f885af180613d06576040513d5f823e3d81fd5b50505f513d91508115613d1d578060011415613d37565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016109e0565b60608160a001518260c0015160405160200161229a929190615a23565b5f60605f80613db1856138a4565b915091505f8a604001518b60200151613dca9190615801565b90508060ff1667ffffffffffffffff811115613de857613de8614c61565b604051908082528060200260200182016040528015613e11578160200160208202803683370190505b5093505f5b8160ff168160ff161015614063575f8c6020015160ff168260ff1610613e6a5760a08d015160208e0151613e4a908461575c565b60ff1681518110613e5d57613e5d614e94565b6020026020010151613e8c565b8c608001518260ff1681518110613e8357613e83614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015613ef8578360ff16868281518110613ebf57613ebf614e94565b602002602001015160ff1603613ef057868181518110613ee157613ee1614e94565b60200260200101519150613ef8565b600101613ea0565b508173ffffffffffffffffffffffffffffffffffffffff1663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b8152600401613f3a95949392919061581a565b6020604051808303815f875af1158015613f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7a91906154d5565b878460ff1681518110613f8f57613f8f614e94565b6020026020010181815250505f878460ff1681518110613fb157613fb1614e94565b6020026020010151111561405957868360ff1681518110613fd457613fd4614e94565b602002602001015160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546140279190614fbd565b92505081905550868360ff168151811061404357614043614e94565b6020026020010151886140569190614fbd565b97505b5050600101613e16565b50505050965096945050505050565b5f6fffffffffffffffffffffffffffffffff8211156140c7576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016109e0565b5090565b5f80805b83518210156141a9576001909101905f6140e9858461426c565b905060028301925060028161ffff161015614133576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b5f61413e86856141ed565b90508060ff1660ff0361417d576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b831661419a5760019485019460ff82161b831792505b5061ffff1691909101906140cf565b835182146141e6576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018390526024016109e0565b5050919050565b5f6141f9826001614fbd565b83511015614263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e64730000000000000000000000000060448201526064016109e0565b50016001015190565b5f614278826002614fbd565b835110156142e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e647300000000000000000000000060448201526064016109e0565b50016002015190565b6060816142f981601f614fbd565b1015614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b61436b8284614fbd565b845110156143d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b6060821580156143f35760405191505f82526020820160405261445b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561442c578051835260209283019201614414565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff036144a1576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144ad836001615801565b90505f5b8451811015612a1d575f8582815181106144cd576144cd614e94565b602002602001015190508060ff168360ff1603614542578682815181106144f6576144f6614e94565b60200260200101518460405160200161451092919061587b565b60405160208183030381529060405287838151811061453157614531614e94565b602002602001018190525050612a1d565b8060ff165f03614586578286838151811061455f5761455f614e94565b602002602001019060ff16908160ff16815250508387838151811061453157614531614e94565b506001016144b1565b828054828255905f5260205f20908101928215614607579160200282015b8281111561460757825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906145ad565b506140c79291505b808211156140c7575f815560010161460f565b5f60208284031215614632575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611556575f80fd5b5f805f8060808587031215614674575f80fd5b843567ffffffffffffffff81111561468a575f80fd5b850160c0818803121561469b575f80fd5b966020860135965060408601359560600135945092505050565b60208101600383106146ee577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b73ffffffffffffffffffffffffffffffffffffffff81168114611c59575f80fd5b8035614720816146f4565b919050565b803563ffffffff81168114614720575f80fd5b803567ffffffffffffffff81168114614720575f80fd5b5f805f60608486031215614761575f80fd5b833561476c816146f4565b925061477a60208501614725565b915061478860408501614738565b90509250925092565b5f805f606084860312156147a3575f80fd5b83356147ae816146f4565b925060208401356147be816146f4565b929592945050506040919091013590565b5f8083601f8401126147df575f80fd5b50813567ffffffffffffffff8111156147f6575f80fd5b6020830191508360208260051b8501011115614810575f80fd5b9250929050565b5f805f60408486031215614829575f80fd5b8335614834816146f4565b9250602084013567ffffffffffffffff81111561484f575f80fd5b61485b868287016147cf565b9497909650939450505050565b5f805f6060848603121561487a575f80fd5b83359250602084013591506040840135614893816146f4565b809150509250925092565b5f8083601f8401126148ae575f80fd5b50813567ffffffffffffffff8111156148c5575f80fd5b602083019150836020828501011115614810575f80fd5b5f805f80606085870312156148ef575f80fd5b843567ffffffffffffffff80821115614906575f80fd5b9086019060e08289031215614919575f80fd5b9094506020860135908082111561492e575f80fd5b5061493b8782880161489e565b90945092505060408501358015158114614953575f80fd5b939692955090935050565b5f5b83811015614978578181015183820152602001614960565b50505f910152565b5f815180845261499781602086016020860161495e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f6106df6060830184614980565b5f805f80606085870312156149ff575f80fd5b843567ffffffffffffffff811115614a15575f80fd5b614a218782880161489e565b90989097506020870135966040013595509350505050565b5f60208284031215614a49575f80fd5b61155682614725565b5f8060408385031215614a63575f80fd5b8235614a6e816146f4565b9150614a7c60208401614725565b90509250929050565b5f815180845260208085019450602084015f5b83811015614aca57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614a98565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152614b3060c0850182614a85565b905060a083015184820360a0860152614b498282614a85565b95945050505050565b602081525f6115566020830184614ad5565b5f805f60608486031215614b76575f80fd5b614b7f84614725565b92506020840135614b8f816146f4565b915061478860408501614725565b602081525f6115566020830184614980565b5f8060208385031215614bc0575f80fd5b823567ffffffffffffffff811115614bd6575f80fd5b614be2858286016147cf565b90969095509350505050565b5f60208284031215614bfe575f80fd5b5035919050565b8151815260208083015190820152604081016106c1565b5f60208284031215614c2c575f80fd5b8135611556816146f4565b5f8060408385031215614c48575f80fd5b8235614c53816146f4565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b60405290565b60405160e0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614d2157614d21614c61565b604052919050565b803560ff81168114614720575f80fd5b5f82601f830112614d48575f80fd5b8135602067ffffffffffffffff821115614d6457614d64614c61565b8160051b614d73828201614cda565b9283528481018201928281019087851115614d8c575f80fd5b83870192505b84831015614db4578235614da5816146f4565b82529183019190830190614d92565b979650505050505050565b5f60c08284031215614dcf575f80fd5b614dd7614c8e565b9050614de282614715565b8152614df060208301614d29565b6020820152614e0160408301614d29565b6040820152614e1260608301614d29565b6060820152608082013567ffffffffffffffff80821115614e31575f80fd5b614e3d85838601614d39565b608084015260a0840135915080821115614e55575f80fd5b50614e6284828501614d39565b60a08301525092915050565b5f6106c13683614dbf565b5f60208284031215614e89575f80fd5b8151611556816146f4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614ef3575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f30575f80fd5b83018035915067ffffffffffffffff821115614f4a575f80fd5b602001915036819003821315614810575f80fd5b5f60208284031215614f6e575f80fd5b813567ffffffffffffffff811115614f84575f80fd5b6106df84828501614dbf565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156106c1576106c1614f90565b818382375f9101908152919050565b5f60208284031215614fef575f80fd5b61155682614738565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f6150516040830186614980565b8281036020840152615064818587614ff8565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f61509d608083018688614ff8565b604083019490945250606001529392505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614ef3575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614ef3575f80fd5b5f60208284031215615125575f80fd5b61155682614d29565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615161575f80fd5b830160208101925035905067ffffffffffffffff811115615180575f80fd5b8060051b3603821315614810575f80fd5b8183525f60208085019450825f5b85811015614aca5781356151b2816146f4565b73ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161519f565b60208082528181018390525f906040808401600586901b8501820187855b88811015615374577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112615259575f80fd5b8b0163ffffffff61526982614725565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4182360301811261529f575f80fd5b8589018890520180356152b1816146f4565b73ffffffffffffffffffffffffffffffffffffffff16858801526152d6818901614d29565b606060ff808316828901526152ec8a8501614d29565b92506080818416818a0152615302838601614d29565b935060a09250818416838a015261531b8186018661512e565b60c08b81015294509150615336905061010089018483615191565b9250506153458184018461512e565b93509050838783030160e088015261535e828483615191565b978a0197965050509287019250506001016151f8565b509098975050505050505050565b5f82601f830112615391575f80fd5b813567ffffffffffffffff8111156153ab576153ab614c61565b6153dc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614cda565b8181528460208386010111156153f0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0823603121561541c575f80fd5b615424614cb7565b61542d83614738565b815261543b60208401614725565b602082015261544c60408401614715565b604082015261545d60608401614725565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff81111561548f575f80fd5b61549b36828601615382565b60c08301525092915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6106df6040830184614980565b5f602082840312156154e5575f80fd5b5051919050565b5f60ff8216806154fe576154fe614f90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6106dc6060830184614ad5565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d84015250846031830152836051830152825161561181607185016020870161495e565b919091016071019998505050505050505050565b5f8085851115615633575f80fd5b8386111561563f575f80fd5b5050820193919092039150565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561568c5780818660010360031b1b83161692505b505092915050565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561568c5760049490940360031b84901b1690921692915050565b7fffffffffffffffff000000000000000000000000000000000000000000000000813581811691600885101561568c5760089490940360031b84901b1690921692915050565b803560208310156106c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b60ff82811682821603908111156106c1576106c1614f90565b5f60ff8316806157ac577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561568c5760029490940360031b84901b1690921692915050565b60ff81811683821601908111156106c1576106c1614f90565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f6158486080830187614980565b828103604084015261585b818688614ff8565b9050828103606084015261586f8185614980565b98975050505050505050565b5f835161588c81846020880161495e565b8351908301906158a081836020880161495e565b01949350505050565b606081525f6158bb6060830186614a85565b602083820360208501526158cf8287614a85565b8481036040860152855180825260208088019450909101905f5b81811015615374578451835293830193918301916001016158e9565b5f845161591681846020890161495e565b8201838582375f930192835250909392505050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b16601784015250615a0b601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b50602881019190915260480198975050505050505050565b8281525f8251615a3a81602085016020870161495e565b91909101602001939250505056fea2646970667358221220bea5f362b07accaf075edb98d71a1b4a7df6e2ebc2aacf15c6426cab5ad7691964736f6c63430008160033608060405234801562000010575f80fd5b5060405162003af938038062003af983398101604081905262000033916200045e565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b038581169190911790915584908490612ee090859085908216156200008d576200008b5f8362000220565b505b5f5b8551811015620000f157620000e77f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d357620000d36200050c565b60200260200101516200022060201b60201c565b506001016200008f565b505f5b81518110156200014257620001387fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d357620000d36200050c565b50600101620000f4565b505060016004908155600680546001600160a01b0319166001600160a01b038d169081179091556040805163416ecebf60e01b8152905191965063416ecebf95508083019450602093509091908290030181865afa158015620001a7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001cd919062000520565b6006805463ffffffff92909216600160a01b0263ffffffff60a01b199092169190911790555050600780546001600160a01b039094166001600160a01b0319909416939093179092555062000586915050565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156200027157505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620002be57600180546015906200029990600160a81b90046001600160401b03166200054c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b620002ca8383620002d6565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1662000379575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003303390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620002d0565b505f620002d0565b80516001600160a01b038116811462000398575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620003c1575f80fd5b815160206001600160401b0380831115620003e057620003e06200039d565b8260051b604051601f19603f830116810181811084821117156200040857620004086200039d565b604052938452602081870181019490810192508785111562000428575f80fd5b6020870191505b848210156200045357620004438262000381565b835291830191908301906200042f565b979650505050505050565b5f805f805f8060c0878903121562000474575f80fd5b6200047f8762000381565b95506200048f6020880162000381565b60408801519095506001600160401b0380821115620004ac575f80fd5b620004ba8a838b01620003b1565b9550620004ca60608a0162000381565b9450620004da60808a0162000381565b935060a0890151915080821115620004f0575f80fd5b50620004ff89828a01620003b1565b9150509295509295509295565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121562000531575f80fd5b815163ffffffff8116811462000545575f80fd5b9392505050565b5f6001600160401b038281166002600160401b031981016200057c57634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b61356580620005945f395ff3fe608060405260043610610242575f3560e01c8063724e78da11610131578063c358de0a116100ac578063cd88b9031161007c578063d2ae210411610062578063d2ae2104146107ae578063d547741f14610800578063e395eb5c1461081f575f80fd5b8063cd88b9031461077c578063cfc325701461079b575f80fd5b8063c358de0a146106ee578063c416aa511461070d578063c7b2370b1461073e578063c8f8dcd11461075d575f80fd5b806391d1485411610101578063a217fddf116100e7578063a217fddf14610690578063c015bb7d146106a3578063c2803b2c146106c2575f80fd5b806391d14854146105675780639e944965146105b6575f80fd5b8063724e78da146104f6578063741bef1a146105155780637cd44734146105415780638624ba0714610554575f80fd5b80633146646a116101c1578063475b6d9e116101915780635e280f11116101775780635e280f1114610467578063709eb664146104b8578063717e8a42146104d7575f80fd5b8063475b6d9e1461043d5780635c975abb14610450575f80fd5b80633146646a146103cd57806336568abe146103ec5780633927c0751461040b5780633d85ac331461041e575f80fd5b806316c38b3c1161021657806326e67a37116101fc57806326e67a37146103635780632de113761461038f5780632f2ff15d146103ae575f80fd5b806316c38b3c14610308578063248a9ca314610327575f80fd5b8062bf2e801461024657806301e336671461029957806301ffc9a7146102ba5780631095b6d7146102e9575b5f80fd5b348015610251575f80fd5b50600154610281907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b3480156102a4575f80fd5b506102b86102b336600461267b565b610868565b005b3480156102c5575f80fd5b506102d96102d43660046126b4565b6108a3565b6040519015158152602001610290565b3480156102f4575f80fd5b506102b861030336600461267b565b61093b565b348015610313575f80fd5b506102b86103223660046126f3565b610ac4565b348015610332575f80fd5b50610355610341366004612712565b5f9081526020819052604090206001015490565b604051908152602001610290565b34801561036e575f80fd5b5061038261037d36600461273c565b610ae8565b6040516102909190612755565b34801561039a575f80fd5b506102d96103a936600461279b565b610b6b565b3480156103b9575f80fd5b506102b86103c83660046127b4565b610c4c565b3480156103d8575f80fd5b506102b86103e7366004612823565b610c70565b3480156103f7575f80fd5b506102b86104063660046127b4565b610d33565b6102b86104193660046128c2565b610d65565b348015610429575f80fd5b506102b8610438366004612a3b565b610e53565b6102b861044b366004612b50565b611035565b34801561045b575f80fd5b5060015460ff166102d9565b348015610472575f80fd5b506006546104939073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610290565b3480156104c3575f80fd5b506103556104d2366004612bca565b611089565b3480156104e2575f80fd5b506103556104f1366004612bca565b6111e5565b348015610501575f80fd5b506102b861051036600461279b565b611365565b348015610520575f80fd5b506002546104939073ffffffffffffffffffffffffffffffffffffffff1681565b6102b861054f366004612c34565b611402565b6102b8610562366004612cf0565b6114e1565b348015610572575f80fd5b506102d96105813660046127b4565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156105c1575f80fd5b506106436105d036600461273c565b60056020525f90815260409020805460019091015467ffffffffffffffff8083169261ffff68010000000000000000820416926fffffffffffffffffffffffffffffffff6a0100000000000000000000909204821692918116917001000000000000000000000000000000009091041685565b6040805167ffffffffffffffff968716815261ffff90951660208601526fffffffffffffffffffffffffffffffff938416908501529116606083015291909116608082015260a001610290565b34801561069b575f80fd5b506103555f81565b3480156106ae575f80fd5b506103556106bd366004612d5e565b611616565b3480156106cd575f80fd5b506007546104939073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f9575f80fd5b506102b8610708366004612dad565b6117a3565b348015610718575f80fd5b5060015461049390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b348015610749575f80fd5b506102b861075836600461279b565b611851565b348015610768575f80fd5b50610355610777366004612d5e565b6118f5565b348015610787575f80fd5b506102b8610796366004612dc6565b611a56565b6102b86107a9366004612e45565b611a9f565b3480156107b9575f80fd5b506001546107e7907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610290565b34801561080b575f80fd5b506102b861081a3660046127b4565b611b7d565b34801561082a575f80fd5b506006546108539074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610290565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561089281611ba1565b61089d848484611bae565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061093557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561096581611ba1565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff166109e2576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610a4f575f80fd5b505af1158015610a61573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b5f610ace81611ba1565b8115610ae057610adc611be3565b5050565b610adc611c62565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610b5f57602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b305790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610bbe57505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610c33575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610c4057506001919050565b505f919050565b919050565b5f82815260208190526040902060010154610c6681611ba1565b61089d8383611cb9565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610c9a81611ba1565b610ca2611d89565b6007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610cfc90879087908790600401612ec6565b5f604051808303815f87803b158015610d13575f80fd5b505af1158015610d25573d5f803e3d5ffd5b5050505061089d6001600455565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610d8f81611ba1565b610d97611d89565b610db788610da58686611dcc565b610daf8787611dee565b8a8a8a611e06565b506007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610e1290879087908790600401612ec6565b5f604051808303815f87803b158015610e29575f80fd5b505af1158015610e3b573d5f803e3d5ffd5b50505050610e496001600455565b5050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610e7d81611ba1565b5f5b8251811015610ff9575f838281518110610e9b57610e9b612ee9565b6020908102919091018101516040805160a080820183528385015167ffffffffffffffff908116835260608086015161ffff9081168589019081526080808901516fffffffffffffffffffffffffffffffff908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff165f9081526005909a5296909820945185549851945188166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff9590921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090991690841617979097179290921695909517825551600191820180549351909516700100000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931693169290921717909155919091019050610e7f565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc53826040516110299190612f16565b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561105f81611ba1565b611067611d89565b611075878787878787611e06565b506110806001600455565b50505050505050565b5f8461109481610b6b565b6110ca576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110d2611f73565b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a1660208084018290528a831684860152606084018a905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f434ee01600000000000000000000000000000000000000000000000000000000815292936101009091049091169163434ee0169161119a918591908a908a90600401612fbc565b602060405180830381865afa1580156111b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d99190613079565b98975050505050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61121081611ba1565b8561121a81610b6b565b611250576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8b1660208084018290528b831684860152606084018b905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f566ef76200000000000000000000000000000000000000000000000000000000815292936101009091049091169163566ef76291611318918591908b908b90600401612fbc565b6020604051808303815f875af1158015611334573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113589190613079565b9998505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561138f81611ba1565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561142c81611ba1565b611434611d89565b6006546040517f91d20fa100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906391d20fa1908490349061149c908f908f908f908f908f908f908f908f90600401613090565b5f604051808303818589803b1580156114b3575f80fd5b5088f11580156114c5573d5f803e3d5ffd5b5050505050506114d56001600455565b50505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561150b81611ba1565b611513611d89565b6006545f9061155190602085019074010000000000000000000000000000000000000000900463ffffffff16611549828761279b565b898989611e06565b90505f61155e8234613128565b60065490915073ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08601358360208801611593818a61279b565b60808a01356115a560a08c018c61313b565b6115b260c08e018e61313b565b6040518a63ffffffff1660e01b81526004016115d497969594939291906131d6565b5f604051808303818589803b1580156115eb575f80fd5b5088f11580156115fd573d5f803e3d5ffd5b505050505050505061160f6001600455565b5050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61164181611ba1565b8461164b81610b6b565b611681576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528881166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f65003784000000000000000000000000000000000000000000000000000000008152929361010090910490911691636500378491611758918591908b908b90600401613239565b6020604051808303815f875af1158015611774573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117989190613079565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756117cd81611ba1565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561187b81611ba1565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611029565b5f8361190081610b6b565b611936576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528781166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f337c7a9e00000000000000000000000000000000000000000000000000000000815292936101009091049091169163337c7a9e91611a0d918591908a908a90600401613239565b602060405180830381865afa158015611a28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4c9190613079565b9695505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a8081611ba1565b63ffffffff84165f90815260036020526040902061160f9084846125a0565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611ac981611ba1565b611ad1611d89565b60065473ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08401353460208601611b03818861279b565b6080880135611b1560a08a018a61313b565b611b2260c08c018c61313b565b6040518a63ffffffff1660e01b8152600401611b4497969594939291906131d6565b5f604051808303818589803b158015611b5b575f80fd5b5088f1158015611b6d573d5f803e3d5ffd5b505050505050610adc6001600455565b5f82815260208190526040902060010154611b9781611ba1565b61089d8383611fb2565b611bab8133612077565b50565b73ffffffffffffffffffffffffffffffffffffffff8316611bd857611bd38282612101565b505050565b611bd3838383612203565b611beb611f73565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611c6a612271565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611c38565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015611d1657505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15611d755760018054601590611d4e907501000000000000000000000000000000000000000000900467ffffffffffffffff166132e9565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836122ad565b5060019392505050565b600260045403611dc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600455565b5f611ddb6031602d848661330f565b611de491613336565b60e01c9392505050565b5f611dff611dfc84846123a6565b90565b9392505050565b5f808367ffffffffffffffff811115611e2157611e2161294f565b604051908082528060200260200182016040528015611e4a578160200160208202803683370190505b5090505f5b84811015611f26575f868683818110611e6a57611e6a612ee9565b905060400201803603810190611e80919061337e565b90505f815f015173ffffffffffffffffffffffffffffffffffffffff16826020015187906040515f60405180830381858888f193505050503d805f8114611ee2576040519150601f19603f3d011682016040523d82523d5f602084013e611ee7565b606091505b5050905080848481518110611efe57611efe612ee9565b911515602092830291909101820152820151611f1a90866133d3565b94505050600101611e4f565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c3468888888888886604051611f6096959493929190613422565b60405180910390a1509695505050505050565b60015460ff1615611fb0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561200e57505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b1561206d5760018054601590612046907501000000000000000000000000000000000000000000900467ffffffffffffffff166134b2565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836123be565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610adc576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661214e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146121a4576040519150601f19603f3d011682016040523d82523d5f602084013e6121a9565b606091505b5050905080611bd3576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016120f8565b73ffffffffffffffffffffffffffffffffffffffff8216612250576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bd373ffffffffffffffffffffffffffffffffffffffff84168383612477565b60015460ff16611fb0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561233d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610935565b505f610935565b5f6123b560516031848661330f565b611dff916134f3565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610935565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251611bd393879390925f9283929183919082885af180612520576040513d5f823e3d81fd5b50505f513d91508115612537578060011415612551565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561089d576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016120f8565b828054828255905f5260205f2090601f01602090048101928215612634579160200282015f5b8382111561260657833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026125c6565b80156126325782816101000a81549060ff02191690556001016020815f01049283019260010302612606565b505b50612640929150612644565b5090565b5b80821115612640575f8155600101612645565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f805f6060848603121561268d575f80fd5b61269684612658565b92506126a460208501612658565b9150604084013590509250925092565b5f602082840312156126c4575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611dff575f80fd5b5f60208284031215612703575f80fd5b81358015158114611dff575f80fd5b5f60208284031215612722575f80fd5b5035919050565b803563ffffffff81168114610c47575f80fd5b5f6020828403121561274c575f80fd5b611dff82612729565b602080825282518282018190525f9190848201906040850190845b8181101561278f57835160ff1683529284019291840191600101612770565b50909695505050505050565b5f602082840312156127ab575f80fd5b611dff82612658565b5f80604083850312156127c5575f80fd5b823591506127d560208401612658565b90509250929050565b5f8083601f8401126127ee575f80fd5b50813567ffffffffffffffff811115612805575f80fd5b60208301915083602082850101111561281c575f80fd5b9250929050565b5f805f60408486031215612835575f80fd5b833567ffffffffffffffff81111561284b575f80fd5b612857868287016127de565b909790965060209590950135949350505050565b5f6060828403121561287b575f80fd5b50919050565b5f8083601f840112612891575f80fd5b50813567ffffffffffffffff8111156128a8575f80fd5b6020830191508360208260061b850101111561281c575f80fd5b5f805f805f805f60e0888a0312156128d8575f80fd5b6128e2898961286b565b9650606088013567ffffffffffffffff808211156128fe575f80fd5b61290a8b838c01612881565b909850965060808a0135955060a08a0135915080821115612929575f80fd5b506129368a828b016127de565b989b979a5095989497959660c090950135949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff8111828210171561299f5761299f61294f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156129ec576129ec61294f565b604052919050565b803567ffffffffffffffff81168114610c47575f80fd5b803561ffff81168114610c47575f80fd5b80356fffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f6020808385031215612a4c575f80fd5b823567ffffffffffffffff80821115612a63575f80fd5b818501915085601f830112612a76575f80fd5b813581811115612a8857612a8861294f565b612a96848260051b016129a5565b818152848101925060c0918202840185019188831115612ab4575f80fd5b938501935b82851015612b445780858a031215612acf575f80fd5b612ad761297c565b612ae086612729565b8152612aed8787016129f4565b878201526040612afe8188016129f4565b908201526060612b0f878201612a0b565b908201526080612b20878201612a1c565b9082015260a0612b31878201612a1c565b9082015284529384019392850192612ab9565b50979650505050505050565b5f805f805f8060e08789031215612b65575f80fd5b612b6f888861286b565b9550612b7d60608801612729565b9450612b8b60808801612658565b935060a087013567ffffffffffffffff811115612ba6575f80fd5b612bb289828a01612881565b979a969950949794969560c090950135949350505050565b5f805f805f60808688031215612bde575f80fd5b612be786612729565b9450612bf560208701612658565b935060408601359250606086013567ffffffffffffffff811115612c17575f80fd5b612c23888289016127de565b969995985093965092949392505050565b5f805f805f805f805f60e08a8c031215612c4c575f80fd5b612c558a612658565b9850612c6360208b01612658565b975060408a01359650612c7860608b01612a0b565b955060808a013567ffffffffffffffff80821115612c94575f80fd5b612ca08d838e016127de565b909750955060a08c0135915080821115612cb8575f80fd5b50612cc58c828d016127de565b9a9d999c50979a9699959894979660c00135949350505050565b5f610100828403121561287b575f80fd5b5f805f8060608587031215612d03575f80fd5b843567ffffffffffffffff80821115612d1a575f80fd5b612d2688838901612881565b9096509450602087013593506040870135915080821115612d45575f80fd5b50612d5287828801612cdf565b91505092959194509250565b5f805f60408486031215612d70575f80fd5b612d7984612658565b9250602084013567ffffffffffffffff811115612d94575f80fd5b612da0868287016127de565b9497909650939450505050565b5f60208284031215612dbd575f80fd5b611dff82612a0b565b5f805f60408486031215612dd8575f80fd5b612de184612729565b9250602084013567ffffffffffffffff80821115612dfd575f80fd5b818601915086601f830112612e10575f80fd5b813581811115612e1e575f80fd5b8760208260051b8501011115612e32575f80fd5b6020830194508093505050509250925092565b5f60208284031215612e55575f80fd5b813567ffffffffffffffff811115612e6b575f80fd5b612e7784828501612cdf565b949350505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f612ed9604083018587612e7f565b9050826020830152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f919060409081850190868401855b82811015612faf578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c09093019290850190600101612f32565b5091979650505050505050565b845173ffffffffffffffffffffffffffffffffffffffff908116825260208087015163ffffffff1690830152604080870151909116818301526060808701519083015260808087015161ffff90811682850152865467ffffffffffffffff80821660a08701529381901c90911660c085015260501c6fffffffffffffffffffffffffffffffff90811660e08501526001870154908116610100850152901c166101208201525f610160806101408401526117988184018587612e7f565b5f60208284031215613089575f80fd5b5051919050565b5f73ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525087604083015261ffff8716606083015260c060808301526130d960c083018688612e7f565b82810360a08401526130ec818587612e7f565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610935576109356130fb565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261316e575f80fd5b83018035915067ffffffffffffffff821115613188575f80fd5b60200191503681900382131561281c575f80fd5b63ffffffff6131aa82612729565b1682526020810135602083015267ffffffffffffffff6131cc604083016129f4565b1660408301525050565b6131e0818961319c565b73ffffffffffffffffffffffffffffffffffffffff8716606082015285608082015260e060a08201525f61321860e083018688612e7f565b82810360c084015261322b818587612e7f565b9a9950505050505050505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff8088511684528060208901511660208501525061ffff60408801511660408401526132d56060840187805467ffffffffffffffff808216845261ffff8260401c1660208501526fffffffffffffffffffffffffffffffff808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b806101008401526117988184018587612e7f565b5f67ffffffffffffffff808316818103613305576133056130fb565b6001019392505050565b5f808585111561331d575f80fd5b83861115613329575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156133765780818660040360031b1b83161692505b505092915050565b5f6040828403121561338e575f80fd5b6040516040810181811067ffffffffffffffff821117156133b1576133b161294f565b6040526133bd83612658565b8152602083013560208201528091505092915050565b80820180821115610935576109356130fb565b5f815180845260208085019450602084015f5b838110156134175781511515875295820195908201906001016133f9565b509495945050505050565b5f60e08201613431838a61319c565b63ffffffff8816606084015273ffffffffffffffffffffffffffffffffffffffff878116608085015260e060a085015290859052859061010084015f5b8781101561349f578261348085612658565b168252602084810135908301526040938401939091019060010161346e565b5084810360c08601526130ec81876133e6565b5f67ffffffffffffffff8216806134cb576134cb6130fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b80356020831015610935577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b169291505056fea2646970667358221220bf4067662d56dc81125eda238718adb88046662d26b0b352f03d651c8af9702b64736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b5038038062001b508339810160408190526200003391620000cf565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000080565b5063ffffffff1660a052670de0b6b3a7640000608052620000fb565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215620000e0575f80fd5b815163ffffffff81168114620000f4575f80fd5b9392505050565b60805160a051611a2c620001245f395f818161023a01526102ee01525f61083d0152611a2c5ff3fe608060405260043610610096575f3560e01c8063566ef76211610066578063715018a61161004c578063715018a6146101715780638da5cb5b14610185578063f2fde38b146101b8575f80fd5b8063566ef762146101335780636500378414610152575f80fd5b806301e33667146100a1578063337c7a9e146100c2578063434ee016146100f457806354fd4d5014610113575f80fd5b3661009d57005b5f80fd5b3480156100ac575f80fd5b506100c06100bb366004611549565b6101d7565b005b3480156100cd575f80fd5b506100e16100dc3660046115dd565b6101ef565b6040519081526020015b60405180910390f35b3480156100ff575f80fd5b506100e161010e366004611644565b610408565b34801561011e575f80fd5b506040805160018082526020820152016100eb565b34801561013e575f80fd5b506100e161014d366004611644565b61060a565b34801561015d575f80fd5b506100e161016c3660046115dd565b610620565b34801561017c575f80fd5b506100c061062d565b348015610190575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100eb565b3480156101c3575f80fd5b506100c06101d236600461168d565b610640565b6101df6106a3565b6101ea8383836106f5565b505050565b5f6101fd60208501856116ad565b67ffffffffffffffff165f0361026c576040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024015b60405180910390fd5b5f80806102a960018261028260208b018b6116ad565b61029260a08c0160808d016116ad565b6102a260808d0160608e016116f1565b8b8b610725565b919450925090505f8080806102c160208d018d61168d565b6040517f88a4124c00000000000000000000000000000000000000000000000000000000815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152871660248201526044810188905273ffffffffffffffffffffffffffffffffffffffff91909116906388a4124c90606401608060405180830381865afa158015610360573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610384919061170c565b929650909450925090506103ce846103a260408e0160208f0161175e565b8e60400160208101906103b5919061175e565b8e60400160208101906103c891906116f1565b856107b5565b97506103ee8784848f60400160208101906103e9919061175e565b6108ab565b6103f890896117ac565b9c9b505050505050505050505050565b5f61041660208501856116ad565b67ffffffffffffffff165f036104715761043660408601602087016117c5565b6040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610263565b5f806104c38161048f61048a60408b0160208c016117c5565b505f90565b61049c60208a018a6116ad565b6104ac60a08b0160808c016116ad565b6104bc60808c0160608d016116f1565b8a8a610725565b5090925090505f8080806104da60208c018c61168d565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61050560408e0160208f016117c5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff91909116600482015260608e0135602482015260448101889052606401608060405180830381865afa15801561056e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610592919061170c565b929650909450925090506105d6846105b060408d0160208e0161175e565b8d60800160208101906105c3919061175e565b8d60400160208101906103c891906116f1565b96506105f18684848e60800160208101906103e9919061175e565b6105fb90886117ac565b9b9a5050505050505050505050565b5f61061785858585610408565b95945050505050565b5f610617858585856101ef565b6106356106a3565b61063e5f610911565b565b6106486106a3565b73ffffffffffffffffffffffffffffffffffffffff8116610697576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610263565b6106a081610911565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461063e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610263565b73ffffffffffffffffffffffffffffffffffffffff831661071a576101ea8282610985565b6101ea838383610a87565b5f805f8061073686868d8d8b610af5565b805160608201516080830151919650935090915061075e9067ffffffffffffffff8a166117e8565b60208201516107779067ffffffffffffffff8c166117ac565b61078191906117ac565b92508060400151156107a757606461079a8460666117e8565b6107a491906117ff565b92505b509750975097945050505050565b5f8061ffff8616156107c757856107c9565b845b90505f6127106107dd61ffff84168a6117e8565b6107e791906117ff565b90506fffffffffffffffffffffffffffffffff8416158061081857506fffffffffffffffffffffffffffffffff8516155b156108265791506106179050565b5f88856fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000886fffffffffffffffffffffffffffffffff1661087991906117e8565b61088391906117ff565b61088d91906117ac565b905081811161089c578161089e565b805b9998505050505050505050565b5f8415610909576127108261ffff16846fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff16886108eb91906117e8565b6108f591906117ff565b6108ff91906117e8565b61061791906117ff565b949350505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166109d2576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610a28576040519150601f19603f3d011682016040523d82523d5f602084013e610a2d565b606091505b50509050806101ea576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610263565b73ffffffffffffffffffffffffffffffffffffffff8216610ad4576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101ea73ffffffffffffffffffffffffffffffffffffffff8416838361110f565b610b2a6040518060a001604052805f81526020015f81526020015f151581526020015f63ffffffff1681526020015f81525090565b5f859003610b63576040517e575ea100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80805b87831015610fbc575f368180610b7e8d8d8961119c565b9950919550935091508690507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff851601610ca6578a15610bf1576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610bfd85856111f1565b915091508b8015610c1f57505f816fffffffffffffffffffffffffffffffff16115b15610c5b576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff87166004820152602401610263565b806fffffffffffffffffffffffffffffffff168a5f01818151610c7e91906117ac565b905250610c9d6fffffffffffffffffffffffffffffffff8316896117ac565b97505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff851601610d48578a15610d0d576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f610d18848461126c565b509050806fffffffffffffffffffffffffffffffff16895f01818151610d3e91906117ac565b905250610fb39050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff851601610e75578915610daf576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610dbb85856112c1565b9250925050816fffffffffffffffffffffffffffffffff165f03610e0b576040517fa169d0e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806fffffffffffffffffffffffffffffffff168a5f01818151610e2e91906117ac565b90525060208a0180516fffffffffffffffffffffffffffffffff84169190610e579083906117ac565b90525060808a01805190610e6a82611837565b815250505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60ff851601610eab5760016040890152610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff851601610f7c578a610f11576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f805f610f1e868661134b565b925092509250806fffffffffffffffffffffffffffffffff168b5f01818151610f4791906117ac565b905250610f666fffffffffffffffffffffffffffffffff84168a6117ac565b9850610f72828961186e565b9750505050610fb3565b6040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b50505050610b67565b828814610ff8576040517f990776ea00000000000000000000000000000000000000000000000000000000815260048101849052602401610263565b83516fffffffffffffffffffffffffffffffff861610156110625783516040517e84ce0200000000000000000000000000000000000000000000000000000000815260048101919091526fffffffffffffffffffffffffffffffff86166024820152604401610263565b815f0361109b576040517fe5eb8f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8680156110ac575063ffffffff8116155b156110e3576040517f6cc33f0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81846020018181516110f591906117ac565b90525063ffffffff16606084015250909695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526101ea9084906113cc565b5f368160018401816111af888884611471565b6002929092019190506111c3888884611497565b94506001820161ffff821683016111dc81838b8d611892565b979b909a50969850505061ffff160193505050565b5f8060108314801590611205575060208314155b1561123c576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124784845f6114bb565b915060208314611257575f611263565b611263848460106114bb565b90509250929050565b5f80603083146112a8576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112b384845f6114bb565b9150611263848460106114e1565b5f8080601284148015906112d6575060228414155b1561130d576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61131885855f611471565b9250611326858560026114bb565b915060228414611336575f611342565b611342858560126114bb565b90509250925092565b5f808060148414801590611360575060248414155b15611397576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113a285855f6114bb565b92506113b0858560106114fb565b9150602484146113c0575f611342565b611342858560146114bb565b5f8060205f8451602086015f885af1806113eb576040513d5f823e3d81fd5b50505f513d9150811561140257806001141561141c565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561146b576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610263565b50505050565b5f6002820161148281848688611892565b61148b916118b9565b60f01c95945050505050565b5f8383838181106114aa576114aa611901565b919091013560f81c95945050505050565b5f601082016114cc81848688611892565b6114d59161192e565b60801c95945050505050565b5f602082016114f281848688611892565b61061791611974565b5f6004820161150c81848688611892565b611515916119b0565b60e01c95945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611544575f80fd5b919050565b5f805f6060848603121561155b575f80fd5b61156484611521565b925061157260208501611521565b9150604084013590509250925092565b5f60a08284031215611592575f80fd5b50919050565b5f8083601f8401126115a8575f80fd5b50813567ffffffffffffffff8111156115bf575f80fd5b6020830191508360208285010111156115d6575f80fd5b9250929050565b5f805f808486036101208112156115f2575f80fd5b60608112156115ff575f80fd5b508493506116108660608701611582565b925061010085013567ffffffffffffffff81111561162c575f80fd5b61163887828801611598565b95989497509550505050565b5f805f806101608587031215611658575f80fd5b6116628686611582565b93506116718660a08701611582565b925061014085013567ffffffffffffffff81111561162c575f80fd5b5f6020828403121561169d575f80fd5b6116a682611521565b9392505050565b5f602082840312156116bd575f80fd5b813567ffffffffffffffff811681146116a6575f80fd5b6fffffffffffffffffffffffffffffffff811681146106a0575f80fd5b5f60208284031215611701575f80fd5b81356116a6816116d4565b5f805f806080858703121561171f575f80fd5b845193506020850151611731816116d4565b6040860151909350611742816116d4565b6060860151909250611753816116d4565b939692955090935050565b5f6020828403121561176e575f80fd5b813561ffff811681146116a6575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156117bf576117bf61177f565b92915050565b5f602082840312156117d5575f80fd5b813563ffffffff811681146116a6575f80fd5b80820281158282048414176117bf576117bf61177f565b5f82611832577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118675761186761177f565b5060010190565b63ffffffff81811683821601908082111561188b5761188b61177f565b5092915050565b5f80858511156118a0575f80fd5b838611156118ac575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156118f95780818660020360031b1b83161692505b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156118f95760109490940360031b84901b1690921692915050565b803560208310156117bf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156118f95760049490940360031b84901b169092169291505056fea2646970667358221220ca9d45c801b5ccbb302dcb12078bab5268980f6f82de99fc1d137bac6c0848e664736f6c6343000816003360c060405234801562000010575f80fd5b5060405162004aae38038062004aae8339810160408190526200003391620004ca565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b03861617905582828686612ee05f865f5b8551811015620000d357620000c97f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000b557620000b5620005a5565b60200260200101516200027860201b60201c565b5060010162000071565b505f5b815181101562000124576200011a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000b557620000b5620005a5565b50600101620000d6565b505050505050806001600160401b03165f036200015457604051635f86e17760e01b815260040160405180910390fd5b806001600160401b0316825110156200019a5781516040516378e2c15760e11b81526001600160401b039182166004820152908216602482015260440160405180910390fd5b5f805b835181101562000229575f848281518110620001bd57620001bd620005a5565b60200260200101519050826001600160a01b0316816001600160a01b031611620001fa576040516305fa937f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600460205260409020805460ff19166001908117909155909250016200019d565b50509051600580546001600160401b0393841668010000000000000000026001600160801b0319909116939092169290921717905550505063ffffffff92831660805250501660a052620005f3565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015620002c957505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620003165760018054601590620002f190600160a81b90046001600160401b0316620005b9565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200032283836200032e565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff16620003d1575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003883390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000328565b505f62000328565b805163ffffffff81168114620003ed575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b0381168114620003ed575f80fd5b5f82601f8301126200042d575f80fd5b815160206001600160401b03808311156200044c576200044c620003f2565b8260051b604051601f19603f83011681018181108482111715620004745762000474620003f2565b604052938452602081870181019490810192508785111562000494575f80fd5b6020870191505b84821015620004bf57620004af8262000406565b835291830191908301906200049b565b979650505050505050565b5f805f805f805f60e0888a031215620004e1575f80fd5b620004ec88620003d9565b9650620004fc60208901620003d9565b60408901519096506001600160401b038082111562000519575f80fd5b620005278b838c016200041d565b96506200053760608b0162000406565b955060808a01519150808211156200054d575f80fd5b6200055b8b838c016200041d565b945060a08a01519150808216821462000572575f80fd5b60c08a01519193508082111562000587575f80fd5b50620005968a828b016200041d565b91505092959891949750929550565b634e487b7160e01b5f52603260045260245ffd5b5f6001600160401b038281166002600160401b03198101620005e957634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b60805160a05161447d620006315f395f818161090e0152818161253401526126c301525f818161084f0152818161173901526122a4015261447d5ff3fe6080604052600436106102c0575f3560e01c806395d376d711610170578063cd88b903116100d1578063e395eb5c11610087578063f42ed2ed11610062578063f42ed2ed1461096e578063fd62e75014610981578063fdb9b0f1146109a1575f80fd5b8063e395eb5c146108fd578063f010cb2314610930578063f3b4ebd01461094f575f80fd5b8063d2ae2104116100b7578063d2ae210414610886578063d547741f146108bf578063dafe0ccc146108de575f80fd5b8063cd88b9031461081f578063cf34c7681461083e575f80fd5b8063c358de0a11610126578063c5e193cd1161010c578063c5e193cd146107b4578063c7a823e0146107d3578063c7b2370b14610800575f80fd5b8063c358de0a14610764578063c416aa5114610783575f80fd5b8063a217fddf11610156578063a217fddf14610704578063aef18bf714610717578063b143044b14610745575f80fd5b806395d376d71461064e5780639e94496514610661575f80fd5b806330bb3aac116102255780635c975abb116101db578063741bef1a116101b6578063741bef1a1461058f5780638585c945146105e057806391d14854146105ff575f80fd5b80635c975abb1461052b578063724e78da14610542578063736c0d5b14610561575f80fd5b806336568abe1161020b57806336568abe146104ce57806352d3b871146104ed5780635553fb8e1461050c575f80fd5b806330bb3aac1461049057806331cb6105146104af575f80fd5b80631703a0181161027a57806326e67a371161026057806326e67a37146104265780632de11376146104525780632f2ff15d14610471575f80fd5b80631703a018146103a5578063248a9ca3146103ea575f80fd5b806301ffc9a7116102aa57806301ffc9a7146103385780631095b6d71461036757806316c38b3c14610386575f80fd5b8062bf2e80146102c457806301e3366714610317575b5f80fd5b3480156102cf575f80fd5b506001546102ff907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b348015610322575f80fd5b50610336610331366004613597565b6109c0565b005b348015610343575f80fd5b506103576103523660046135d5565b6109fb565b604051901515815260200161030e565b348015610372575f80fd5b50610336610381366004613597565b610a93565b348015610391575f80fd5b506103366103a036600461362a565b610c1d565b3480156103b0575f80fd5b506005546103d19068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161030e565b3480156103f5575f80fd5b50610418610404366004613643565b5f9081526020819052604090206001015490565b60405190815260200161030e565b348015610431575f80fd5b5061044561044036600461366d565b610c41565b60405161030e9190613686565b34801561045d575f80fd5b5061035761046c3660046136cc565b610cc4565b34801561047c575f80fd5b5061033661048b3660046136e7565b610da5565b34801561049b575f80fd5b506104186104aa366004613771565b610ef4565b3480156104ba575f80fd5b506103366104c93660046137e4565b611067565b3480156104d9575f80fd5b506103366104e83660046136e7565b6110aa565b3480156104f8575f80fd5b50610336610507366004613817565b6110dc565b348015610517575f80fd5b50610418610526366004613897565b6112a5565b348015610536575f80fd5b5060015460ff16610357565b34801561054d575f80fd5b5061033661055c3660046136cc565b611418565b34801561056c575f80fd5b5061035761057b3660046136cc565b60046020525f908152604090205460ff1681565b34801561059a575f80fd5b506002546105bb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030e565b3480156105eb575f80fd5b506103366105fa3660046138ea565b6114bd565b34801561060a575f80fd5b506103576106193660046136e7565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61041861065c366004613919565b611502565b34801561066c575f80fd5b506106c961067b36600461366d565b60066020525f908152604090205467ffffffffffffffff81169068010000000000000000810461ffff16906a010000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff909416845261ffff90921660208401526fffffffffffffffffffffffffffffffff169082015260600161030e565b34801561070f575f80fd5b506104185f81565b348015610722575f80fd5b50610357610731366004613643565b60076020525f908152604090205460ff1681565b348015610750575f80fd5b5061033661075f3660046139be565b6116d7565b34801561076f575f80fd5b5061033661077e3660046139fd565b6119db565b34801561078e575f80fd5b506001546105bb90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156107bf575f80fd5b506104186107ce366004613897565b611a89565b3480156107de575f80fd5b506107f26107ed366004613a16565b611c62565b60405161030e929190613a7e565b34801561080b575f80fd5b5061033661081a3660046136cc565b611e65565b34801561082a575f80fd5b50610336610839366004613ac9565b611f09565b348015610849575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161030e565b348015610891575f80fd5b506001546103d1907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b3480156108ca575f80fd5b506103366108d93660046136e7565b611f59565b3480156108e9575f80fd5b506103366108f8366004613597565b61206e565b348015610908575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b34801561093b575f80fd5b5061041861094a366004613b0b565b61219e565b34801561095a575f80fd5b50610336610969366004613b71565b6121d9565b61041861097c366004613bab565b61244a565b34801561098c575f80fd5b506005546103d19067ffffffffffffffff1681565b3480156109ac575f80fd5b506104186109bb366004613bab565b612603565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109ea81612790565b6109f584848461279a565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610a8d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610abd81612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16610b3a576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610ba7575f80fd5b505af1158015610bb9573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b5f610c2781612790565b8115610c3957610c356127cf565b5050565b610c3561284e565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cb857602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610c895790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610d1757505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610d8c575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610d9957506001919050565b505f919050565b919050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480610df357507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610e1d57507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b15610e6057303314610e5b576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eea565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb057610e5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6040517f94fdc372000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b6109f583836128a5565b5f83610eff81610cc4565b610f35576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a16602080840182905267ffffffffffffffff808c16858701528a8416606086015260055468010000000000000000900416608085015260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660a08601525f92835260069091529084902093517f7bfa20a9000000000000000000000000000000000000000000000000000000008152929361010090910490911691637bfa20a99161101c918591908a908a90600401613c97565b602060405180830381865afa158015611037573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105b9190613d63565b98975050505050505050565b3033146110a0576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c358282612975565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561110681612790565b5f5b82811015611266573684848381811061112357611123613d7a565b9050608002019050604051806060016040528082602001602081019061114991906138ea565b67ffffffffffffffff16815260200161116860608401604085016139fd565b61ffff1681526020016111816080840160608501613dc6565b6fffffffffffffffffffffffffffffffff16905260065f6111a5602085018561366d565b63ffffffff16815260208082019290925260409081015f20835181549385015194909201516fffffffffffffffffffffffffffffffff166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff61ffff90951668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941667ffffffffffffffff90931692909217929092179290921691909117905550600101611108565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051611298929190613ddf565b60405180910390a1505050565b5f816112b081610cc4565b6112e6576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808a16602080850182905267ffffffffffffffff808b168688015289851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517f7bfa20a9000000000000000000000000000000000000000000000000000000008152939461010090920490921692637bfa20a9926113ce928692600401613edd565b602060405180830381865afa1580156113e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140d9190613d63565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561144281612790565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146114f6576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ff81612b73565b50565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61152d81612790565b61153d60a08601608087016136cc565b61154681610cc4565b61157c576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810190915260025473ffffffffffffffffffffffffffffffffffffffff1681525f906020808201906115b6908a018a61366d565b63ffffffff1681526020016115d160808a0160608b016138ea565b67ffffffffffffffff1681526020016115f060a08a0160808b016136cc565b73ffffffffffffffffffffffffffffffffffffffff908116825260055468010000000000000000900467ffffffffffffffff166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff16604090940193909352929350610100909104169063df2b057e9083906006905f90611681908d018d61366d565b63ffffffff1663ffffffff1681526020019081526020015f2089896040518563ffffffff1660e01b81526004016116bb9493929190613c97565b6020604051808303815f875af11580156113e9573d5f803e3d5ffd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561170181612790565b5f5b828110156109f5573684848381811061171e5761171e613d7a565b90506020028101906117309190613fb2565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611766602083018361366d565b63ffffffff161461177757506119d3565b4281606001351161178857506119d3565b5f6117c0611799602084018461366d565b6117a960408501602086016136cc565b6117b66040860186613fee565b866060013561219e565b90505f6117d4826107ed6080860186613fee565b50905080611817576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a15050506119d3565b5f6118366118286040860186613fee565b6118319161404f565b612c8a565b905080156118cd575f8381526007602052604090205460ff1615611896577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab9784846040516118859291906140f7565b60405180910390a1505050506119d3565b5f83815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b5f806118df60408701602088016136cc565b73ffffffffffffffffffffffffffffffffffffffff166119026040880188613fee565b6040516119109291906141bc565b5f604051808303815f865af19150503d805f8114611949576040519150601f19603f3d011682016040523d82523d5f602084013e61194e565b606091505b5091509150816119cc578215611992575f85815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516119c39291906141cb565b60405180910390a15b5050505050505b600101611703565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a0581612790565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d906020016114b1565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de611ab481612790565b82611abe81610cc4565b611af4576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808b16602080850182905267ffffffffffffffff808c16868801528a851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517fdf2b057e00000000000000000000000000000000000000000000000000000000815293946101009092049092169263df2b057e92611bdc928692600401613edd565b6020604051808303815f875af1158015611bf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c1c9190613d63565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef84604051611c4f91815260200190565b60405180910390a1505050949350505050565b6005545f908190611c8a9068010000000000000000900467ffffffffffffffff166041614210565b8314611c9b57505f90506001611e5d565b5f611cf2866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290525f90605c01604051602081830303815290604052805190602001209050919050565b90505f805b60055468010000000000000000900467ffffffffffffffff16811015611e5257365f8888611d26856041614210565b90611d32866001614227565b611d3d906041614210565b92611d4a9392919061423a565b915091505f80611d8f8785858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612d7292505050565b5090925090505f816003811115611da857611da8613a51565b14611dc0575f60019850985050505050505050611e5d565b8573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611611e06575f60029850985050505050505050611e5d565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205460ff16611e45575f60039850985050505050505050611e5d565b5093505050600101611cf7565b5060015f9350935050505b935093915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611e8f81612790565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e0906020016114b1565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611f3381612790565b63ffffffff84165f908152600360205260409020611f529084846134be565b5050505050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480611fa757507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80611fd157507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b156120145730331461200f576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612064565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb05761200f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6109f58383612dbb565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561209881612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16612115576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f07b18bde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906307b18bde906044015f604051808303815f87803b158015612182575f80fd5b505af1158015612194573d5f803e3d5ffd5b5050505050505050565b5f85858386866040516020016121b8959493929190614261565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511612216576040517f0bbaf26300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3061222760408301602084016136cc565b73ffffffffffffffffffffffffffffffffffffffff161461229d5761225260408201602083016136cc565b6040517f1ce0bfcd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610ee1565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166122d1602083018361366d565b63ffffffff1614612324576122e9602082018261366d565b6040517f2697e1c200000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610ee1565b5f612335611799602084018461366d565b90505f612349826107ed6080860186613fee565b50905080612383576040517f15ecadee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526007602052604090205460ff16156123ce576040517f9d6a45a600000000000000000000000000000000000000000000000000000000815260048101839052602401610ee1565b5f828152600760205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556109f5907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217759061243890860186613fee565b81019061244591906136cc565b6128a5565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61247581612790565b8861247f81610cc4565b6124b5576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528c811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fbbc5a33b00000000000000000000000000000000000000000000000000000000815292936101009091049091169163bbc5a33b916125b4918591908d908d908d908d906004016142d2565b6020604051808303815f875af11580156125d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f49190613d63565b9b9a5050505050505050505050565b5f8761260e81610cc4565b612644576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528b811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fd358b30000000000000000000000000000000000000000000000000000000000815292936101009091049091169163d358b30091612743918591908c908c908c908c906004016142d2565b602060405180830381865afa15801561275e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127829190613d63565b9a9950505050505050505050565b6114ff8133612e80565b73ffffffffffffffffffffffffffffffffffffffff83166127c4576127bf8282612f05565b505050565b6127bf838383613007565b6127d7613075565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6128566130b4565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612824565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561290257505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15612961576001805460159061293a907501000000000000000000000000000000000000000000900467ffffffffffffffff16614397565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836130f0565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205481151560ff9091161515036129fb576040517f58c8d2a000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201528115156024820152604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260046020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001683151517905581612a6c57600554612a679060019067ffffffffffffffff166143bd565b612a84565b600554612a849067ffffffffffffffff1660016143e5565b60055490915067ffffffffffffffff680100000000000000009091048116908216811115612af2576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808416600483015282166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff84161790556040805173ffffffffffffffffffffffffffffffffffffffff8616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610c0f565b8067ffffffffffffffff165f03612bb6576040517f5f86e17700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff908116908216811015612c15576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808316600483015283166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a23249906020016114b1565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0223536e0000000000000000000000000000000000000000000000000000000014801590612d1f57507fffffffff0000000000000000000000000000000000000000000000000000000082167fab750e750000000000000000000000000000000000000000000000000000000014155b8015610a8d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f704316e500000000000000000000000000000000000000000000000000000000141592915050565b5f805f8351604103612da9576020840151604085015160608601515f1a612d9b888285856131e9565b955095509550505050612db4565b505081515f91506002905b9250925092565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015612e1757505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b15612e765760018054601590612e4f907501000000000000000000000000000000000000000000900467ffffffffffffffff16614406565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836132dc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c35576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216612f52576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612fa8576040519150601f19603f3d011682016040523d82523d5f602084013e612fad565b606091505b50509050806127bf576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216613054576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127bf73ffffffffffffffffffffffffffffffffffffffff84168383613395565b60015460ff16156130b2576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60015460ff166130b2576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556131803390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610a8d565b505f610a8d565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561322257505f915060039050826132d2565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613273573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166132c957505f9250600191508290506132d2565b92505f91508190505b9450945094915050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610a8d565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017815282516127bf93879390925f9283929183919082885af18061343e576040513d5f823e3d81fd5b50505f513d9150811561345557806001141561346f565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ee1565b828054828255905f5260205f2090601f01602090048101928215613552579160200282015f5b8382111561352457833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026134e4565b80156135505782816101000a81549060ff02191690556001016020815f01049283019260010302613524565b505b5061355e929150613562565b5090565b5b8082111561355e575f8155600101613563565b73ffffffffffffffffffffffffffffffffffffffff811681146114ff575f80fd5b5f805f606084860312156135a9575f80fd5b83356135b481613576565b925060208401356135c481613576565b929592945050506040919091013590565b5f602082840312156135e5575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114613614575f80fd5b9392505050565b80358015158114610da0575f80fd5b5f6020828403121561363a575f80fd5b6136148261361b565b5f60208284031215613653575f80fd5b5035919050565b803563ffffffff81168114610da0575f80fd5b5f6020828403121561367d575f80fd5b6136148261365a565b602080825282518282018190525f9190848201906040850190845b818110156136c057835160ff16835292840192918401916001016136a1565b50909695505050505050565b5f602082840312156136dc575f80fd5b813561361481613576565b5f80604083850312156136f8575f80fd5b82359150602083013561370a81613576565b809150509250929050565b803567ffffffffffffffff81168114610da0575f80fd5b5f8083601f84011261373c575f80fd5b50813567ffffffffffffffff811115613753575f80fd5b60208301915083602082850101111561376a575f80fd5b9250929050565b5f805f805f60808688031215613785575f80fd5b61378e8661365a565b945061379c60208701613715565b935060408601356137ac81613576565b9250606086013567ffffffffffffffff8111156137c7575f80fd5b6137d38882890161372c565b969995985093965092949392505050565b5f80604083850312156137f5575f80fd5b823561380081613576565b915061380e6020840161361b565b90509250929050565b5f8060208385031215613828575f80fd5b823567ffffffffffffffff8082111561383f575f80fd5b818501915085601f830112613852575f80fd5b813581811115613860575f80fd5b8660208260071b8501011115613874575f80fd5b60209290920196919550909350505050565b803561ffff81168114610da0575f80fd5b5f805f80608085870312156138aa575f80fd5b6138b385613886565b93506138c160208601613886565b92506138cf60408601613715565b915060608501356138df81613576565b939692955090935050565b5f602082840312156138fa575f80fd5b61361482613715565b5f60a08284031215613913575f80fd5b50919050565b5f805f6040848603121561392b575f80fd5b833567ffffffffffffffff80821115613942575f80fd5b61394e87838801613903565b94506020860135915080821115613963575f80fd5b506139708682870161372c565b9497909650939450505050565b5f8083601f84011261398d575f80fd5b50813567ffffffffffffffff8111156139a4575f80fd5b6020830191508360208260051b850101111561376a575f80fd5b5f80602083850312156139cf575f80fd5b823567ffffffffffffffff8111156139e5575f80fd5b6139f18582860161397d565b90969095509350505050565b5f60208284031215613a0d575f80fd5b61361482613886565b5f805f60408486031215613a28575f80fd5b83359250602084013567ffffffffffffffff811115613a45575f80fd5b6139708682870161372c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b82151581526040810160048310613abc577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8260208301529392505050565b5f805f60408486031215613adb575f80fd5b613ae48461365a565b9250602084013567ffffffffffffffff811115613aff575f80fd5b6139708682870161397d565b5f805f805f60808688031215613b1f575f80fd5b613b288661365a565b94506020860135613b3881613576565b9350604086013567ffffffffffffffff811115613b53575f80fd5b613b5f8882890161372c565b96999598509660600135949350505050565b5f60208284031215613b81575f80fd5b813567ffffffffffffffff811115613b97575f80fd5b613ba384828501613903565b949350505050565b5f805f805f805f6080888a031215613bc1575f80fd5b8735613bcc81613576565b9650602088013567ffffffffffffffff80821115613be8575f80fd5b613bf48b838c0161372c565b909850965060408a0135915080821115613c0c575f80fd5b613c188b838c0161372c565b909650945060608a0135915080821115613c30575f80fd5b50613c3d8a828b0161372c565b989b979a50959850939692959293505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f610140613d0e838873ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613d4f60c08401875467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8061012084015261140d8184018587613c50565b5f60208284031215613d73575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80356fffffffffffffffffffffffffffffffff81168114610da0575f80fd5b5f60208284031215613dd6575f80fd5b61361482613da7565b60208082528181018390525f90604080840186845b87811015613e6f5763ffffffff613e0a8361365a565b16835267ffffffffffffffff613e21868401613715565b168584015261ffff613e34858401613886565b168484015260606fffffffffffffffffffffffffffffffff613e57828501613da7565b16908401526080928301929190910190600101613df4565b5090979650505050505050565b5f81518084525f5b81811015613ea057602081850181015186830182015201613e84565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f610140613f54838773ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613f9560c08401865467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b80610120840152613fa881840185613e7c565b9695505050505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613fe4575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614021575f80fd5b83018035915067ffffffffffffffff82111561403b575f80fd5b60200191503681900382131561376a575f80fd5b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561408f5780818660040360031b1b83161692505b505092915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126140ca575f80fd5b830160208101925035905067ffffffffffffffff8111156140e9575f80fd5b80360382131561376a575f80fd5b6040815263ffffffff6141098461365a565b1660408201525f602084013561411e81613576565b73ffffffffffffffffffffffffffffffffffffffff1660608301526141466040850185614097565b60a0608085015261415b60e085018284613c50565b915050606085013560a08401526141756080860186614097565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08584030160c08601526141aa838284613c50565b93505050508260208301529392505050565b818382375f9101908152919050565b828152604060208201525f613ba36040830184613e7c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610a8d57610a8d6141e3565b80820180821115610a8d57610a8d6141e3565b5f8085851115614248575f80fd5b83861115614254575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008660e01b1681527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008560601b166004820152836018820152818360388301375f9101603801908152949350505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff808a511684528060208b01511660208501525067ffffffffffffffff60408a015116604084015261ffff60608a015116606084015261436160808401895467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8060e08401526143748184018789613c50565b905082810361010084015261438a818587613c50565b9998505050505050505050565b5f67ffffffffffffffff8083168181036143b3576143b36141e3565b6001019392505050565b67ffffffffffffffff8281168282160390808211156143de576143de6141e3565b5092915050565b67ffffffffffffffff8181168382160190808211156143de576143de6141e3565b5f67ffffffffffffffff82168061441f5761441f6141e3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019291505056fea26469706673582212208293bcc557e204de553c5250d4aeaa3a84335fc59a6c7b5a242fbc34745baa1464736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002470380380620024708339810160408190526200003391620000c8565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000079565b5063ffffffff90911660a052608052620000fe565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8060408385031215620000da575f80fd5b825163ffffffff81168114620000ee575f80fd5b6020939093015192949293505050565b60805160a0516123426200012e5f395f81816107ac015261082601525f81816109120152610cb901526123425ff3fe6080604052600436106100e7575f3560e01c80638da5cb5b11610087578063de0a93c311610057578063de0a93c314610322578063df2b057e14610396578063f2fde38b146103a9578063f5ff608f146103c8575f80fd5b80638da5cb5b1461029e5780639ac23d28146102d1578063bbc5a33b146102f0578063d358b30014610303575f80fd5b806339f26dfc116100c257806339f26dfc1461022c57806354fd4d501461024b578063715018a61461026b5780637bfa20a91461027f575f80fd5b806301e33667146100f257806310b65f76146101135780632565c24514610157575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5061011161010c366004611a78565b6103e7565b005b34801561011e575f80fd5b5061014461012d366004611ac2565b63ffffffff165f9081526001602052604090205490565b6040519081526020015b60405180910390f35b348015610162575f80fd5b506101ec610171366004611ac2565b60036020525f908152604090205463ffffffff8082169167ffffffffffffffff64010000000082048116926c0100000000000000000000000083049091169174010000000000000000000000000000000000000000810482169178010000000000000000000000000000000000000000000000009091041685565b6040805163ffffffff968716815267ffffffffffffffff95861660208201529390941693830193909352831660608201529116608082015260a00161014e565b348015610237575f80fd5b50610111610246366004611b13565b6103ff565b348015610256575f80fd5b5060408051600180825260208201520161014e565b348015610276575f80fd5b506101116104af565b34801561028a575f80fd5b50610144610299366004611bae565b6104c2565b3480156102a9575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b3480156102dc575f80fd5b506101116102eb366004611c15565b61068a565b6101446102fe366004611cd2565b610747565b34801561030e575f80fd5b5061014461031d366004611cd2565b610761565b34801561032d575f80fd5b50600254604080516effffffffffffffffffffffffffffff80841682526f0100000000000000000000000000000084041660208201527e0100000000000000000000000000000000000000000000000000000000000090920461ffff169082015260600161014e565b6101446103a4366004611bae565b61099c565b3480156103b4575f80fd5b506101116103c3366004611d67565b6109b2565b3480156103d3575f80fd5b506101116103e2366004611d80565b610a15565b6103ef610a8e565b6103fa838383610ae0565b505050565b610407610a8e565b6002805461ffff9092167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6effffffffffffffffffffffffffffff9485166f01000000000000000000000000000000027fffff00000000000000000000000000000000000000000000000000000000000090941694909516939093179190911792909216179055565b6104b7610a8e565b6104c05f610b10565b565b5f6104d06020850185611e04565b67ffffffffffffffff165f03610530576104f06040860160208701611ac2565b6040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b61053a8383610b84565b505f61055e61054f60a0880160808901611e04565b67ffffffffffffffff16610c25565b90505f8061056f6020890189611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61059a60408b0160208c01611ac2565b856105a860208c018c611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa158015610617573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063b9190611e3c565b93505050915061067e828860200160208101906106589190611e8e565b61066860c08c0160a08d01611e8e565b61067860608c0160408d01611ea7565b85610c32565b98975050505050505050565b610692610a8e565b8281146106cb576040517fb54ecc3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b83811015610740578282828181106106e7576106e7611ec2565b905060a0020160035f87878581811061070257610702611ec2565b90506020020160208101906107179190611ac2565b63ffffffff16815260208101919091526040015f206107368282611efb565b50506001016106cd565b5050505050565b5f610756878787878787610761565b979650505050505050565b5f61076f6020870187611e04565b67ffffffffffffffff165f036107d9576040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152602401610527565b6107e38383610b84565b505f6107f861054f60608a0160408b01611e04565b90505f8061080960208b018b611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c7f00000000000000000000000000000000000000000000000000000000000000008561085360208e018e611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa1580156108c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e69190611e3c565b9350505091505f6108f78989610d27565b90505f6fffffffffffffffffffffffffffffffff83166109377f0000000000000000000000000000000000000000000000000000000000000000846120c4565b6109419190612108565b905061098c610950828661211b565b61096060408e0160208f01611e8e565b8e60600160208101906109739190611e8e565b8e60400160208101906109869190611ea7565b87610c32565b9c9b505050505050505050505050565b5f6109a9858585856104c2565b95945050505050565b6109ba610a8e565b73ffffffffffffffffffffffffffffffffffffffff8116610a09576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610527565b610a1281610b10565b50565b610a1d610a8e565b5f5b818110156103fa57828282818110610a3957610a39611ec2565b9050604002016020013560015f015f858585818110610a5a57610a5a611ec2565b610a709260206040909202019081019150611ac2565b63ffffffff16815260208101919091526040015f2055600101610a1f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146104c0576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610527565b73ffffffffffffffffffffffffffffffffffffffff8316610b05576103fa8282610e0f565b6103fa838383610f11565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808215610bde575f80610b99868685610f7f565b6040517f7085244b00000000000000000000000000000000000000000000000000000000815260ff851660048201529096509294508593505060249091019050610527565b808314610c1a576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610527565b5f9150505b92915050565b5f610c1f82610120610fd8565b5f8061ffff861615610c445785610c46565b845b90505f612710610c5a61ffff84168a6120c4565b610c649190612108565b90506fffffffffffffffffffffffffffffffff84161580610c9557506fffffffffffffffffffffffffffffffff8516155b15610ca35791506109a99050565b5f846fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000876fffffffffffffffffffffffffffffffff16610cf591906120c4565b610cff9190612108565b610d09908a61211b565b9050818111610d185781610d1a565b805b9998505050505050505050565b5f80610d36848461103c61124b565b6002548151919250610d5f916effffffffffffffffffffffffffffff9091169061ffff1661212e565b6effffffffffffffffffffffffffffff169150806020015115610dca5760025461271090610db3907e01000000000000000000000000000000000000000000000000000000000000900461ffff16846120c4565b610dbd9190612108565b610dc7908361211b565b91505b806040015115610e0857600254610e05906f0100000000000000000000000000000090046effffffffffffffffffffffffffffff168361211b565b91505b5092915050565b73ffffffffffffffffffffffffffffffffffffffff8216610e5c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610eb2576040519150601f19603f3d011682016040523d82523d5f602084013e610eb7565b606091505b50509050806103fa576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610527565b73ffffffffffffffffffffffffffffffffffffffff8216610f5e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103fa73ffffffffffffffffffffffffffffffffffffffff8416838361185d565b5f36816001840181610f928888846118ea565b6002830192909150610faa9089908990600301611910565b94506002820161ffff82168301610fc381838b8d612161565b979b909a50969850505061ffff160193505050565b5f80610fe56041856120c4565b9050610ff2602082612188565b1561101a57611002602082612188565b61100c908261219b565b61101790602061211b565b90505b806110278461010461211b565b611031919061211b565b610e0590602061211b565b61104860018583611934565b6110556001856002611975565b156112455763ffffffff8085165f90815260036020908152604091829020825160a0810184529054808516825267ffffffffffffffff64010000000082048116938301939093526c01000000000000000000000000810490921692810192909252740100000000000000000000000000000000000000008104831660608301527801000000000000000000000000000000000000000000000000900490911660808201528284156111a957816020015167ffffffffffffffff168467ffffffffffffffff16111561116657815160208301516103e89163ffffffff169061113c90876121ae565b61114691906121cf565b61115091906121f3565b826040015161115f9190612219565b90506111a9565b6103e8825f015163ffffffff1685846020015161118391906121ae565b61118d91906121cf565b61119791906121f3565b82604001516111a691906121ae565b90505b42826060015163ffffffff16826111c09190612219565b67ffffffffffffffff1610806111f3575060808201516111e69063ffffffff164261211b565b8167ffffffffffffffff16115b15611242576040517f0c5a8d2300000000000000000000000000000000000000000000000000000000815263ffffffff8716600482015267ffffffffffffffff82166024820152604401610527565b50505b50505050565b604080516060810182525f80825260208201819052918101829052908085818661127682600261211b565b9261128393929190612161565b61128c9161223a565b60f01c905061129c60028361211b565b915061ffff81166001146112dc576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112e760028361211b565b91505f8683876112f882600261211b565b9261130593929190612161565b61130e9161223a565b60f01c905061131e60028461211b565b92508061ffff165f0361135d576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff168352505f5b825f015161ffff168161ffff1610156115c6575f86868481811061138c5761138c611ec2565b919091013560f81c91506113a3905060018461211b565b925060ff81166001146113e2576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113ed60028461211b565b92505f8784886113fe82600261211b565b9261140b93929190612161565b6114149161223a565b60f01c905061142460028561211b565b93507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff82160161158a575f88858961146082600261211b565b9261146d93929190612161565b6114769161223a565b60f01c905061148660028661211b565b9450845f8a828b61149882600461211b565b926114a593929190612161565b6114ae91612280565b60e01c90506114be60048361211b565b91505f8b8b848181106114d3576114d3611ec2565b600192013560f81c821492506114eb9190508461211b565b92505f8c848d6114fc82600861211b565b9261150993929190612161565b611512916122c6565b60c01c90506115278383835f8f63ffffffff16565b508a925061153c91505061ffff83168761211b565b1115611574576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158261ffff82168661211b565b9450506115bc565b6040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600101611366565b508381101561181c575f8585838181106115e2576115e2611ec2565b919091013560f81c91506115f9905060018361211b565b915060ff8116600114611638576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86838761164782600261211b565b9261165493929190612161565b61165d9161223a565b60f01c905061166d60028461211b565b925061ffff81166001146116ad576040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787858181106116c0576116c0611ec2565b919091013560f81c91506116d7905060018561211b565b935060ff81166116ed576001602086015261175c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff821601611723576001604086015261175c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff82160161158a5760016020860181905260408601525b5f88858961176b82600461211b565b9261177893929190612161565b61178191612280565b60e01c905061179160048661211b565b94505f8989878181106117a6576117a6611ec2565b600192013560f81c821492506117be9190508761211b565b95505f8a878b6117cf82600861211b565b926117dc93929190612161565b6117e5916122c6565b60c01c90506117f560088861211b565b965061180883838360018d63ffffffff16565b61181360168861211b565b96505050505050505b808414611855576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526103fa9084906119a2565b5f600282016118fb81848688612161565b6119049161223a565b60f01c95945050505050565b5f83838381811061192357611923611ec2565b919091013560f81c95945050505050565b61193f838383611975565b6103fa576040517f50fae9eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8083165f90815260208590526040812054909161199a91908490611a4116565b949350505050565b5f8060205f8451602086015f885af1806119c1576040513d5f823e3d81fd5b50505f513d915081156119d85780600114156119f2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611245576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610527565b600160ff919091161b16151590565b803573ffffffffffffffffffffffffffffffffffffffff81168114611a73575f80fd5b919050565b5f805f60608486031215611a8a575f80fd5b611a9384611a50565b9250611aa160208501611a50565b9150604084013590509250925092565b63ffffffff81168114610a12575f80fd5b5f60208284031215611ad2575f80fd5b8135611add81611ab1565b9392505050565b80356effffffffffffffffffffffffffffff81168114611a73575f80fd5b803561ffff81168114611a73575f80fd5b5f805f60608486031215611b25575f80fd5b611b2e84611ae4565b9250611b3c60208501611ae4565b9150611b4a60408501611b02565b90509250925092565b5f60608284031215611b63575f80fd5b50919050565b5f8083601f840112611b79575f80fd5b50813567ffffffffffffffff811115611b90575f80fd5b602083019150836020828501011115611ba7575f80fd5b9250929050565b5f805f80848603610140811215611bc3575f80fd5b60c0811215611bd0575f80fd5b50849350611be18660c08701611b53565b925061012085013567ffffffffffffffff811115611bfd575f80fd5b611c0987828801611b69565b95989497509550505050565b5f805f8060408587031215611c28575f80fd5b843567ffffffffffffffff80821115611c3f575f80fd5b818701915087601f830112611c52575f80fd5b813581811115611c60575f80fd5b8860208260051b8501011115611c74575f80fd5b602092830196509450908601359080821115611c8e575f80fd5b818701915087601f830112611ca1575f80fd5b813581811115611caf575f80fd5b88602060a083028501011115611cc3575f80fd5b95989497505060200194505050565b5f805f805f80868803610120811215611ce9575f80fd5b6080811215611cf6575f80fd5b50869550611d078860808901611b53565b945060e087013567ffffffffffffffff80821115611d23575f80fd5b611d2f8a838b01611b69565b9096509450610100890135915080821115611d48575f80fd5b50611d5589828a01611b69565b979a9699509497509295939492505050565b5f60208284031215611d77575f80fd5b611add82611a50565b5f8060208385031215611d91575f80fd5b823567ffffffffffffffff80821115611da8575f80fd5b818501915085601f830112611dbb575f80fd5b813581811115611dc9575f80fd5b8660208260061b8501011115611ddd575f80fd5b60209290920196919550909350505050565b67ffffffffffffffff81168114610a12575f80fd5b5f60208284031215611e14575f80fd5b8135611add81611def565b6fffffffffffffffffffffffffffffffff81168114610a12575f80fd5b5f805f8060808587031215611e4f575f80fd5b845193506020850151611e6181611e1f565b6040860151909350611e7281611e1f565b6060860151909250611e8381611e1f565b939692955090935050565b5f60208284031215611e9e575f80fd5b611add82611b02565b5f60208284031215611eb7575f80fd5b8135611add81611e1f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8135610c1f81611ab1565b8135611f0681611ab1565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135611f4681611def565b6bffffffffffffffff000000008160201b16905080837fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008416171784556040850135611f9181611def565b73ffffffffffffffff0000000000000000000000008160601b169050837fffffffffffffffffffffffff000000000000000000000000000000000000000084161793508084831717855560608601359250611feb83611ab1565b77ffffffff00000000000000000000000000000000000000008360a01b167fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff8516831782171785555050505061209361204660808401611eef565b82547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1660c09190911b7bffffffff00000000000000000000000000000000000000000000000016178255565b5050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610c1f57610c1f612097565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612116576121166120db565b500490565b80820180821115610c1f57610c1f612097565b6effffffffffffffffffffffffffffff81811683821602808216919082811461215957612159612097565b505092915050565b5f808585111561216f575f80fd5b8386111561217b575f80fd5b5050820193919092039150565b5f82612196576121966120db565b500690565b81810381811115610c1f57610c1f612097565b67ffffffffffffffff828116828216039080821115610e0857610e08612097565b67ffffffffffffffff81811683821602808216919082811461215957612159612097565b5f67ffffffffffffffff8084168061220d5761220d6120db565b92169190910492915050565b67ffffffffffffffff818116838216019080821115610e0857610e08612097565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156121595760029490940360031b84901b1690921692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156121595760049490940360031b84901b1690921692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156121595760089490940360031b84901b169092169291505056fea2646970667358221220cccc97c15d4a10960156cf1d97eac992ad00f3710384385711595e0370e0871a64736f6c6343000816003360e060405234801562000010575f80fd5b5060405162001e1538038062001e15833981016040819052620000339162000172565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b62000064816200010b565b50600180546001600160a01b0319166001600160a01b0384811691909117909155811660808190525f60a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620000ca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000f09190620001af565b63ffffffff1660c052505060636003556064600455620001db565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016f575f80fd5b50565b5f806040838503121562000184575f80fd5b825162000191816200015a565b6020840151909250620001a4816200015a565b809150509250929050565b5f60208284031215620001c0575f80fd5b815163ffffffff81168114620001d4575f80fd5b9392505050565b60805160a05160c051611bf3620002225f395f6103fc01525f61036f01525f818161033c015281816106e90152818161081201528181610a5c0152610cc30152611bf35ff3fe60806040526004361061018e575f3560e01c8063715018a6116100d5578063996f79c01161007e578063dabca06311610058578063dabca0631461051f578063f2fde38b1461053e578063fd9be5221461055d57610195565b8063996f79c0146104bf578063aec336e6146104d4578063d80e9bd9146104f357610195565b80638da5cb5b116100af5780638da5cb5b146104545780638f58aa7a1461047d578063909532381461049c57610195565b8063715018a6146103d757806372607537146103eb57806372d713221461043357610195565b80634389e58f1161013757806361d027b31161011157806361d027b31461035e5780636251b637146103915780636750cd4c146103b757610195565b80634389e58f146102d357806354fd4d50146103015780635e280f111461032b57610195565b80631881d94d116101685780631881d94d1461026d5780631c7c294e14610288578063334993ff146102b457610195565b806301ffc9a7146101c75780630e97289b146101fb57806312cc947f1461024c57610195565b3661019557005b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156101d2575f80fd5b506101e66101e136600461127f565b61057c565b60405190151581526020015b60405180910390f35b348015610206575f80fd5b506001546102279073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f2565b348015610257575f80fd5b5061026b6102663660046112fc565b610614565b005b348015610278575f80fd5b5060026040516101f2919061133b565b348015610293575f80fd5b506002546102279073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102bf575f80fd5b5061026b6102ce36600461137a565b6107e7565b3480156102de575f80fd5b506102f26102ed3660046114c1565b6107fa565b6040516101f29392919061159b565b34801561030c575f80fd5b50604080515f80825260208201526002918101919091526060016101f2565b348015610336575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b348015610369575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b34801561039c575f80fd5b506103a5600181565b60405160ff90911681526020016101f2565b3480156103c2575f80fd5b506101e66103d13660046115ed565b50600190565b3480156103e2575f80fd5b5061026b610965565b3480156103f6575f80fd5b5061041e7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101f2565b34801561043e575f80fd5b50610447610978565b6040516101f29190611606565b34801561045f575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610227565b348015610488575f80fd5b5061026b610497366004611644565b610a04565b3480156104a7575f80fd5b506104b160035481565b6040519081526020016101f2565b3480156104ca575f80fd5b506104b160045481565b3480156104df575f80fd5b5061026b6104ee36600461166e565b610b5c565b3480156104fe575f80fd5b5061051261050d366004611689565b610bab565b6040516101f291906116ff565b34801561052a575f80fd5b5061026b610539366004611716565b610beb565b348015610549575f80fd5b5061026b61055836600461166e565b610c03565b348015610568575f80fd5b5061026b610577366004611644565b610c6b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061060e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff1615801590610653575060025473ffffffffffffffffffffffffffffffffffffffff163314155b1561068a576040517f70b216ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60405180606001604052806106a08585610d5b565b63ffffffff1681526020016106b58585610d7d565b81526020016106c48585610d9c565b67ffffffffffffffff169052905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a825d747826107198686610dbe565b6107238787610dcf565b604051610731929190611750565b6040805191829003822060e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168352845163ffffffff1660048401526020850151602484015293015167ffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091166064820152608481019190915260a4015f604051808303815f87803b1580156107cc575f80fd5b505af11580156107de573d5f803e3d5ffd5b50505050505050565b6107ef610dea565b600491909155600355565b604080518082019091525f80825260208201526060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461087f576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61089061088b87611776565b610e3c565b915084515f146108a0578461092a565b600580546108ad90611811565b80601f01602080910402602001604051908101604052809291908181526020018280546108d990611811565b80156109245780601f106108fb57610100808354040283529160200191610924565b820191905f5260205f20905b81548152906001019060200180831161090757829003601f168201915b50505050505b90506109368282610ea1565b6040518060400160405280600454815260200185610954575f610958565b6003545b9052969195509350915050565b61096d610dea565b6109765f610f2a565b565b6005805461098590611811565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190611811565b80156109fc5780601f106109d3576101008083540402835291602001916109fc565b820191905f5260205f20905b8154815290600101906020018083116109df57829003601f168201915b505050505081565b610a0c610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610a59576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae7919061185c565b905073ffffffffffffffffffffffffffffffffffffffff8116610b36576040517f54c1781b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff82168484610f9e565b505050565b610b64610dea565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b604080518082019091525f80825260208201526040518060400160405280600454815260200183610bdc575f610be0565b6003545b905295945050505050565b610bf3610dea565b6005610bff82826118c2565b5050565b610c0b610dea565b73ffffffffffffffffffffffffffffffffffffffff8116610c5f576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610c6881610f2a565b50565b610c73610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610cc0576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4e919061185c565b9050610b5781848461102b565b5f610d6a600d600984866119da565b610d7391611a01565b60e01c9392505050565b5f610d8c602d600d84866119da565b610d9591611a49565b9392505050565b5f610dab6009600184866119da565b610db491611a85565b60c01c9392505050565b5f610d95610dcc848461105b565b90565b365f610dde83605181876119da565b915091505b9250929050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610976576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c56565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610e8b986001989197919673ffffffffffffffffffffffffffffffffffffffff169501611acb565b6040516020818303038152906040529050919050565b6001546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063faed6c5890610ef99085908590600401611b90565b5f604051808303815f87803b158015610f10575f80fd5b505af1158015610f22573d5f803e3d5ffd5b505050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b5790849061106a565b73ffffffffffffffffffffffffffffffffffffffff831661105057610b57828261110f565b610b57838383611211565b5f610d8c6051603184866119da565b5f8060205f8451602086015f885af180611089576040513d5f823e3d81fd5b50505f513d915081156110a05780600114156110ba565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611109576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c56565b50505050565b73ffffffffffffffffffffffffffffffffffffffff821661115c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146111b2576040519150601f19603f3d011682016040523d82523d5f602084013e6111b7565b606091505b5050905080610b57576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c56565b73ffffffffffffffffffffffffffffffffffffffff821661125e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff84168383610f9e565b5f6020828403121561128f575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d95575f80fd5b5f8083601f8401126112ce575f80fd5b50813567ffffffffffffffff8111156112e5575f80fd5b602083019150836020828501011115610de3575f80fd5b5f806020838503121561130d575f80fd5b823567ffffffffffffffff811115611323575f80fd5b61132f858286016112be565b90969095509350505050565b6020810160038310611374577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f806040838503121561138b575f80fd5b50508035926020909101359150565b5f60e082840312156113aa575f80fd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff81118282101715611400576114006113b0565b60405290565b5f82601f830112611415575f80fd5b813567ffffffffffffffff80821115611430576114306113b0565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611476576114766113b0565b8160405283815286602085880101111561148e575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803580151581146114bc575f80fd5b919050565b5f805f606084860312156114d3575f80fd5b833567ffffffffffffffff808211156114ea575f80fd5b6114f68783880161139a565b9450602086013591508082111561150b575f80fd5b5061151886828701611406565b925050611527604085016114ad565b90509250925092565b5f5b8381101561154a578181015183820152602001611532565b50505f910152565b5f8151808452611569816020860160208601611530565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8351815260208085015190820152608060408201525f6115be6080830185611552565b82810360608401526115d08185611552565b9695505050505050565b803563ffffffff811681146114bc575f80fd5b5f602082840312156115fd575f80fd5b610d95826115da565b602081525f610d956020830184611552565b73ffffffffffffffffffffffffffffffffffffffff81168114610c68575f80fd5b80356114bc81611618565b5f8060408385031215611655575f80fd5b823561166081611618565b946020939093013593505050565b5f6020828403121561167e575f80fd5b8135610d9581611618565b5f805f806060858703121561169c575f80fd5b843567ffffffffffffffff808211156116b3575f80fd5b6116bf8883890161139a565b955060208701359150808211156116d4575f80fd5b506116e1878288016112be565b90945092506116f49050604086016114ad565b905092959194509250565b81518152602080830151908201526040810161060e565b5f60208284031215611726575f80fd5b813567ffffffffffffffff81111561173c575f80fd5b61174884828501611406565b949350505050565b818382375f9101908152919050565b803567ffffffffffffffff811681146114bc575f80fd5b5f60e08236031215611786575f80fd5b61178e6113dd565b6117978361175f565b81526117a5602084016115da565b60208201526117b660408401611639565b60408201526117c7606084016115da565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156117f9575f80fd5b61180536828601611406565b60c08301525092915050565b600181811c9082168061182557607f821691505b6020821081036113aa577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6020828403121561186c575f80fd5b8151610d9581611618565b601f821115610b5757805f5260205f20601f840160051c8101602085101561189c5750805b601f840160051c820191505b818110156118bb575f81556001016118a8565b5050505050565b815167ffffffffffffffff8111156118dc576118dc6113b0565b6118f0816118ea8454611811565b84611877565b602080601f831160018114611942575f841561190c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610f22565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561198e5788860151825594840194600190910190840161196f565b50858210156119ca57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b5f80858511156119e8575f80fd5b838611156119f4575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611a415780818660040360031b1b83161692505b505092915050565b8035602083101561060e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015611a415760089490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611b7c816071850160208701611530565b919091016071019998505050505050505050565b604081525f611ba26040830185611552565b8281036020840152611bb48185611552565b9594505050505056fea2646970667358221220153f6a8e912d5720c2f1c4bf884b915b03d8f933123bf4fbba154ab615acb52564736f6c63430008160033608060405234801561000f575f80fd5b50610a8c8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e5c5e9a31461002d575b5f80fd5b61004061003b3660046106f8565b610057565b60405161004e9291906107cf565b60405180910390f35b606080610064848461006f565b915091509250929050565b60608060028310156100b4576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f6100c260028286886107fc565b6100cb91610823565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161029357805f5b86831015610220575f61011460018501858a8c6107fc565b61011d9161086b565b60f81c90505f81900361015e576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016100ab565b8160ff165f03610170578091506101ac565b8160ff168160ff16146101ac57365f61018b86868c8e6107fc565b9150915061019c89898685856102aa565b9099509750859450919250829150505b60018401935f906101c290600301868b8d6107fc565b6101cb91610823565b60f01c90505f81900361020d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016100ab565b8060020161ffff168501945050506100fc565b82871461025c576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016100ab565b600287111561028c57365f61027385858b8d6107fc565b9150915061028488888585856102aa565b909850965050505b50506102a1565b61029e82878761041d565b93505b50509250929050565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161034457865115610307578684846040516020016102f3939291906108b1565b60405160208183030381529060405261033d565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650610412565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016103db5785511561039e5785848460405160200161038a939291906108b1565b6040516020818303038152906040526103d4565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550610412565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016100ab565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff8516016105425760228214610484576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6104a46104966022600286886107fc565b61049f916108d7565b61069f565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050610698565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff8516016106605760428211158061057d5750606282115b156105b4576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c66104966022600286886107fc565b90505f6105da6104966042602287896107fc565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe850161060d866042818a6107fc565b610616916108d7565b60405160086020938403029190911c9250610647916001916011918391889183916031916002918b918b9101610914565b6040516020818303038152906040529350505050610698565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016100ab565b9392505050565b5f6fffffffffffffffffffffffffffffffff8211156106f4576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016100ab565b5090565b5f8060208385031215610709575f80fd5b823567ffffffffffffffff80821115610720575f80fd5b818501915085601f830112610733575f80fd5b813581811115610741575f80fd5b866020828501011115610752575f80fd5b60209290920196919550909350505050565b5f5b8381101561077e578181015183820152602001610766565b50505f910152565b5f815180845261079d816020860160208601610764565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f6107e16040830185610786565b82810360208401526107f38185610786565b95945050505050565b5f808585111561080a575f80fd5b83861115610816575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156108635780818660020360031b1b83161692505b505092915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156108635760019490940360031b84901b1690921692915050565b5f84516108c2818460208901610764565b8201838582375f930192835250909392505050565b8035602083101561090e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b165b92915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008b60f01b166001840152808a60f81b1660038401527fffffffffffffffffffffffffffffffff000000000000000000000000000000008960801b166004840152808860f81b166014840152506109dc601583018760f01b7fffff000000000000000000000000000000000000000000000000000000000000169052565b610a0d601783018660f81b7fff00000000000000000000000000000000000000000000000000000000000000169052565b610a3e601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea26469706673582212204c5336eb5e4cfed89d8f0ececad030c194802d04a3053cab299816b06066820764736f6c63430008160033a264697066735822122052daf7891cdc2347ff00e50a7e53d499eb73e92df13543ad919710a98f17cce764736f6c63430008160033608060405234801561000f575f80fd5b50610a8c8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e5c5e9a31461002d575b5f80fd5b61004061003b3660046106f8565b610057565b60405161004e9291906107cf565b60405180910390f35b606080610064848461006f565b915091509250929050565b60608060028310156100b4576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f6100c260028286886107fc565b6100cb91610823565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161029357805f5b86831015610220575f61011460018501858a8c6107fc565b61011d9161086b565b60f81c90505f81900361015e576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016100ab565b8160ff165f03610170578091506101ac565b8160ff168160ff16146101ac57365f61018b86868c8e6107fc565b9150915061019c89898685856102aa565b9099509750859450919250829150505b60018401935f906101c290600301868b8d6107fc565b6101cb91610823565b60f01c90505f81900361020d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016100ab565b8060020161ffff168501945050506100fc565b82871461025c576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016100ab565b600287111561028c57365f61027385858b8d6107fc565b9150915061028488888585856102aa565b909850965050505b50506102a1565b61029e82878761041d565b93505b50509250929050565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161034457865115610307578684846040516020016102f3939291906108b1565b60405160208183030381529060405261033d565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650610412565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016103db5785511561039e5785848460405160200161038a939291906108b1565b6040516020818303038152906040526103d4565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550610412565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016100ab565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff8516016105425760228214610484576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6104a46104966022600286886107fc565b61049f916108d7565b61069f565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050610698565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff8516016106605760428211158061057d5750606282115b156105b4576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c66104966022600286886107fc565b90505f6105da6104966042602287896107fc565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe850161060d866042818a6107fc565b610616916108d7565b60405160086020938403029190911c9250610647916001916011918391889183916031916002918b918b9101610914565b6040516020818303038152906040529350505050610698565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016100ab565b9392505050565b5f6fffffffffffffffffffffffffffffffff8211156106f4576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016100ab565b5090565b5f8060208385031215610709575f80fd5b823567ffffffffffffffff80821115610720575f80fd5b818501915085601f830112610733575f80fd5b813581811115610741575f80fd5b866020828501011115610752575f80fd5b60209290920196919550909350505050565b5f5b8381101561077e578181015183820152602001610766565b50505f910152565b5f815180845261079d816020860160208601610764565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f6107e16040830185610786565b82810360208401526107f38185610786565b95945050505050565b5f808585111561080a575f80fd5b83861115610816575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156108635780818660020360031b1b83161692505b505092915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156108635760019490940360031b84901b1690921692915050565b5f84516108c2818460208901610764565b8201838582375f930192835250909392505050565b8035602083101561090e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b165b92915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008b60f01b166001840152808a60f81b1660038401527fffffffffffffffffffffffffffffffff000000000000000000000000000000008960801b166004840152808860f81b166014840152506109dc601583018760f01b7fffff000000000000000000000000000000000000000000000000000000000000169052565b610a0d601783018660f81b7fff00000000000000000000000000000000000000000000000000000000000000169052565b610a3e601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea26469706673582212204c5336eb5e4cfed89d8f0ececad030c194802d04a3053cab299816b06066820764736f6c63430008160033",
+ "sourceMap": "892:7930:135:-:0;;;;;3126:44:90;;;3166:4;-1:-1:-1;;3126:44:90;;;;;;;;1065:26:101;;;;;;;;;;;738:20:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;710:48:73;;;-1:-1:-1;;;;;710:48:73;;;;;;-1:-1:-1;;;;;;710:48:73;;;;;;;;;4586:43:74;;;-1:-1:-1;;;;;;4586:43:74;4620:9;4586:43;;;987:21:135;;;-1:-1:-1;;987:21:135;1007:1;987:21;;;1493:17;;;;;;;;;;;;-1:-1:-1;;;1493:17:135;;;;;;:8;:17::i;:::-;1470:40;;;-1:-1:-1;;;;;;1470:40:135;-1:-1:-1;;;;;1470:40:135;;;;;;;;;;1539:17;;;;;;;;;;;;-1:-1:-1;;;1539:17:135;;;;;;:8;:17::i;:::-;1516:40;;;-1:-1:-1;;;;;;1516:40:135;-1:-1:-1;;;;;1516:40:135;;;;;;;;;;1624:23;;;;;;;;;;;;-1:-1:-1;;;1624:23:135;;;;;;:8;:23::i;:::-;1595:52;;;-1:-1:-1;;;;;;1595:52:135;-1:-1:-1;;;;;1595:52:135;;;;;;;;;;1691:66;1746:7;-1:-1:-1;1691:27:135;1370:24:62;;;-1:-1:-1;;;1370:24:62;;;2822:51:139;1370:24:62;;;;;;;;;2889:11:139;;;;1370:24:62;;;;1294:107;1691:27:135;:54;:66;:54;:66::i;:::-;1653:104;;;;;;:::i;:::-;;892:7930;;;;;;;;;;;;20760:125:91;20824:12;20858:20;20873:4;20858:14;:20::i;:::-;-1:-1:-1;20848:30:91;20760:125;-1:-1:-1;;20760:125:91:o;2092:357:62:-;2254:12;2235:8;808:1;1059:20;2235:8;1077:1;1059:17;:20::i;:::-;:30;;;1055:82;;1116:20;:8;1134:1;1116:17;:20::i;:::-;1098:39;;-1:-1:-1;;;1098:39:62;;3085:6:139;3073:19;;;1098:39:62;;;3055:38:139;3028:18;;1098:39:62;;;;;;;;1055:82;2278:19:::1;2300:51;2338:4:::0;2344:6;2300:37:::1;:51::i;:::-;2278:73:::0;-1:-1:-1;2368:74:62::1;2386:8:::0;306:1:13::1;2278:73:62::0;2368:17:::1;:74::i;:::-;2361:81:::0;2092:357;-1:-1:-1;;;;;;2092:357:62:o;20479:242:91:-;20549:12;20563:18;20641:4;20624:22;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;20624:22:91;;;;;;;20614:33;;20624:22;20614:33;;;;-1:-1:-1;;;;;;20665:19:91;;;;;3799:25:139;;;20614:33:91;-1:-1:-1;20665:7:91;;;;3772:18:139;;20665:19:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20694:20;;-1:-1:-1;;;20694:20:91;;20658:26;;-1:-1:-1;20694:8:91;;;;:20;;20658:26;;20709:4;;20694:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20479:242;;;:::o;12935:305:107:-;13013:6;13056:10;:6;13065:1;13056:10;:::i;:::-;13039:6;:13;:27;;13031:60;;;;-1:-1:-1;;;13031:60:107;;5092:2:139;13031:60:107;;;5074:21:139;5131:2;5111:18;;;5104:30;5170:22;5150:18;;;5143:50;5210:18;;13031:60:107;4890:344:139;13031:60:107;-1:-1:-1;13168:29:107;;;13184:3;13168:29;13162:36;12935:305;;;;;:::o;3460:191:13:-;3544:12;-1:-1:-1;;;;;3575:11:13;;;:69;;3614:30;;;-1:-1:-1;;;;;;5418:3:139;5455:16;;;5451:25;;3614:30:13;;;5439:38:139;5511:16;;;5507:25;5493:12;;;5486:47;5549:12;3614:30:13;;;;;;;;;;;;3575:69;;;3589:22;;-1:-1:-1;;;;;;5747:3:139;5717:16;;;5713:47;3589:22:13;;;5701:60:139;5777:12;;3589:22:13;;;;;;;;;;;;3575:69;3568:76;3460:191;-1:-1:-1;;;3460:191:13:o;6602:435:62:-;6766:12;6747:8;808:1;1059:20;6747:8;1077:1;1059:17;:20::i;:::-;:30;;;1055:82;;1116:20;:8;1134:1;1116:17;:20::i;1055:82::-;6843:8:::1;250:1:13;6912:25:62;:7;:14;:23;;;:25;;:::i;:::-;:29;::::0;6940:1:::1;6912:29;:::i;:::-;6980:11;7009:7;6809:221;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6790:240;;6602:435:::0;;;;;;:::o;16296:213:131:-;16352:6;16382:16;16374:24;;16370:103;;;16421:41;;-1:-1:-1;;;16421:41:131;;16452:2;16421:41;;;6949:36:139;7001:18;;;6994:34;;;6922:18;;16421:41:131;6768:266:139;16370:103:131;-1:-1:-1;16496:5:131;16296:213::o;892:7930:135:-;;;;;;;;:::o;14:127:139:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:380;225:1;221:12;;;;268;;;289:61;;343:4;335:6;331:17;321:27;;289:61;396:2;388:6;385:14;365:18;362:38;359:161;;442:10;437:3;433:20;430:1;423:31;477:4;474:1;467:15;505:4;502:1;495:15;359:161;;146:380;;;:::o;656:517::-;757:2;752:3;749:11;746:421;;;793:5;790:1;783:16;837:4;834:1;824:18;907:2;895:10;891:19;888:1;884:27;878:4;874:38;943:4;931:10;928:20;925:47;;;-1:-1:-1;966:4:139;925:47;1021:2;1016:3;1012:12;1009:1;1005:20;999:4;995:31;985:41;;1076:81;1094:2;1087:5;1084:13;1076:81;;;1153:1;1139:16;;1120:1;1109:13;1076:81;;;1080:3;;746:421;656:517;;;:::o;1349:1341::-;1467:10;;-1:-1:-1;;;;;1489:30:139;;1486:56;;;1522:18;;:::i;:::-;1551:96;1640:6;1600:38;1632:4;1626:11;1600:38;:::i;:::-;1594:4;1551:96;:::i;:::-;1702:4;;1759:2;1748:14;;1776:1;1771:662;;;;2477:1;2494:6;2491:89;;;-1:-1:-1;2546:19:139;;;2540:26;2491:89;-1:-1:-1;;1306:1:139;1302:11;;;1298:24;1294:29;1284:40;1330:1;1326:11;;;1281:57;2593:81;;1741:943;;1771:662;603:1;596:14;;;640:4;627:18;;-1:-1:-1;;1807:20:139;;;1924:236;1938:7;1935:1;1932:14;1924:236;;;2027:19;;;2021:26;2006:42;;2119:27;;;;2087:1;2075:14;;;;1954:19;;1924:236;;;1928:3;2188:6;2179:7;2176:19;2173:201;;;2249:19;;;2243:26;-1:-1:-1;;2332:1:139;2328:14;;;2344:3;2324:24;2320:37;2316:42;2301:58;2286:74;;2173:201;;;2420:1;2411:6;2408:1;2404:14;2400:22;2394:4;2387:36;1741:943;;;;;1349:1341;;:::o;3104:250::-;3189:1;3199:113;3213:6;3210:1;3207:13;3199:113;;;3289:11;;;3283:18;3270:11;;;3263:39;3235:2;3228:10;3199:113;;;-1:-1:-1;;3346:1:139;3328:16;;3321:27;3104:250::o;3359:289::-;3490:3;3528:6;3522:13;3544:66;3603:6;3598:3;3591:4;3583:6;3579:17;3544:66;:::i;:::-;3626:16;;;;;3359:289;-1:-1:-1;;3359:289:139:o;3835:290::-;3905:6;3958:2;3946:9;3937:7;3933:23;3929:32;3926:52;;;3974:1;3971;3964:12;3926:52;4000:16;;-1:-1:-1;;;;;4045:31:139;;4035:42;;4025:70;;4091:1;4088;4081:12;4130:493;4336:1;4332;4327:3;4323:11;4319:19;4311:6;4307:32;4296:9;4289:51;4376:2;4371;4360:9;4356:18;4349:30;4270:4;4408:6;4402:13;4451:6;4446:2;4435:9;4431:18;4424:34;4467:79;4539:6;4534:2;4523:9;4519:18;4514:2;4506:6;4502:15;4467:79;:::i;:::-;4607:2;4586:15;-1:-1:-1;;4582:29:139;4567:45;;;;4614:2;4563:54;;4130:493;-1:-1:-1;;;4130:493:139:o;4628:127::-;4689:10;4684:3;4680:20;4677:1;4670:31;4720:4;4717:1;4710:15;4744:4;4741:1;4734:15;4760:125;4825:9;;;4846:10;;;4843:36;;;4859:18;;:::i;5800:168::-;5867:6;5893:10;;;5905;;;5889:27;;5928:11;;;5925:37;;;5942:18;;:::i;5973:790::-;6222:3;6260:6;6254:13;6276:66;6335:6;6330:3;6323:4;6315:6;6311:17;6276:66;:::i;:::-;6399:13;6403:3;6439:16;;;6435:25;;6364:16;;;6421:40;;;-1:-1:-1;;;;;;6518:3:139;6496:16;;;6492:38;6488:1;6477:13;;6470:61;6566:16;;;6562:25;6558:1;6547:13;;6540:48;6613:13;;6635:78;6613:13;6700:1;6689:13;;6682:4;6670:17;;6635:78;:::i;:::-;6733:20;6755:1;6729:28;;5973:790;-1:-1:-1;;;;;;;5973:790:139:o;6768:266::-;892:7930:135;;;;;;",
+ "linkReferences": {}
+ },
+ "deployedBytecode": {
+ "object": "0x6080604052600436106200045a575f3560e01c8063699cbade116200024a578063b1dcf5c8116200013a578063d6d6249711620000c6578063ec53eaa01162000092578063f93e1d611162000076578063f93e1d611462000d79578063fa7626d41462000dc7578063faed6c581462000de2575f80fd5b8063ec53eaa01462000d49578063f5e4efb51462000d60575f80fd5b8063d6d624971462000c8c578063deb22e9a1462000cb0578063defd9da61462000cd1578063e20c9f711462000d32575f80fd5b8063b954fdf61162000106578063b954fdf61462000bed578063ba414fa61462000c3a578063baead19c1462000c51578063cb1a295f1462000c6b575f80fd5b8063b1dcf5c8146200082a578063b5508aa91462000b9c578063b752b72a1462000bb3578063b76bada51462000bd7575f80fd5b806385226c8111620001d65780639751ca8611620001a2578063a29c89841162000186578063a29c89841462000b4a578063ae6ce4001462000b61578063b0464fdc1462000b85575f80fd5b80639751ca861462000ac9578063997cff1b1462000b26575f80fd5b806385226c811462000a3f5780638c5e9f741462000a6557806390a606f51462000a82578063916a17c61462000aa3575f80fd5b80637a8b5d9811620002165780637a8b5d9814620009d95780637f2e593614620009fa57806382411c7714620005a2578063834bd1591462000a1b575f80fd5b8063699cbade146200093d5780636e1775e3146200095b578063703ca25414620009915780637982cf4214620009b5575f80fd5b80632ade38801162000366578063536e8d3a11620002f25780636019788911620002be57806366d9a9a011620002a257806366d9a9a014620008d5578063677d417514620008fb57806367d53a00146200091c575f80fd5b806360197889146200088d57806365449eb014620008b1575f80fd5b8063536e8d3a1462000809578063556257df146200082a5780635e42c9b214620008425780635ea0fefe1462000858575f80fd5b80633e5e3c2311620003325780633e5e3c23146200076b5780633f7286f41462000782578063518e8ab0146200079957806351aa318b14620007f1575f80fd5b80632ade388014620006ec578063375591d714620007125780633bbd6a9414620007335780633cae7b8a146200074a575f80fd5b80631766f5a411620003e65780631f3280c511620003b25780631f3280c514620006505780632113ce62146200066657806325996dae14620006b25780632a35d25014620006c8575f80fd5b80631766f5a414620005a2578063178928d314620005e05780631cc4652514620006065780631ed7831c146200062a575f80fd5b80630afba86811620004265780630afba86814620004f85780630c003ff714620005235780630fcaecfe146200054957806314525bce1462000575575f80fd5b8063090852b6146200046657806309c885c9146200048c5780630a69faa914620004ca5780630a9254e414620004e1575f80fd5b366200046257005b5f80fd5b34801562000472575f80fd5b506200048a62000484366004620084c1565b62000e06565b005b34801562000498575f80fd5b50603d54620004ad906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6200048a620004db3660046200864d565b62000e32565b348015620004ed575f80fd5b506200048a62000f89565b34801562000504575f80fd5b506200050f61271081565b60405161ffff9091168152602001620004c1565b3480156200052f575f80fd5b50603354620004ad9061010090046001600160a01b031681565b34801562000555575f80fd5b506200055f606581565b60405163ffffffff9091168152602001620004c1565b34801562000581575f80fd5b506200059368056bc75e2d6310000081565b604051908152602001620004c1565b348015620005ae575f80fd5b50620005bf670de0b6b3a764000081565b6040516effffffffffffffffffffffffffffff9091168152602001620004c1565b348015620005ec575f80fd5b50620005f76200233b565b604051620004c1919062008730565b34801562000612575f80fd5b506200048a6200062436600462008767565b620023cf565b34801562000636575f80fd5b506200064162002425565b604051620004c19190620087db565b3480156200065c575f80fd5b506200055f600381565b34801562000672575f80fd5b5060245462000690906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001620004c1565b348015620006be575f80fd5b506200055f600181565b348015620006d4575f80fd5b5062000641620006e6366004620087ef565b62002487565b348015620006f8575f80fd5b5062000703620025a0565b604051620004c19190620088b3565b3480156200071e575f80fd5b50603454620004ad906001600160a01b031681565b6200048a6200074436600462008952565b620026e8565b34801562000756575f80fd5b50603854620004ad906001600160a01b031681565b34801562000777575f80fd5b5062000641620027a3565b3480156200078e575f80fd5b506200064162002803565b348015620007a5575f80fd5b50620007bd620007b736600462008a06565b62002863565b6040805161ffff90941684526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001620004c1565b348015620007fd575f80fd5b506200055f6201117181565b34801562000815575f80fd5b50603554620004ad906001600160a01b031681565b34801562000836575f80fd5b5062000593620186a081565b3480156200084e575f80fd5b506200055f600281565b34801562000864575f80fd5b506200087c6200087636600462008a59565b6200287f565b6040519015158152602001620004c1565b34801562000899575f80fd5b506200048a620008ab36600462008a86565b620028df565b348015620008bd575f80fd5b506200048a620008cf36600462008b90565b6200368e565b348015620008e1575f80fd5b50620008ec62003784565b604051620004c1919062008caf565b34801562000907575f80fd5b50603e54620004ad906001600160a01b031681565b34801562000928575f80fd5b50603754620004ad906001600160a01b031681565b34801562000949575f80fd5b506200069068056bc75e2d6310000081565b34801562000967575f80fd5b506200097f6200097936600462008d4a565b62003909565b604051620004c1949392919062008dbf565b3480156200099d575f80fd5b506200048a620009af36600462008dee565b6200392b565b348015620009c1575f80fd5b50620005f7620009d336600462008a59565b62003afc565b348015620009e5575f80fd5b50603954620004ad906001600160a01b031681565b34801562000a06575f80fd5b50603654620004ad906001600160a01b031681565b34801562000a27575f80fd5b506200048a62000a3936600462008e2c565b62003c11565b34801562000a4b575f80fd5b5062000a5662004222565b604051620004c1919062008ea5565b34801562000a71575f80fd5b5062000593670de0b6b3a764000081565b34801562000a8e575f80fd5b50603a54620004ad906001600160a01b031681565b34801562000aaf575f80fd5b5062000aba620042f7565b604051620004c1919062008eb9565b34801562000ad5575f80fd5b5062000aed62000ae736600462008a06565b620043f1565b604080516fffffffffffffffffffffffffffffffff948516815263ffffffff9093166020840152921691810191909152606001620004c1565b34801562000b32575f80fd5b506200048a62000b4436600462008d4a565b62004400565b6200048a62000b5b36600462008f4a565b62004480565b34801562000b6d575f80fd5b506200048a62000b7f36600462008fd5565b62004507565b34801562000b91575f80fd5b5062000aba620045bc565b34801562000ba8575f80fd5b5062000a56620046b6565b34801562000bbf575f80fd5b506200048a62000bd136600462008ff3565b6200478b565b34801562000be3575f80fd5b5062000593600381565b34801562000bf9575f80fd5b5062000c1162000c0b36600462008a06565b620047a8565b604080516fffffffffffffffffffffffffffffffff9093168352602083019190915201620004c1565b34801562000c46575f80fd5b506200087c620047c2565b34801562000c5d575f80fd5b506200059364e8d4a5100081565b34801562000c77575f80fd5b50603c54620004ad906001600160a01b031681565b34801562000c98575f80fd5b506200048a62000caa36600462009012565b62004896565b34801562000cbc575f80fd5b50603b54620004ad906001600160a01b031681565b34801562000cdd575f80fd5b506200048a62000cef3660046200908a565b602480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b34801562000d3e575f80fd5b506200064162006b25565b6200048a62000d5a36600462008a86565b62006b85565b34801562000d6c575f80fd5b5062000593630ee6b28081565b34801562000d85575f80fd5b5062000d9d62000d9736600462008a06565b62006cb8565b604080516fffffffffffffffffffffffffffffffff938416815292909116602083015201620004c1565b34801562000dd3575f80fd5b50601f546200087c9060ff1681565b34801562000dee575f80fd5b506200048a62000e00366004620090a8565b62006cc6565b62000e2e82826001600160a01b03165f1b5f8060405180602001604052805f81525062003c11565b5050565b5f60235f62000e42878762006d51565b63ffffffff16815260208101919091526040015f908120546001600160a01b031691508062000e718562006d77565b92505091505f604051806060016040528062000e8e8a8a62006eab565b63ffffffff16815260200162000ea58a8a62006ebc565b815260200162000eb68a8a62006ed8565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e6fffffffffffffffffffffffffffffffff8581169085168462000ef78d8d62006efe565b62000f038e8e62006f12565b604080516020810182525f815290517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16815262000f4e949392918e9160040162009116565b5f604051808303818589803b15801562000f66575f80fd5b5088f115801562000f79573d5f803e3d5ffd5b5050505050505050505050505050565b62000f9362006f23565b60335462000fa59060ff165f620023cf565b60025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c0954603d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169182179055604051309062001016906200816d565b620010239291906200918a565b604051809103905ff0801580156200103d573d5f803e3d5ffd5b50603380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384160217905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e047546040519116903090620010b4906200816d565b620010c192919062009227565b604051809103905ff080158015620010db573d5f803e3d5ffd5b50603580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e5460405191169030906200114e906200816d565b6200115b929190620092a1565b604051809103905ff08015801562001175573d5f803e3d5ffd5b50603780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff811115620011d157620011d16200853e565b604051908082528060200260200182016040528015620011fb578160200160208202803683370190505b5060355481519192506001600160a01b03169082905f906200122157620012216200931b565b6001600160a01b039283166020918202929092010152603354825161010090910490911690829060019081106200125c576200125c6200931b565b6001600160a01b0392831660209182029290920101526037548251911690829060029081106200129057620012906200931b565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca25490620012e6908490600401620087db565b5f604051808303815f87803b158015620012fe575f80fd5b505af115801562001311573d5f803e3d5ffd5b50505050603360019054906101000a90046001600160a01b031660405162001339906200817b565b62001345919062009348565b604051809103905ff0801580156200135f573d5f803e3d5ffd5b50603980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c0954604051919216903090620013d69062008189565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff08015801562001410573d5f803e3d5ffd5b50603480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560395460335460405191841693610100909104169190620014699062008197565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff080158015620014a3573d5f803e3d5ffd5b50603a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e04754604051911690309062001516906200816d565b62001523929190620093da565b604051809103905ff0801580156200153d573d5f803e3d5ffd5b50603680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e546040519116903090620015b0906200816d565b620015bd92919062009454565b604051809103905ff080158015620015d7573d5f803e3d5ffd5b50603880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff8111156200163357620016336200853e565b6040519080825280602002602001820160405280156200165d578160200160208202803683370190505b5060365481519192506001600160a01b03169082905f906200168357620016836200931b565b6001600160a01b039283166020918202929092010152603454825191169082906001908110620016b757620016b76200931b565b6001600160a01b039283166020918202929092010152603854825191169082906002908110620016eb57620016eb6200931b565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca2549062001741908490600401620087db565b5f604051808303815f87803b15801562001759575f80fd5b505af11580156200176c573d5f803e3d5ffd5b5050603354604080517fc657c7180000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b031660048301526024820152600d60448201527f41737365744f46543a3a617262000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562001817575f80fd5b505af11580156200182a573d5f803e3d5ffd5b5050603554604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b158015620018d1575f80fd5b505af1158015620018e4573d5f803e3d5ffd5b5050603754604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b1580156200198b575f80fd5b505af11580156200199e573d5f803e3d5ffd5b5050603454604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601460448201527f53686172654f4654416461707465723a3a6172620000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562001a45575f80fd5b505af115801562001a58573d5f803e3d5ffd5b5050603654604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562001aff575f80fd5b505af115801562001b12573d5f803e3d5ffd5b5050603854604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562001bb9575f80fd5b505af115801562001bcc573d5f803e3d5ffd5b5050603954604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600a60448201527f5661756c743a3a617262000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562001c73575f80fd5b505af115801562001c86573d5f803e3d5ffd5b5050603a54604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601660448201527f5661756c74436f6d706f73657253796e633a3a617262000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562001d2d575f80fd5b505af115801562001d40573d5f803e3d5ffd5b5050603e5462001d6692506001600160a01b0316905068056bc75e2d6310000062006f2f565b603d5462001d87906001600160a01b031668056bc75e2d6310000062006f2f565b604080516003808252608082019092525f91816020015b60408051606080820183525f80835260208301529181019190915281526020019060019003908162001d9e5790505090506040518060600160405280600363ffffffff168152602001600161ffff168152602001603f805462001e0190620094ce565b80601f016020809104026020016040519081016040528092919081815260200182805462001e2f90620094ce565b801562001e7e5780601f1062001e545761010080835404028352916020019162001e7e565b820191905f5260205f20905b81548152906001019060200180831162001e6057829003601f168201915b5050505050815250815f8151811062001e9b5762001e9b6200931b565b60200260200101819052506040518060600160405280600263ffffffff168152602001600161ffff168152602001603f805462001ed890620094ce565b80601f016020809104026020016040519081016040528092919081815260200182805462001f0690620094ce565b801562001f555780601f1062001f2b5761010080835404028352916020019162001f55565b820191905f5260205f20905b81548152906001019060200180831162001f3757829003601f168201915b50505050508152508160018151811062001f735762001f736200931b565b60200260200101819052506040518060600160405280600163ffffffff168152602001600161ffff168152602001603f805462001fb090620094ce565b80601f016020809104026020016040519081016040528092919081815260200182805462001fde90620094ce565b80156200202d5780601f1062002003576101008083540402835291602001916200202d565b820191905f5260205f20905b8154815290600101906020018083116200200f57829003601f168201915b5050505050815250816002815181106200204b576200204b6200931b565b60209081029190910101526033546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063b98bd07090620020a590849060040162009521565b5f604051808303815f87803b158015620020bd575f80fd5b505af1158015620020d0573d5f803e3d5ffd5b50506035546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200211f90849060040162009521565b5f604051808303815f87803b15801562002137575f80fd5b505af11580156200214a573d5f803e3d5ffd5b50506037546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200219990849060040162009521565b5f604051808303815f87803b158015620021b1575f80fd5b505af1158015620021c4573d5f803e3d5ffd5b50506034546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200221390849060040162009521565b5f604051808303815f87803b1580156200222b575f80fd5b505af11580156200223e573d5f803e3d5ffd5b50506036546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200228d90849060040162009521565b5f604051808303815f87803b158015620022a5575f80fd5b505af1158015620022b8573d5f803e3d5ffd5b50506038546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200230790849060040162009521565b5f604051808303815f87803b1580156200231f575f80fd5b505af115801562002332573d5f803e3d5ffd5b50505050505050565b603f80546200234a90620094ce565b80601f01602080910402602001604051908101604052809291908181526020018280546200237890620094ce565b8015620023c75780601f106200239d57610100808354040283529160200191620023c7565b820191905f5260205f20905b815481529060010190602001808311620023a957829003601f168201915b505050505081565b62000e2e82828460ff1667ffffffffffffffff811115620023f457620023f46200853e565b6040519080825280602002602001820160405280156200241e578160200160208202803683370190505b5062004896565b606060168054806020026020016040519081016040528092919081815260200182805480156200247d57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116200245e575b5050505050905090565b60608160ff1667ffffffffffffffff811115620024a857620024a86200853e565b604051908082528060200260200182016040528015620024d2578160200160208202803683370190505b509050825b620024e38385620095eb565b60ff168160ff1610156200258d5760ff81165f9081526023602090815260408083205481516001600160a01b03909116928101929092523090820152600160608201526200254590879060800160405160208183030381529060405262006fbd565b9050808362002555878562009607565b60ff16815181106200256b576200256b6200931b565b6001600160a01b039092166020928302919091019091015250600101620024d7565b5062002599816200392b565b9392505050565b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015620026df575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015620026c7578382905f5260205f200180546200263590620094ce565b80601f01602080910402602001604051908101604052809291908181526020018280546200266390620094ce565b8015620026b25780601f106200268857610100808354040283529160200191620026b2565b820191905f5260205f20905b8154815290600101906020018083116200269457829003601f168201915b50505050508152602001906001019062002615565b505050508152505081526020019060010190620025c3565b50505050905090565b63ffffffff87165f908152602360205260408120546001600160a01b0316908080620027148962007019565b925092509250836001600160a01b03166391d20fa18284908d8b8d898d8d60405180602001604052805f8152506040518a63ffffffff1660e01b815260040162002765979695949392919062009623565b5f604051808303818589803b1580156200277d575f80fd5b5088f115801562002790573d5f803e3d5ffd5b5050505050505050505050505050505050565b606060188054806020026020016040519081016040528092919081815260200182805480156200247d57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116200245e575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156200247d57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116200245e575050505050905090565b5f805f62002872858562007161565b9250925092509250925092565b61ffff82165f90815260208080526040808320848452909152812081620028d482546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b119150505b92915050565b5f620028ec848462006d51565b63ffffffff81165f908152602360205260408120549192506001600160a01b03909116908163402f846862002922888862006efe565b6200292e898962006eab565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015263ffffffff1660248201526044016040805180830381865afa15801562002993573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620029b9919062009690565b5090505f620029c98787620071f5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250604080517f54fd4d50000000000000000000000000000000000000000000000000000000008152905195965090946001600160a01b03881694506354fd4d509350600480830193506060928290030181865afa15801562002a5b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002a819190620096ea565b505090508067ffffffffffffffff1660030362002ffe57825f6001600160a01b038216639c33abf762002ab58c8c62006eab565b62002ac18d8d62006efe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600260448201526064015f60405180830381865afa15801562002b2e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405262002b57919081019062009776565b90505f8180602001905181019062002b7091906200981a565b608001515f8151811062002b885762002b886200931b565b602002602001015190505f62002b9f8c8c62007206565b60405162002baf929190620098fc565b6040518091039020905060605f630223536e60e01b8884606460405160240162002bdc939291906200990b565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03851663f010cb238d898562002c5e426103e862009938565b6040518563ffffffff1660e01b815260040162002c7f94939291906200994e565b602060405180830381865afa15801562002c9b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002cc191906200998e565b905062002cce8162007217565b6040805160018082528183019092529194505f9250816020015b6040805160a0810182525f80825260208201819052606092820183905282820152608081019190915281526020019060019003908162002ce85790505090506040518060a001604052808d63ffffffff168152602001886001600160a01b03168152602001838152602001426103e862002d63919062009938565b815260200184815250815f8151811062002d815762002d816200931b565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b143044b9062002dd3908490600401620099a6565b5f604051808303815f87803b15801562002deb575f80fd5b505af115801562002dfe573d5f803e3d5ffd5b505050505f630894edf160e01b8a8660405160240162002e2092919062009a72565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03871663f010cb238f8b8562002ea2426103e862009938565b6040518563ffffffff1660e01b815260040162002ec394939291906200994e565b602060405180830381865afa15801562002edf573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002f0591906200998e565b905062002f128162007217565b9450506040518060a001604052808e63ffffffff168152602001896001600160a01b03168152602001828152602001426103e862002f51919062009938565b815260200185815250825f8151811062002f6f5762002f6f6200931b565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063b143044b9062002fc1908590600401620099a6565b5f604051808303815f87803b15801562002fd9575f80fd5b505af115801562002fec573d5f803e3d5ffd5b50505050505050505050505062003684565b8067ffffffffffffffff16600a036200360b57825f6001600160a01b038216639c33abf76200302e8c8c62006eab565b6200303a8d8d62006efe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600160448201526064015f60405180830381865afa158015620030a7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052620030d0919081019062009776565b90505f81806020019051810190620030e9919062009a95565b608001515f815181106200310157620031016200931b565b602002602001015190505f620031188c8c6200735e565b60405162003128929190620098fc565b604051809103902090505f6200313f8d8d62006f12565b8b6040516020016200315392919062009ae7565b60405160208183030381529060405280519060200120905060605f63ab750e7560e01b8985856040516024016200318d9392919062009b0e565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a856200320f426103e862009938565b6040518563ffffffff1660e01b81526004016200323094939291906200994e565b602060405180830381865afa1580156200324c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200327291906200998e565b90506200327f8162007217565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f808252602082018190526060928201839052828201526080810191909152815260200190600190039081620032995790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862003314919062009938565b815260200185815250815f815181106200333257620033326200931b565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b9062003384908490600401620099a6565b5f604051808303815f87803b1580156200339c575f80fd5b505af1158015620033af573d5f803e3d5ffd5b505050505050505f63594924da60e01b898585604051602401620033d69392919062009b0e565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562003458426103e862009938565b6040518563ffffffff1660e01b81526004016200347994939291906200994e565b602060405180830381865afa15801562003495573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620034bb91906200998e565b9050620034c88162007217565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f808252602082018190526060928201839052828201526080810191909152815260200190600190039081620034e25790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e86200355d919062009938565b815260200185815250815f815181106200357b576200357b6200931b565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b90620035cd908490600401620099a6565b5f604051808303815f87803b158015620035e5575f80fd5b505af1158015620035f8573d5f803e3d5ffd5b5050505050505050505050505062003684565b6040517f12cc947f0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906312cc947f9062003654908b908b9060040162009b34565b5f604051808303815f87803b1580156200366c575f80fd5b505af11580156200367f573d5f803e3d5ffd5b505050505b5050505050505050565b5f5b82518110156200377f575f838281518110620036b057620036b06200931b565b602002602001015190505f5b83518110156200377457816001600160a01b031663f0a9e481858381518110620036ea57620036ea6200931b565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff9091166004820152600160248201526044015f604051808303815f87803b15801562003750575f80fd5b505af115801562003763573d5f803e3d5ffd5b505060019092019150620036bc9050565b505060010162003690565b505050565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015620026df578382905f5260205f2090600202016040518060400160405290815f82018054620037da90620094ce565b80601f01602080910402602001604051908101604052809291908181526020018280546200380890620094ce565b8015620038575780601f106200382d5761010080835404028352916020019162003857565b820191905f5260205f20905b8154815290600101906020018083116200383957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015620038f057602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116200389c5790505b50505050508152505081526020019060010190620037a7565b5f365f806200391a8787876200736f565b935093509350935093509350935093565b80515f5b818110156200377f575f8382815181106200394e576200394e6200931b565b602002602001015190505f5b8381101562003af15782811462003ae8575f8582815181106200398157620039816200931b565b602002602001015190505f816001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa158015620039c9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620039ef919062009b49565b6001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003a2b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003a51919062009b67565b9050836001600160a01b0316633400288b8262003a74856001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff92909216600483015260248201526044015f604051808303815f87803b15801562003ace575f80fd5b505af115801562003ae1573d5f803e3d5ffd5b5050505050505b6001016200395a565b50506001016200392f565b61ffff82165f90815260208080526040808320848452909152812060609162003b5382546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b111562003c0a575f62003b6682620073ca565b5f81815260216020526040902080549192509062003b8490620094ce565b80601f016020809104026020016040519081016040528092919081815260200182805462003bb290620094ce565b801562003c015780601f1062003bd75761010080835404028352916020019162003c01565b820191905f5260205f20905b81548152906001019060200180831162003be357829003601f168201915b50505050509250505b5092915050565b63ffffffff85165f908152602360205260409020546001600160a01b031662003c9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f656e64706f696e74206e6f74207965742072656769737465726564000000000060448201526064015b60405180910390fd5b63ffffffff85165f9081526020808052604080832087845290915281209062003cf282546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b90505f855f0362003d36575081546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031662003d4a565b85821162003d45578162003d47565b855b90505b801562003684578062003d5d8162009b85565b9150505f62003d6c8462007473565b5f8181526021602052604081208054929350909162003d8b90620094ce565b80601f016020809104026020016040519081016040528092919081815260200182805462003db990620094ce565b801562003e085780601f1062003dde5761010080835404028352916020019162003e08565b820191905f5260205f20905b81548152906001019060200180831162003dea57829003601f168201915b50506040517f997cff1b000000000000000000000000000000000000000000000000000000008152939450309363997cff1b935062003e509250859150869060040162009a72565b5f6040518083038186803b15801562003e67575f80fd5b505afa15801562003e7a573d5f803e3d5ffd5b50506040517f601978890000000000000000000000000000000000000000000000000000000081523092506360197889915062003ebe9084908a9060040162009bbc565b5f604051808303815f87803b15801562003ed6575f80fd5b505af115801562003ee9573d5f803e3d5ffd5b5050505f83815260226020526040812080549192509062003f0a90620094ce565b80601f016020809104026020016040519081016040528092919081815260200182805462003f3890620094ce565b801562003f875780601f1062003f5d5761010080835404028352916020019162003f87565b820191905f5260205f20905b81548152906001019060200180831162003f6957829003601f168201915b5050505050905062003f9b8160026200751f565b1562004076575f8062003fae8362007534565b604051919350915081905f906001600160a01b0383169085908381818185875af1925050503d805f811462003fff576040519150601f19603f3d011682016040523d82523d5f602084013e62004004565b606091505b505090508062004071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4661696c656420746f2073656e64204574686572000000000000000000000000604482015260640162003c92565b505050505b620040838160016200751f565b15620040f9576040517fec53eaa0000000000000000000000000000000000000000000000000000000008152309063ec53eaa090620040c9908590859060040162009bbc565b5f604051808303815f87803b158015620040e1575f80fd5b505af1158015620040f4573d5f803e3d5ffd5b505050505b620041068160056200751f565b156200417e576040517f0a69faa90000000000000000000000000000000000000000000000000000000081523090630a69faa9906200414e90859085908c9060040162009be4565b5f604051808303815f87803b15801562004166575f80fd5b505af115801562004179573d5f803e3d5ffd5b505050505b6001600160a01b038816158015906200419f57506200419f8160036200751f565b1562004219576040517fa29c8984000000000000000000000000000000000000000000000000000000008152309063a29c898490620041e9908590859088908e9060040162009c2c565b5f604051808303815f87803b15801562004201575f80fd5b505af115801562004214573d5f803e3d5ffd5b505050505b50505062003d4a565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015620026df578382905f5260205f200180546200426590620094ce565b80601f01602080910402602001604051908101604052809291908181526020018280546200429390620094ce565b8015620042e25780601f10620042b857610100808354040283529160200191620042e2565b820191905f5260205f20905b815481529060010190602001808311620042c457829003601f168201915b50505050508152602001906001019062004245565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015620026df575f8481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015620043d857602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620043845790505b505050505081525050815260200190600101906200431a565b5f805f62002872858562007676565b5f6200440d848462006f12565b90508181146200447a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f67756964206e6f74206d61746368000000000000000000000000000000000000604482015260640162003c92565b50505050565b30633bbd6a9462004492878762006d51565b6200449e888862006efe565b868686620044ad8c8c6200735e565b6040518863ffffffff1660e01b8152600401620044d1979695949392919062009c75565b5f604051808303815f87803b158015620044e9575f80fd5b505af1158015620044fc573d5f803e3d5ffd5b505050505050505050565b8060235f836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004548573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200456e919062009b67565b63ffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015620026df575f8481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200469d57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620046495790505b50505050508152505081526020019060010190620045df565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015620026df578382905f5260205f20018054620046f990620094ce565b80601f01602080910402602001604051908101604052809291908181526020018280546200472790620094ce565b8015620047765780601f106200474c5761010080835404028352916020019162004776565b820191905f5260205f20905b8154815290600101906020018083116200475857829003601f168201915b505050505081526020019060010190620046d9565b62000e2e82825f8060405180602001604052805f81525062003c11565b5f80620047b6848462007701565b915091505b9250929050565b6008545f9060ff1615620047da575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa15801562004869573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200488f91906200998e565b1415905090565b8260ff1667ffffffffffffffff811115620048b557620048b56200853e565b604051908082528060200260200182016040528015620048df578160200160208202803683370190505b508051620048f691602591602090910190620081a5565b508260ff1667ffffffffffffffff8111156200491657620049166200853e565b60405190808252806020026020018201604052801562004940578160200160208202803683370190505b508051620049579160269160209091019062008225565b508260ff1667ffffffffffffffff8111156200497757620049776200853e565b604051908082528060200260200182016040528015620049a1578160200160208202803683370190505b508051620049b891602791602090910190620081a5565b508260ff1667ffffffffffffffff811115620049d857620049d86200853e565b60405190808252806020026020018201604052801562004a02578160200160208202803683370190505b50805162004a1991602891602090910190620081a5565b508260ff1667ffffffffffffffff81111562004a395762004a396200853e565b60405190808252806020026020018201604052801562004a63578160200160208202803683370190505b50805162004a7a91602991602090910190620081a5565b5060408051600180825281830190925290602080830190803683375050815162004aac92602a925060200190620081a5565b506040517fffa1864900000000000000000000000000000000000000000000000000000000815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa15801562004b15573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062004b3b919062009b49565b602a80545f9062004b505762004b506200931b565b5f918252602082200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0393909316929092179091555b8360ff168160ff16101562004da8575f62004bae826001620095eb565b60ff1690505f838360ff168151811062004bcc5762004bcc6200931b565b602002602001015190508160256001018460ff168154811062004bf35762004bf36200931b565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055505f6001600160a01b0316816001600160a01b03160362004ccf57813060405162004c4e90620082d3565b63ffffffff90921682526001600160a01b03166020820152604001604051809103905ff08015801562004c83573d5f803e3d5ffd5b506025805460ff861690811062004c9e5762004c9e6200931b565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555062004d64565b81308260405162004ce090620082e1565b63ffffffff90931683526001600160a01b039182166020840152166040820152606001604051809103905ff08015801562004d1d573d5f803e3d5ffd5b506025805460ff861690811062004d385762004d386200931b565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b62004d9d60255f018460ff168154811062004d835762004d836200931b565b5f918252602090912001546001600160a01b031662004507565b505060010162004b91565b503060405162004db890620082ef565b6001600160a01b039091168152602001604051809103905ff08015801562004de2573d5f803e3d5ffd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790555f5b8360ff168160ff161015620067b3575f83600181111562004e425762004e4262009cd7565b0362006585575f60255f018260ff168154811062004e645762004e646200931b565b905f5260205f20015f9054906101000a90046001600160a01b03169050308164e8d4a51000620186a060405162004e9b90620082fd565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff08015801562004ed8573d5f803e3d5ffd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051819062004f21906200830b565b6001600160a01b039091168152602001604051809103905ff08015801562004f4b573d5f803e3d5ffd5b50602c6001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550308164e8d4a51000620186a060405162004f8e9062008319565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff08015801562004fcb573d5f803e3d5ffd5b50602e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556025805460ff84169081106200501e576200501e6200931b565b5f91825260209091200154602c546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b15801562005086575f80fd5b505af115801562005099573d5f803e3d5ffd5b5050505060255f018260ff1681548110620050b857620050b86200931b565b5f91825260209091200154602d546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b15801562005120575f80fd5b505af115801562005133573d5f803e3d5ffd5b5050505060255f018260ff16815481106200515257620051526200931b565b5f91825260209091200154602e546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b158015620051ba575f80fd5b505af1158015620051cd573d5f803e3d5ffd5b5050602c54602780546001600160a01b039092169350915060ff8516908110620051fb57620051fb6200931b565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602d546028805491909216919060ff85169081106200525a576200525a6200931b565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602e546029805491909216919060ff8516908110620052b957620052b96200931b565b5f918252602082200180546001600160a01b03939093167fffffffffffffffffffffffff0000000000000000000000000000000000000000909316929092179091556040805160018082528183019092529081602001602082028036833701905050905030815f815181106200533357620053336200931b565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092525f9290919082016060803683375050602c5482519293506001600160a01b0316918391505f906200539057620053906200931b565b6001600160a01b039283166020918202929092010152602d54825191169082906001908110620053c457620053c46200931b565b6001600160a01b039283166020918202929092010152602e54825191169082906002908110620053f857620053f86200931b565b6001600160a01b039283166020918202929092010152602b5460405185925f928592911690309087906200542c9062008327565b6200543d9695949392919062009d04565b604051809103905ff08015801562005457573d5f803e3d5ffd5b50602f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff8616908110620054aa57620054aa6200931b565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16604051620054dc9062008335565b63ffffffff9091168152602001604051809103905ff08015801562005503573d5f803e3d5ffd5b50603180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602f546040517fc7b2370b00000000000000000000000000000000000000000000000000000000815260048101929092529091169063c7b2370b906024015f604051808303815f87803b15801562005591575f80fd5b505af1158015620055a4573d5f803e3d5ffd5b5050505060256001018460ff1681548110620055c457620055c46200931b565b5f918252602090912060088204015460079091166004026101000a900463ffffffff16620055f4856001620095eb565b602b5460405184916001600160a01b031690602a906001908890620056199062008343565b6200562b979695949392919062009d54565b604051809103905ff08015801562005645573d5f803e3d5ffd5b50603080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff86169081106200569857620056986200931b565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16670de0b6b3a7640000604051620056d39062008351565b63ffffffff90921682526020820152604001604051809103905ff080158015620056ff573d5f803e3d5ffd5b50603280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f39f26dfc000000000000000000000000000000000000000000000000000000008152670de0b6b3a764000060048201819052602482015261271060448201526339f26dfc906064015f604051808303815f87803b1580156200579b575f80fd5b505af1158015620057ae573d5f803e3d5ffd5b50506030546032546040517fc7b2370b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063c7b2370b91506024015f604051808303815f87803b15801562005812575f80fd5b505af115801562005825573d5f803e3d5ffd5b5050505050506200585060405180606001604052806060815260200160608152602001606081525090565b6200585d866001620095eb565b60ff1667ffffffffffffffff8111156200587b576200587b6200853e565b604051908082528060200260200182016040528015620058fa57816020015b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816200589a5790505b5081526200590a866001620095eb565b60ff1667ffffffffffffffff8111156200592857620059286200853e565b6040519080825280602002602001820160405280156200599957816020015b604080516080810182525f8082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181620059475790505b506020820152620059ac866001620095eb565b60ff1667ffffffffffffffff811115620059ca57620059ca6200853e565b60405190808252806020026020018201604052801562005a1057816020015b604080518082019091525f8082526020820152815260200190600190039081620059e95790505b50604082810191909152805160018082528183019092525f91602080830190803683375050604080515f80825260208201909252603054845194955090936001600160a01b03909116925084919062005a6d5762005a6d6200931b565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5b8860ff168160ff1610156200611f578060ff168660ff16031562006116575f62005abb826001620095eb565b60408051600180825281830190925260ff9290921692505f9190816020015b62005ae46200835f565b81526020019060019003908162005ada5790505090505f6040518060c00160405280606467ffffffffffffffff168152602001875160ff168152602001865160ff1681526020015f60ff16815260200187815260200186815250905060405180604001604052808463ffffffff16815260200182815250825f8151811062005b705762005b706200931b565b6020908102919091010152602c546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906329460b0b9062005bc690859060040162009e01565b5f604051808303815f87803b15801562005bde575f80fd5b505af115801562005bf1573d5f803e3d5ffd5b5050602d546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329460b0b915062005c4090859060040162009e01565b5f604051808303815f87803b15801562005c58575f80fd5b505af115801562005c6b573d5f803e3d5ffd5b505f92506001915062005c7b9050565b60405190808252806020026020018201604052801562005cb857816020015b62005ca4620083c4565b81526020019060019003908162005c9a5790505b506040805180820182526127108152602f546001600160a01b0316602080830191909152825180840190935263ffffffff88168352820181905282519293509183905f9062005d0b5762005d0b6200931b565b6020908102919091010152602c546040517fc14c43490000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c14c43499062005d6190859060040162009efc565b5f604051808303815f87803b15801562005d79575f80fd5b505af115801562005d8c573d5f803e3d5ffd5b50506040805160c08101825263ffffffff89168152611388602082018190529181019190915261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a08201528b518051919550935060ff891692508210905062005e015762005e016200931b565b602002602001018190525060405180608001604052808463ffffffff16815260200161138867ffffffffffffffff16815260200161271061ffff1681526020016402540be4006fffffffffffffffffffffffffffffffff1681525087602001518560ff168151811062005e785762005e786200931b565b602002602001018190525060405180604001604052808463ffffffff168152602001600381525087604001518560ff168151811062005ebb5762005ebb6200931b565b60200260200101819052505f60256006015f9054906101000a90046001600160a01b03166001600160a01b031663c18403276040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005f1b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062005f41919062009f6c565b6040805160018082528183019092529192505f9190816020015b62005f8e6040805180820182525f8082528251606081018452818152602081810183905293810191909152909182015290565b81526020019060019003908162005f5b57905050905060405180604001604052808663ffffffff168152602001604051806060016040528085600162005fd5919062009f8a565b6fffffffffffffffffffffffffffffffff1681526001602082018190526040909101529052815182905f906200600f576200600f6200931b565b6020908102919091010152602b546040517f3161b7f60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690633161b7f6906200606590849060040162009fc1565b5f604051808303815f87803b1580156200607d575f80fd5b505af115801562006090573d5f803e3d5ffd5b5050602b546040517f5d6d7ccb00000000000000000000000000000000000000000000000000000000815268056bc75e2d6310000060048201526001600160a01b039091169250635d6d7ccb91506024015f604051808303815f87803b158015620060f9575f80fd5b505af11580156200610c573d5f803e3d5ffd5b5050505050505050505b60010162005a8f565b506040805160018082528183019092525f91816020015b6200614062008406565b815260200190600190039081620061365750506040805160c081018252602f546001600160a01b03168152855160ff9081166020808401919091528651909116828401525f606083018190526080830188905260a08301879052835180850190945262011171845290830182905283519394509092849190620061c757620061c76200931b565b6020908102919091010152602e546040517fc85f4b4e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c85f4b4e906200621d9085906004016200a03e565b5f604051808303815f87803b15801562006235575f80fd5b505af115801562006248573d5f803e3d5ffd5b5050505050506040518060c0016040528060256001018760ff16815481106200627557620062756200931b565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff168252611388908201819052604082015261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a0909101528351805160ff8b16908110620062f157620062f16200931b565b6020026020010181905250604051806080016040528060256001018760ff16815481106200632357620063236200931b565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff1682526113888282015261271060408301526402540be400606090920191909152840151805160ff8b169081106200638257620063826200931b565b6020026020010181905250604051806040016040528060256001018760ff1681548110620063b457620063b46200931b565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff16825260039101526040840151805160ff8b16908110620063fc57620063fc6200931b565b6020908102919091010152602f5483516040517f3d85ac330000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691633d85ac339162006452916004016200a138565b5f604051808303815f87803b1580156200646a575f80fd5b505af11580156200647d573d5f803e3d5ffd5b505060305460208601516040517f52d3b8710000000000000000000000000000000000000000000000000000000081526001600160a01b0390921693506352d3b8719250620064cf916004016200a1d3565b5f604051808303815f87803b158015620064e7575f80fd5b505af1158015620064fa573d5f803e3d5ffd5b505060325460408087015190517ff5ff608f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909216935063f5ff608f92506200654c916004016200a251565b5f604051808303815f87803b15801562006564575f80fd5b505af115801562006577573d5f803e3d5ffd5b5050505050505050620067aa565b60018360018111156200659c576200659c62009cd7565b0362006747575f3060255f018360ff1681548110620065bf57620065bf6200931b565b5f918252602090912001546040516001600160a01b0390911690620065e49062008465565b6001600160a01b03928316815291166020820152604001604051809103905ff08015801562006615573d5f803e3d5ffd5b50905060255f018260ff16815481106200663357620066336200931b565b5f918252602090912001546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063e8964e81906024015f604051808303815f87803b15801562006699575f80fd5b505af1158015620066ac573d5f803e3d5ffd5b505050508060256002018360ff1681548110620066cd57620066cd6200931b565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060256003018360ff16815481106200671557620067156200931b565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555050620067aa565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206c6962726172792074797065000000000000000000000000604482015260640162003c92565b60010162004e1d565b505f5b8360ff168160ff1610156200447a575f60255f018260ff1681548110620067e157620067e16200931b565b5f9182526020822001546001600160a01b031691508460018111156200680b576200680b62009cd7565b036200697c57806001600160a01b031663aafea3126201117160256004018560ff16815481106200684057620068406200931b565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b158015620068ad575f80fd5b505af1158015620068c0573d5f803e3d5ffd5b50505050806001600160a01b031663a718531b6201117160256004018560ff1681548110620068f357620068f36200931b565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b15801562006964575f80fd5b505af115801562006977573d5f803e3d5ffd5b505050505b5f5b8560ff168160ff16101562006b1a578060ff168360ff16031562006b11576001600160a01b03821663aafea312620069b8836001620095eb565b6027805460ff8816908110620069d257620069d26200931b565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b15801562006a3c575f80fd5b505af115801562006a4f573d5f803e3d5ffd5b50505050816001600160a01b031663a718531b82600162006a719190620095eb565b6028805460ff881690811062006a8b5762006a8b6200931b565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b15801562006af9575f80fd5b505af115801562006b0c573d5f803e3d5ffd5b505050505b6001016200697e565b5050600101620067b6565b606060158054806020026020016040519081016040528092919081815260200182805480156200247d57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116200245e575050505050905090565b5f60235f62006b95868662006d51565b63ffffffff16815260208101919091526040015f908120546001600160a01b031691508062006bc48462007764565b915091505f604051806060016040528062006be0898962006eab565b63ffffffff16815260200162006bf7898962006ebc565b815260200162006c08898962006ed8565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e84848462006c348c8c62006efe565b62006c408d8d62006f12565b62006c4c8e8e6200735e565b60405180602001604052805f8152506040518963ffffffff1660e01b815260040162006c7e969594939291906200a29a565b5f604051808303818589803b15801562006c96575f80fd5b5088f115801562006ca9573d5f803e3d5ffd5b50505050505050505050505050565b5f80620047b68484620078a7565b5f62006cd3858562006d51565b90505f62006ce2868662007921565b63ffffffff83165f90815260208080526040808320848452909152812091925062006d0e888862006f12565b905062006d1c828262007932565b5f81815260216020526040902062006d36888a836200a35f565b505f818152602260205260409020620044fc8688836200a35f565b5f62006d626031602d84866200a464565b62006d6d916200a48d565b60e01c9392505050565b5f805f805f62006d89866005620079e4565b915091508162006e1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f7074696f6e7348656c7065723a206c7a52656164206f7074696f6e206e6f7460448201527f20666f756e640000000000000000000000000000000000000000000000000000606482015260840162003c92565b6040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca869062006e5a90849060040162008730565b606060405180830381865afa15801562006e76573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062006e9c91906200a4d4565b94509450945050509193909250565b5f62006d62600d600984866200a464565b5f62006ecd602d600d84866200a464565b62002599916200a51a565b5f62006ee96009600184866200a464565b62006ef4916200a557565b60c01c9392505050565b5f6200259962006f0f848462007921565b90565b5f62006ecd6071605184866200a464565b62006f2d6200803f565b565b6040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015f604051808303815f87803b15801562006fa2575f80fd5b505af115801562006fb5573d5f803e3d5ffd5b505050505050565b5f808360405160200162006fd291906200a59e565b60408051601f198184030181529082905262006ff39185906020016200a5bb565b60405160208183030381529060405290508051602082015ff09150813b62003c0a575f80fd5b5f805f805f6200702b866003620079e4565b9150915081620070be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a436f6d706f7365206f7074696f6e2060448201527f6e6f7420666f756e640000000000000000000000000000000000000000000000606482015260840162003c92565b6040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab090620070fc90849060040162008730565b606060405180830381865afa15801562007118573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200713e91906200a5ed565b91986fffffffffffffffffffffffffffffffff9182169850911695509350505050565b5f80806012841480159062007177575060228414155b15620071af576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620071bc85855f62008090565b9250620071cc85856002620080ba565b915060228414620071de575f620071ec565b620071ec85856012620080ba565b90509250925092565b365f620047b660518285876200a464565b365f620047b683605181876200a464565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290526060905f90605c0160408051601f198184030181529082905280516020909101207fe341eaa4000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291505f9081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e341eaa490604401606060405180830381865afa158015620072dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200730291906200a620565b6040805160208101939093528281019190915260f89290921b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260619091019091529695505050505050565b365f620047b683607181876200a464565b5f368160018401816200738488888462008090565b6002929092019190506200739a888884620080e4565b94506001820161ffff82168301620073b581838b8d6200a464565b979b909a50969850505061ffff160193505050565b5f620073ff825470010000000000000000000000000000000081046fffffffffffffffffffffffffffffffff90811691161490565b1562007411576200741160326200810b565b5080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909204821601165f9081526001909101602052604090205490565b80545f906fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811691168103620074b357620074b360316200810b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016fffffffffffffffffffffffffffffffff9081165f818152600185016020526040812080549190558454909216700100000000000000000000000000000000909102179092555090565b5f6200752c8383620079e4565b509392505050565b5f805f8062007545856002620079e4565b9150915081620075d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696f6e7348656c7065723a206e617469766544726f70206f7074696f6e60448201527f206e6f7420666f756e6400000000000000000000000000000000000000000000606482015260840162003c92565b6040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf6906200761690849060040162008730565b6040805180830381865afa15801562007631573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200765791906200a657565b6fffffffffffffffffffffffffffffffff909116969095509350505050565b5f8080601484148015906200768c575060248414155b15620076c4576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620076d185855f620080ba565b9250620076e1858560106200811c565b915060248414620076f3575f620071ec565b620071ec85856014620080ba565b5f80603083146200773e576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200774b84845f620080ba565b91506200775b8484601062008146565b90509250929050565b5f805f8062007775856001620079e4565b915091508162007808576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a52656365697665206f7074696f6e2060448201527f6e6f7420666f756e640000000000000000000000000000000000000000000000606482015260840162003c92565b6040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d61906200784690849060040162008730565b6040805180830381865afa15801562007861573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200788791906200a686565b6fffffffffffffffffffffffffffffffff91821697911695509350505050565b5f8060108314801590620078bc575060208314155b15620078f4576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200790184845f620080ba565b91506020831462007913575f6200775b565b6200775b84846010620080ba565b5f62006ecd6051603184866200a464565b81546fffffffffffffffffffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0191700100000000000000000000000000000000900481169082160362007996576200799660416200810b565b6fffffffffffffffffffffffffffffffff165f81815260018401602052604090209190915581547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016179055565b601f546040517fe5c5e9a30000000000000000000000000000000000000000000000000000000081525f91606091839161010090046001600160a01b03169063e5c5e9a39062007a3990889060040162008730565b5f60405180830381865afa15801562007a54573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405262007a7d91908101906200a6b8565b50604080515f80825260208201909252919250908190819081905b855185101562008014576040517f6e1775e30000000000000000000000000000000000000000000000000000000081525f90819081903090636e1775e39062007ae8908c908c9060040162009a72565b5f60405180830381865afa15801562007b03573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405262007b2c91908101906200a71f565b9250925092508b60ff168360ff160362008009575f808080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff89160162007c71576040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d619062007bae908a9060040162008730565b6040805180830381865afa15801562007bc9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062007bef91906200a686565b909550935062007c00858d6200a77b565b9b5062007c0e848c6200a77b565b9a508b8b60405160200162007c5a929190608092831b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000090811682529190921b16601082015260200190565b604051602081830303815290604052985062008003565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff89160162007d6e576040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf69062007cda908a9060040162008730565b6040805180830381865afa15801562007cf5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062007d1b91906200a657565b909450925062007d2c848c6200a77b565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b16602082015260308101859052909b5060500162007c5a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff89160162007eab576040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab09062007dd7908a9060040162008730565b606060405180830381865afa15801562007df3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062007e1991906200a5ed565b9096509450915062007e2c858d6200a77b565b9b5062007e3a848c6200a77b565b6040517fffff00000000000000000000000000000000000000000000000000000000000060f085901b1660208201527fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b8216602284015283901b166032820152909b5060420162007c5a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff89160162008003576040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca869062007f14908a9060040162008730565b606060405180830381865afa15801562007f30573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062007f5691906200a4d4565b919650909450905062007f6a848c6200a77b565b9a5062007f78858d6200a77b565b9b5062007f86818b6200a7a7565b6040517fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b821660208401527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1660308401528e901b166034820152909a5060440160405160208183030381529060405298505b50505050505b965062007a98915050565b80515f036200802e575f97509550620047bb945050505050565b60019a909950975050505050505050565b6040516200804d9062008473565b604051809103905ff08015801562008067573d5f803e3d5ffd5b50601f60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550565b5f60028201620080a3818486886200a464565b620080ae916200a7c7565b60f01c95945050505050565b5f60108201620080cd818486886200a464565b620080d8916200a80e565b60801c95945050505050565b5f838383818110620080fa57620080fa6200931b565b919091013560f81c95945050505050565b634e487b715f52806020526024601cfd5b5f600482016200812f818486886200a464565b6200813a916200a48d565b60e01c95945050505050565b5f6020820162008159818486886200a464565b62008164916200a51a565b95945050505050565b613f7b806200a85683390190565b611b1c806200e7d183390190565b61355f80620102ed83390190565b6124be806201384c83390190565b828054828255905f5260205f2090810192821562008213579160200282015b828111156200821357825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909116178255602090920191600190910190620081c4565b506200822192915062008481565b5090565b828054828255905f5260205f209060070160089004810192821562008213579160200282015f5b838211156200829257835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026200824c565b8015620082c45782816101000a81549063ffffffff021916905560040160208160030104928301926001030262008292565b50506200822192915062008481565b615fc28062015d0a83390190565b616193806201bccc83390190565b61196d8062021e5f83390190565b61588180620237cc83390190565b612b7c806202904d83390190565b615cb2806202bbc983390190565b613af9806203187b83390190565b611b50806203537483390190565b614aae8062036ec483390190565b612470806203b97283390190565b60405180604001604052805f63ffffffff168152602001620083bf6040518060c001604052805f67ffffffffffffffff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b905290565b60405180604001604052805f63ffffffff168152602001620083bf60405180604001604052805f63ffffffff1681526020015f6001600160a01b031681525090565b60405180604001604052805f63ffffffff168152602001620083bf6040518060c001604052805f6001600160a01b031681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b611e15806203dde283390190565b610aa9806203fbf783390190565b5b8082111562008221575f815560010162008482565b63ffffffff81168114620084a9575f80fd5b50565b6001600160a01b0381168114620084a9575f80fd5b5f8060408385031215620084d3575f80fd5b8235620084e08162008497565b91506020830135620084f281620084ac565b809150509250929050565b5f8083601f8401126200850e575f80fd5b50813567ffffffffffffffff81111562008526575f80fd5b602083019150836020828501011115620047bb575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156200859157620085916200853e565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715620085c357620085c36200853e565b604052919050565b5f67ffffffffffffffff821115620085e757620085e76200853e565b50601f01601f191660200190565b5f82601f83011262008605575f80fd5b81356200861c6200861682620085cb565b62008597565b81815284602083860101111562008631575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f806060858703121562008661575f80fd5b843567ffffffffffffffff8082111562008679575f80fd5b6200868788838901620084fd565b90965094506020870135915080821115620086a0575f80fd5b620086ae88838901620085f5565b93506040870135915080821115620086c4575f80fd5b50620086d387828801620085f5565b91505092959194509250565b5f5b83811015620086fb578181015183820152602001620086e1565b50505f910152565b5f81518084526200871c816020860160208601620086df565b601f01601f19169290920160200192915050565b602081525f62002599602083018462008703565b60ff81168114620084a9575f80fd5b80356002811062008762575f80fd5b919050565b5f806040838503121562008779575f80fd5b8235620087868162008744565b91506200775b6020840162008753565b5f815180845260208085019450602084015f5b83811015620087d05781516001600160a01b031687529582019590820190600101620087a9565b509495945050505050565b602081525f62002599602083018462008796565b5f805f6060848603121562008802575f80fd5b833567ffffffffffffffff81111562008819575f80fd5b6200882786828701620085f5565b93505060208401356200883a8162008744565b915060408401356200884c8162008744565b809150509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b84811015620088a657601f198684030189526200889383835162008703565b9884019892509083019060010162008874565b5090979650505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101562008944578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b03168452870151878401879052620089308785018262008857565b9588019593505090860190600101620088da565b509098975050505050505050565b5f805f805f805f60c0888a03121562008969575f80fd5b8735620089768162008497565b965060208801356200898881620084ac565b9550604088013567ffffffffffffffff80821115620089a5575f80fd5b620089b38b838c01620085f5565b965060608a0135955060808a01359150620089ce82620084ac565b90935060a08901359080821115620089e4575f80fd5b50620089f38a828b01620084fd565b989b979a50959850939692959293505050565b5f806020838503121562008a18575f80fd5b823567ffffffffffffffff81111562008a2f575f80fd5b62008a3d85828601620084fd565b90969095509350505050565b61ffff81168114620084a9575f80fd5b5f806040838503121562008a6b575f80fd5b823562008a788162008a49565b946020939093013593505050565b5f805f6040848603121562008a99575f80fd5b833567ffffffffffffffff8082111562008ab1575f80fd5b62008abf87838801620084fd565b9095509350602086013591508082111562008ad8575f80fd5b5062008ae786828701620085f5565b9150509250925092565b5f67ffffffffffffffff82111562008b0d5762008b0d6200853e565b5060051b60200190565b5f82601f83011262008b27575f80fd5b8135602062008b3a620086168362008af1565b8083825260208201915060208460051b87010193508684111562008b5c575f80fd5b602086015b8481101562008b8557803562008b7781620084ac565b835291830191830162008b61565b509695505050505050565b5f806040838503121562008ba2575f80fd5b823567ffffffffffffffff8082111562008bba575f80fd5b62008bc88683870162008b17565b935060209150818501358181111562008bdf575f80fd5b85019050601f8101861362008bf2575f80fd5b803562008c03620086168262008af1565b81815260059190911b8201830190838101908883111562008c22575f80fd5b928401925b8284101562008c4d57833562008c3d8162008497565b8252928401929084019062008c27565b80955050505050509250929050565b5f815180845260208085019450602084015f5b83811015620087d05781517fffffffff00000000000000000000000000000000000000000000000000000000168752958201959082019060010162008c6f565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101562008944577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151805187855262008d1b8886018262008703565b91890151858303868b015291905062008d35818362008c5c565b96890196945050509086019060010162008cd6565b5f805f6040848603121562008d5d575f80fd5b833567ffffffffffffffff81111562008d74575f80fd5b62008d8286828701620084fd565b909790965060209590950135949350505050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b60ff85168152606060208201525f62008ddd60608301858762008d96565b905082604083015295945050505050565b5f6020828403121562008dff575f80fd5b813567ffffffffffffffff81111562008e16575f80fd5b62008e248482850162008b17565b949350505050565b5f805f805f60a0868803121562008e41575f80fd5b853562008e4e8162008497565b94506020860135935060408601359250606086013562008e6e81620084ac565b9150608086013567ffffffffffffffff81111562008e8a575f80fd5b62008e9888828901620085f5565b9150509295509295909350565b602081525f62002599602083018462008857565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101562008944578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b0316845287015187840187905262008f368785018262008c5c565b958801959350509086019060010162008ee0565b5f805f805f6080868803121562008f5f575f80fd5b853567ffffffffffffffff8082111562008f77575f80fd5b62008f8589838a01620084fd565b9097509550602088013591508082111562008f9e575f80fd5b5062008fad88828901620085f5565b93505060408601359150606086013562008fc781620084ac565b809150509295509295909350565b5f6020828403121562008fe6575f80fd5b81356200259981620084ac565b5f806040838503121562009005575f80fd5b823562008a788162008497565b5f805f6060848603121562009025575f80fd5b8335620090328162008744565b9250620090426020850162008753565b9150604084013567ffffffffffffffff8111156200905e575f80fd5b62008ae78682870162008b17565b6fffffffffffffffffffffffffffffffff81168114620084a9575f80fd5b5f602082840312156200909b575f80fd5b813562002599816200906c565b5f805f8060408587031215620090bc575f80fd5b843567ffffffffffffffff80821115620090d4575f80fd5b620090e288838901620084fd565b90965094506020870135915080821115620090fb575f80fd5b506200910a87828801620084fd565b95989497509550505050565b855163ffffffff1681526020808701519082015260408087015167ffffffffffffffff16908201526001600160a01b038516606082015283608082015260e060a08201525f6200916a60e083018562008703565b82810360c08401526200917e818562008703565b98975050505050505050565b608081525f620091c760808301600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200920481600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b0380851660408401528084166060840152509392505050565b608081525f6200926460808301600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200920481600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b608081525f620092de60808301600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200920481600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b606081525f6200938560608301600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b8281036020840152620093c281600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b038316604083015292915050565b608081525f6200941760808301600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200920481600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b608081525f6200949160808301600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200920481600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b600181811c90821680620094e357607f821691505b6020821081036200951b577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101562008944578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052620095a98186018362008703565b96890196945050509086019060010162009548565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff8181168382160190811115620028d957620028d9620095be565b60ff8281168282160390811115620028d957620028d9620095be565b5f6001600160a01b03808a16835280891660208401525086604083015261ffff8616606083015260c060808301526200966160c08301858762008d96565b82810360a084015262009675818562008703565b9a9950505050505050505050565b80516200876281620084ac565b5f8060408385031215620096a2575f80fd5b8251620096af81620084ac565b60208401519092508015158114620084f2575f80fd5b805167ffffffffffffffff8116811462008762575f80fd5b8051620087628162008744565b5f805f60608486031215620096fd575f80fd5b6200970884620096c5565b925060208401516200971a8162008744565b60408501519092506200884c8162008744565b5f82601f8301126200973d575f80fd5b81516200974e6200861682620085cb565b81815284602083860101111562009763575f80fd5b62008e24826020830160208701620086df565b5f6020828403121562009787575f80fd5b815167ffffffffffffffff8111156200979e575f80fd5b62008e24848285016200972d565b5f82601f830112620097bc575f80fd5b81516020620097cf620086168362008af1565b8083825260208201915060208460051b870101935086841115620097f1575f80fd5b602086015b8481101562008b855780516200980c81620084ac565b8352918301918301620097f6565b5f602082840312156200982b575f80fd5b815167ffffffffffffffff8082111562009843575f80fd5b9083019060c0828603121562009857575f80fd5b620098616200856b565b6200986c83620096c5565b81526200987c60208401620096dd565b60208201526200988f60408401620096dd565b6040820152620098a260608401620096dd565b6060820152608083015182811115620098b9575f80fd5b620098c787828601620097ac565b60808301525060a083015182811115620098df575f80fd5b620098ed87828601620097ac565b60a08301525095945050505050565b818382375f9101908152919050565b606081525f6200991f606083018662008703565b905083602083015260ff83166040830152949350505050565b80820180821115620028d957620028d9620095be565b63ffffffff851681526001600160a01b0384166020820152608060408201525f6200997d608083018562008703565b905082606083015295945050505050565b5f602082840312156200999f575f80fd5b5051919050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101562008944577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160a063ffffffff82511685526001600160a01b0389830151168986015287820151818987015262009a338287018262008703565b91505060608083015181870152506080808301519250858203818701525062009a5d818362008703565b968901969450505090860190600101620099cd565b604081525f62009a86604083018562008703565b90508260208301529392505050565b5f6020828403121562009aa6575f80fd5b815167ffffffffffffffff8082111562009abe575f80fd5b9083019060c0828603121562009ad2575f80fd5b62009adc6200856b565b6200986c8362009683565b8281525f825162009b00816020850160208701620086df565b919091016020019392505050565b606081525f62009b22606083018662008703565b60208301949094525060400152919050565b602081525f62008e2460208301848662008d96565b5f6020828403121562009b5a575f80fd5b81516200259981620084ac565b5f6020828403121562009b78575f80fd5b8151620025998162008497565b5f8162009b965762009b96620095be565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b604081525f62009bd0604083018562008703565b828103602084015262008164818562008703565b606081525f62009bf8606083018662008703565b828103602084015262009c0c818662008703565b9050828103604084015262009c22818562008703565b9695505050505050565b608081525f62009c40608083018762008703565b828103602084015262009c54818762008703565b9150508360408301526001600160a01b038316606083015295945050505050565b63ffffffff881681525f6001600160a01b03808916602084015260c0604084015262009ca560c084018962008703565b876060850152818716608085015283810360a085015262009cc881868862008d96565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f6001600160a01b038089168352808816602084015260c0604084015262009d3060c084018862008796565b8187166060850152818616608085015283810360a085015262009675818662008796565b63ffffffff881681525f602060ff8916602084015260e0604084015262009d7f60e084018962008796565b6001600160a01b038881166060860152848203608086015287548083525f8981526020808220940191905b8181101562009dca57845484168352600194850194928601920162009daa565b505067ffffffffffffffff881660a087015285810360c087015262009df0818862008796565b9d9c50505050505050505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101562008944577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff168552880151888501889052805167ffffffffffffffff16888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c0808801529062009eca61010088018362008796565b920151868303840160e088015291905062009ee6818362008796565b978a019795505050918701915060010162009e28565b602080825282518282018190525f919060409081850190868401855b8281101562009f5f578151805163ffffffff9081168652908701518051909116878601528601516001600160a01b0316858501526060909301929085019060010162009f18565b5091979650505050505050565b5f6020828403121562009f7d575f80fd5b815162002599816200906c565b6fffffffffffffffffffffffffffffffff81811683821602808216919082811462009fb95762009fb9620095be565b505092915050565b602080825282518282018190525f919060409081850190868401855b8281101562009f5f578151805163ffffffff90811686529087015180516fffffffffffffffffffffffffffffffff16888701528088015167ffffffffffffffff16878701528601511660608501526080909301929085019060010162009fdd565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b8381101562008944577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff16855288015188850188905280516001600160a01b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200a10661010088018362008796565b920151868303840160e08801529190506200a122818362008796565b978a01979550505091870191506001016200a065565b602080825282518282018190525f919060409081850190868401855b8281101562009f5f578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c090930192908501906001016200a154565b602080825282518282018190525f919060409081850190868401855b8281101562009f5f578151805163ffffffff1685528681015167ffffffffffffffff16878601528581015161ffff16868601526060908101516fffffffffffffffffffffffffffffffff1690850152608090930192908501906001016200a1ef565b602080825282518282018190525f919060409081850190868401855b8281101562009f5f578151805163ffffffff1685528601518685015292840192908501906001016200a26d565b865163ffffffff1681526020808801519082015260408088015167ffffffffffffffff16908201526001600160a01b038616606082015284608082015260e060a08201525f6200a2ef60e08301858762008d96565b82810360c08401526200a303818562008703565b9998505050505050505050565b601f8211156200377f57805f5260205f20601f840160051c810160208510156200a3375750805b601f840160051c820191505b818110156200a358575f81556001016200a343565b5050505050565b67ffffffffffffffff8311156200a37a576200a37a6200853e565b6200a392836200a38b8354620094ce565b836200a310565b5f601f8411600181146200a3e5575f85156200a3ae5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556200a358565b5f83815260208120601f198716915b828110156200a41657868501358255602094850194600190920191016200a3f4565b50868210156200a452577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f80858511156200a473575f80fd5b838611156200a480575f80fd5b5050820193919092039150565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101562009fb95760049490940360031b84901b1690921692915050565b5f805f606084860312156200a4e7575f80fd5b83516200a4f4816200906c565b60208501519093506200a5078162008497565b60408501519092506200884c816200906c565b80356020831015620028d9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff000000000000000000000000000000000000000000000000813581811691600885101562009fb95760089490940360031b84901b1690921692915050565b5f82516200a5b1818460208701620086df565b9190910192915050565b5f83516200a5ce818460208801620086df565b8351908301906200a5e4818360208801620086df565b01949350505050565b5f805f606084860312156200a600575f80fd5b83516200a60d8162008a49565b60208501519093506200a507816200906c565b5f805f606084860312156200a633575f80fd5b83516200a6408162008744565b602085015160409095015190969495509392505050565b5f80604083850312156200a669575f80fd5b82516200a676816200906c565b6020939093015192949293505050565b5f80604083850312156200a698575f80fd5b82516200a6a5816200906c565b6020840151909250620084f2816200906c565b5f80604083850312156200a6ca575f80fd5b825167ffffffffffffffff808211156200a6e2575f80fd5b6200a6f0868387016200972d565b935060208501519150808211156200a706575f80fd5b506200a715858286016200972d565b9150509250929050565b5f805f606084860312156200a732575f80fd5b83516200a73f8162008744565b602085015190935067ffffffffffffffff8111156200a75c575f80fd5b6200a76a868287016200972d565b925050604084015190509250925092565b6fffffffffffffffffffffffffffffffff81811683821601908082111562003c0a5762003c0a620095be565b63ffffffff81811683821601908082111562003c0a5762003c0a620095be565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101562009fb95760029490940360031b84901b1690921692915050565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000813581811691601085101562009fb95760109490940360031b84901b169092169291505056fe60c060405234801562000010575f80fd5b5060405162003f7b38038062003f7b8339810160408190526200003391620002c2565b83838383838360128484818181818d6001600160a01b0381166200007057604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200007b8162000191565b506001600160a01b038083166080528116620000aa57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b158015620000ef575f80fd5b505af115801562000102573d5f803e3d5ffd5b50505050505050506200011a620001e060201b60201c565b60ff168360ff16101562000141576040516301e9714b60e41b815260040160405180910390fd5b6200014e60068462000360565b6200015b90600a6200047b565b60a052506008915062000171905083826200051c565b5060096200018082826200051c565b5050505050505050505050620005e8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000209575f80fd5b81516001600160401b0380821115620002265762000226620001e5565b604051601f8301601f19908116603f01168101908282118183101715620002515762000251620001e5565b81604052838152602092508660208588010111156200026e575f80fd5b5f91505b8382101562000291578582018301518183018401529082019062000272565b5f602085830101528094505050505092915050565b80516001600160a01b0381168114620002bd575f80fd5b919050565b5f805f8060808587031215620002d6575f80fd5b84516001600160401b0380821115620002ed575f80fd5b620002fb88838901620001f9565b9550602087015191508082111562000311575f80fd5b506200032087828801620001f9565b9350506200033160408601620002a6565b91506200034160608601620002a6565b905092959194509250565b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156200037c576200037c6200034c565b92915050565b600181815b80851115620003c257815f1904821115620003a657620003a66200034c565b80851615620003b457918102915b93841c939080029062000387565b509250929050565b5f82620003da575060016200037c565b81620003e857505f6200037c565b81600181146200040157600281146200040c576200042c565b60019150506200037c565b60ff8411156200042057620004206200034c565b50506001821b6200037c565b5060208310610133831016604e8410600b841016171562000451575081810a6200037c565b6200045d838362000382565b805f19048211156200047357620004736200034c565b029392505050565b5f6200048b60ff841683620003ca565b9392505050565b600181811c90821680620004a757607f821691505b602082108103620004c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200051757805f5260205f20601f840160051c81016020851015620004f35750805b601f840160051c820191505b8181101562000514575f8155600101620004ff565b50505b505050565b81516001600160401b03811115620005385762000538620001e5565b620005508162000549845462000492565b84620004cc565b602080601f83116001811462000586575f84156200056e5750858301515b5f19600386901b1c1916600185901b178555620005e0565b5f85815260208120601f198616915b82811015620005b65788860151825594840194600190910190840162000595565b5085821015620005d457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60805160a05161392b620006505f395f81816106f301528181611f9b0152818161200d015261229a01525f81816105a301528181610b5901528181611296015281816115bc01528181611a17015281816123ee0152818161251301526125fb015261392b5ff3fe6080604052600436106102d7575f3560e01c80637d25a05e1161017b578063bb0b6a53116100d1578063d045a0dc11610087578063f2fde38b11610062578063f2fde38b146108d0578063fc0c546a1461052c578063ff7bd03d146108ef575f80fd5b8063d045a0dc1461084d578063d424388514610860578063dd62ed3e1461087f575f80fd5b8063bd815db0116100b7578063bd815db0146107fa578063c7c7f5b31461080d578063ca5eb5e11461082e575f80fd5b8063bb0b6a53146107b0578063bc70b354146107db575f80fd5b8063963efcaa11610131578063a9059cbb1161010c578063a9059cbb14610746578063b731ea0a14610765578063b98bd07014610791575f80fd5b8063963efcaa146106e25780639dc29fac146107155780639f68b96414610734575f80fd5b8063857749b011610161578063857749b0146106925780638da5cb5b146106a557806395d89b41146106ce575f80fd5b80637d25a05e1461063957806382413eac14610673575f80fd5b8063313ce567116102305780635535d461116101e65780636fc1b31e116101c15780636fc1b31e146105c557806370a08231146105e4578063715018a614610625575f80fd5b80635535d4611461053e5780635a0dfe4d1461055d5780635e280f1114610592575f80fd5b80633b6f743b116102165780633b6f743b146104e157806340c10f191461050d57806352ae28791461052c575f80fd5b8063313ce567146104a15780633400288b146104c2575f80fd5b8063134d4f251161029057806318160ddd1161026b57806318160ddd146104505780631f5e13341461046e57806323b872dd14610482575f80fd5b8063134d4f25146103c8578063156a0d0f146103ef57806317442b701461042f575f80fd5b80630d35b415116102c05780630d35b41514610334578063111ecdad1461036257806313137d65146103b3575f80fd5b806306fdde03146102db578063095ea7b314610305575b5f80fd5b3480156102e6575f80fd5b506102ef61090e565b6040516102fc91906127f6565b60405180910390f35b348015610310575f80fd5b5061032461031f366004612829565b61099e565b60405190151581526020016102fc565b34801561033f575f80fd5b5061035361034e366004612869565b6109b7565b6040516102fc9392919061289b565b34801561036d575f80fd5b5060045461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102fc565b6103c66103c13660046129a5565b610b57565b005b3480156103d3575f80fd5b506103dc600281565b60405161ffff90911681526020016102fc565b3480156103fa575f80fd5b50604080517f02e49c2c00000000000000000000000000000000000000000000000000000000815260016020820152016102fc565b34801561043a575f80fd5b50604080516001815260026020820152016102fc565b34801561045b575f80fd5b506007545b6040519081526020016102fc565b348015610479575f80fd5b506103dc600181565b34801561048d575f80fd5b5061032461049c366004612a3e565b610c56565b3480156104ac575f80fd5b5060125b60405160ff90911681526020016102fc565b3480156104cd575f80fd5b506103c66104dc366004612a94565b610c7b565b3480156104ec575f80fd5b506105006104fb366004612abb565b610c91565b6040516102fc9190612b0a565b348015610518575f80fd5b506103c6610527366004612829565b610cf5565b348015610537575f80fd5b503061038e565b348015610549575f80fd5b506102ef610558366004612b32565b610cff565b348015610568575f80fd5b50610324610577366004612a94565b63ffffffff919091165f908152600160205260409020541490565b34801561059d575f80fd5b5061038e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d0575f80fd5b506103c66105df366004612b63565b610da1565b3480156105ef575f80fd5b506104606105fe366004612b63565b73ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604090205490565b348015610630575f80fd5b506103c6610e23565b348015610644575f80fd5b5061065a610653366004612a94565b5f92915050565b60405167ffffffffffffffff90911681526020016102fc565b34801561067e575f80fd5b5061032461068d366004612b7e565b610e36565b34801561069d575f80fd5b5060066104b0565b3480156106b0575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661038e565b3480156106d9575f80fd5b506102ef610e58565b3480156106ed575f80fd5b506104607f000000000000000000000000000000000000000000000000000000000000000081565b348015610720575f80fd5b506103c661072f366004612829565b610e67565b34801561073f575f80fd5b505f610324565b348015610751575f80fd5b50610324610760366004612829565b610e71565b348015610770575f80fd5b5060025461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561079c575f80fd5b506103c66107ab366004612c22565b610e7e565b3480156107bb575f80fd5b506104606107ca366004612c61565b60016020525f908152604090205481565b3480156107e6575f80fd5b506102ef6107f5366004612c7a565b610e98565b6103c6610808366004612c22565b611052565b61082061081b366004612cd7565b611216565b6040516102fc929190612d5e565b348015610839575f80fd5b506103c6610848366004612b63565b611249565b6103c661085b3660046129a5565b6112f0565b34801561086b575f80fd5b506103c661087a366004612b63565b611338565b34801561088a575f80fd5b50610460610899366004612db0565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260066020908152604080832093909416825291909152205490565b3480156108db575f80fd5b506103c66108ea366004612b63565b6113b3565b3480156108fa575f80fd5b50610324610909366004612ddc565b611416565b60606008805461091d90612df6565b80601f016020809104026020016040519081016040528092919081815260200182805461094990612df6565b80156109945780601f1061096b57610100808354040283529160200191610994565b820191905f5260205f20905b81548152906001019060200180831161097757829003601f168201915b5050505050905090565b5f336109ab81858561144a565b60019150505b92915050565b604080518082019091525f808252602082015260606109e760405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a569190612e41565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac29190612e5c565b604080518082018252848152602080820184905282515f80825291810190935290975091925090610b15565b604080518082019091525f815260606020820152815260200190600190039081610aee5790505b5093505f80610b39604089013560608a0135610b3460208c018c612c61565b61145c565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610bcd576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b60208701803590610be790610be2908a612c61565b6114b0565b14610c3e57610bf96020880188612c61565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610bc4565b610c4d87878787878787611504565b50505050505050565b5f33610c63858285611695565b610c6e858585611762565b60019150505b9392505050565b610c8361180b565b610c8d828261185d565b5050565b604080518082019091525f80825260208201525f610cbf60408501356060860135610b346020880188612c61565b9150505f80610cce86846118b1565b9092509050610ceb610ce36020880188612c61565b838388611a02565b9695505050505050565b610c8d8282611aed565b600360209081525f928352604080842090915290825290208054610d2290612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4e90612df6565b8015610d995780601f10610d7057610100808354040283529160200191610d99565b820191905f5260205f20905b815481529060010190602001808311610d7c57829003601f168201915b505050505081565b610da961180b565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610e2b61180b565b610e345f611b47565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b60606009805461091d90612df6565b610c8d8282611bbb565b5f336109ab818585611762565b610e8661180b565b610c8d610e938284612f80565b611c15565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ecb90612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef790612df6565b8015610f425780601f10610f1957610100808354040283529160200191610f42565b820191905f5260205f20905b815481529060010190602001808311610f2557829003601f168201915b5050505050905080515f03610f905783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610e509350505050565b5f839003610f9f579050610e50565b6002831061101c57610fe584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611d1692505050565b80610ff38460028188613089565b604051602001611005939291906130b0565b604051602081830303815290604052915050610e50565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc492919061311d565b5f5b81811015611155573683838381811061106f5761106f613130565b9050602002810190611081919061315d565b90506110b36110936020830183612c61565b602083013563ffffffff919091165f908152600160205260409020541490565b6110bd575061114d565b3063d045a0dc60c08301358360a08101356110dc610100830183613199565b6110ed610100890160e08a01612b63565b6110fb6101208a018a613199565b6040518963ffffffff1660e01b815260040161111d979695949392919061320f565b5f604051808303818588803b158015611134575f80fd5b505af1158015611146573d5f803e3d5ffd5b5050505050505b600101611054565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa15801561119e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111e391908101906132a2565b6040517f8351eea7000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b61121e612747565b604080518082019091525f808252602082015261123c858585611d5b565b915091505b935093915050565b61125161180b565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b1580156112d7575f80fd5b505af11580156112e9573d5f803e3d5ffd5b5050505050565b333014611329576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c4d87878787878787610c3e565b61134061180b565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610e18565b6113bb61180b565b73ffffffffffffffffffffffffffffffffffffffff811661140a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b61141381611b47565b50565b5f60208201803590600190839061142d9086612c61565b63ffffffff16815260208101919091526040015f20541492915050565b6114578383836001611e53565b505050565b5f8061146785611f98565b915081905083811015611241576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610bc4565b63ffffffff81165f90815260016020526040812054806109b1576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610bc4565b5f6115156115128787611fce565b90565b90505f6115408261152e6115298a8a611fe5565b612007565b61153b60208d018d612c61565b61203c565b90506028861115611626575f61157c61155f60608c0160408d0161330b565b61156c60208d018d612c61565b846115778c8c612070565b6120ba565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906115f79086908d905f908790600401613326565b5f604051808303815f87803b15801561160e575f80fd5b505af1158015611620573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61166c60208d018d612c61565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600660209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461175c578181101561174e576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610bc4565b61175c84848484035f611e53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166117b1576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8216611800576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b6114578383836120ec565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610e34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610bc4565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61190c85602001356118c686612293565b6118d360a0890189613199565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061230692505050565b90935090505f8161191e576001611921565b60025b90506119416119336020880188612c61565b826107f560808a018a613199565b60045490935073ffffffffffffffffffffffffffffffffffffffff1680156119f8576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906119b79088908890600401613364565b602060405180830381865afa1580156119d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f69190613388565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff168152602001611a71896114b0565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611aa69291906133a3565b6040805180830381865afa158015611ac0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae49190613474565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611b3c576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d5f83836120ec565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611c0a576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d825f836120ec565b5f5b8151811015611ce657611c46828281518110611c3557611c35613130565b602002602001015160400151611d16565b818181518110611c5857611c58613130565b60200260200101516040015160035f848481518110611c7957611c79613130565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611cb057611cb0613130565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611cdd91906134d2565b50600101611c17565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610e1891906135ee565b600281015161ffff8116600314610c8d57816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b611d63612747565b604080518082019091525f80825260208201525f80611d9833604089013560608a0135611d9360208c018c612c61565b612398565b915091505f80611da889846118b1565b9092509050611dd4611dbd60208b018b612c61565b8383611dce368d90038d018d613695565b8b6123bd565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611e22908d018d612c61565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff8416611ea2576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8316611ef1576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600660209081526040808320938716835292905220829055801561175c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611f8a91815260200190565b60405180910390a350505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000611fc481846136f2565b6109b1919061372a565b5f611fdc6020828486613089565b610c7491613741565b5f611ff4602860208486613089565b611ffd9161377d565b60c01c9392505050565b5f6109b17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff841661372a565b5f73ffffffffffffffffffffffffffffffffffffffff841661205e5761dead93505b6120688484611aed565b509092915050565b606061207f8260288186613089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b6060848484846040516020016120d394939291906137c5565b6040516020818303038152906040529050949350505050565b73ffffffffffffffffffffffffffffffffffffffff8316612123578060075f8282546121189190613842565b909155506121d39050565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260056020526040902054818110156121a8576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610bc4565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526005602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166121fc57600780548290039055612227565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526005602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161228691815260200190565b60405180910390a3505050565b5f806122bf7f0000000000000000000000000000000000000000000000000000000000000000846136f2565b905067ffffffffffffffff8111156109b1576040517fe2ce941300000000000000000000000000000000000000000000000000000000815260048101829052602401610bc4565b805160609015158061236757848460405160200161235392919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b60405160208183030381529060405261238e565b8484338560405160200161237e9493929190613855565b6040516020818303038152906040525b9150935093915050565b5f806123a585858561145c565b90925090506123b48683611bbb565b94509492505050565b6123c5612747565b5f6123d2845f01516124d0565b6020850151909150156123ec576123ec8460200151612510565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff1681526020016124498c6114b0565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b81526004016124849291906133a3565b60806040518083038185885af11580156124a0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906124c591906138ad565b979650505050505050565b5f81341461250c576040517f9f704120000000000000000000000000000000000000000000000000000000008152346004820152602401610bc4565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259e9190612e41565b905073ffffffffffffffffffffffffffffffffffffffff81166125ed576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805133602482018190527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff81811660448501526064808501889052855180860390910181526084909401909452602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001781528451610c8d96881695899361175c9388935f9283929091839182885af1806126c7576040513d5f823e3d81fd5b50505f513d915081156126de5780600114156126f8565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561175c576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610bc4565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161278660405180604001604052805f81526020015f81525090565b905290565b5f5b838110156127a557818101518382015260200161278d565b50505f910152565b5f81518084526127c481602086016020860161278b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610c7460208301846127ad565b73ffffffffffffffffffffffffffffffffffffffff81168114611413575f80fd5b5f806040838503121561283a575f80fd5b823561284581612808565b946020939093013593505050565b5f60e08284031215612863575f80fd5b50919050565b5f60208284031215612879575f80fd5b813567ffffffffffffffff81111561288f575f80fd5b610e5084828501612853565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612932578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261291f878901826127ad565b97505093820193908201906001016128d5565b50508751606088015250505060208501516080850152509050610e50565b5f60608284031215612863575f80fd5b5f8083601f840112612970575f80fd5b50813567ffffffffffffffff811115612987575f80fd5b60208301915083602082850101111561299e575f80fd5b9250929050565b5f805f805f805f60e0888a0312156129bb575f80fd5b6129c58989612950565b965060608801359550608088013567ffffffffffffffff808211156129e8575f80fd5b6129f48b838c01612960565b909750955060a08a01359150612a0982612808565b90935060c08901359080821115612a1e575f80fd5b50612a2b8a828b01612960565b989b979a50959850939692959293505050565b5f805f60608486031215612a50575f80fd5b8335612a5b81612808565b92506020840135612a6b81612808565b929592945050506040919091013590565b803563ffffffff81168114612a8f575f80fd5b919050565b5f8060408385031215612aa5575f80fd5b61284583612a7c565b8015158114611413575f80fd5b5f8060408385031215612acc575f80fd5b823567ffffffffffffffff811115612ae2575f80fd5b612aee85828601612853565b9250506020830135612aff81612aae565b809150509250929050565b8151815260208083015190820152604081016109b1565b803561ffff81168114612a8f575f80fd5b5f8060408385031215612b43575f80fd5b612b4c83612a7c565b9150612b5a60208401612b21565b90509250929050565b5f60208284031215612b73575f80fd5b8135610c7481612808565b5f805f8060a08587031215612b91575f80fd5b612b9b8686612950565b9350606085013567ffffffffffffffff811115612bb6575f80fd5b612bc287828801612960565b9094509250506080850135612bd681612808565b939692955090935050565b5f8083601f840112612bf1575f80fd5b50813567ffffffffffffffff811115612c08575f80fd5b6020830191508360208260051b850101111561299e575f80fd5b5f8060208385031215612c33575f80fd5b823567ffffffffffffffff811115612c49575f80fd5b612c5585828601612be1565b90969095509350505050565b5f60208284031215612c71575f80fd5b610c7482612a7c565b5f805f8060608587031215612c8d575f80fd5b612c9685612a7c565b9350612ca460208601612b21565b9250604085013567ffffffffffffffff811115612cbf575f80fd5b612ccb87828801612960565b95989497509550505050565b5f805f8385036080811215612cea575f80fd5b843567ffffffffffffffff811115612d00575f80fd5b612d0c87828801612853565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612d3e575f80fd5b506020840191506060840135612d5381612808565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff60208501511660208301526040840151612d99604084018280518252602090810151910152565b5082516080830152602083015160a0830152610c74565b5f8060408385031215612dc1575f80fd5b8235612dcc81612808565b91506020830135612aff81612808565b5f60608284031215612dec575f80fd5b610c748383612950565b600181811c90821680612e0a57607f821691505b602082108103612863577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208284031215612e51575f80fd5b8151610c7481612808565b5f60208284031215612e6c575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715612ec357612ec3612e73565b60405290565b6040805190810167ffffffffffffffff81118282101715612ec357612ec3612e73565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f3357612f33612e73565b604052919050565b5f67ffffffffffffffff821115612f5457612f54612e73565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612f9a57612f9a612e73565b8360051b6020612fab818301612eec565b868152918501918181019036841115612fc2575f80fd5b865b8481101561307d57803586811115612fda575f80fd5b88016060368290031215612fec575f80fd5b612ff4612ea0565b612ffd82612a7c565b815261300a868301612b21565b8682015260408083013589811115613020575f80fd5b929092019136601f840112613033575f80fd5b823561304661304182612f3b565b612eec565b8181523689838701011115613059575f80fd5b818986018a8301375f91810189019190915290820152845250918301918301612fc4565b50979650505050505050565b5f8085851115613097575f80fd5b838611156130a3575f80fd5b5050820193919092039150565b5f84516130c181846020890161278b565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610e506020830184866130d6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261318f575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126131cc575f80fd5b83018035915067ffffffffffffffff8211156131e6575f80fd5b60200191503681900382131561299e575f80fd5b67ffffffffffffffff81168114611413575f80fd5b63ffffffff61321d89612a7c565b168152602088013560208201525f6040890135613239816131fa565b67ffffffffffffffff811660408401525087606083015260e0608083015261326560e0830187896130d6565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c08401526132948185876130d6565b9a9950505050505050505050565b5f602082840312156132b2575f80fd5b815167ffffffffffffffff8111156132c8575f80fd5b8201601f810184136132d8575f80fd5b80516132e661304182612f3b565b8181528560208385010111156132fa575f80fd5b611ae482602083016020860161278b565b5f6020828403121561331b575f80fd5b8135610c74816131fa565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f610ceb60808301846127ad565b604081525f61337660408301856127ad565b8281036020840152611ae481856127ad565b5f60208284031215613398575f80fd5b8151610c7481612aae565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a060808401526133d860e08401826127ad565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a085015261341382826127ad565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215613456575f80fd5b61345e612ec9565b9050815181526020820151602082015292915050565b5f60408284031215613484575f80fd5b610c748383613446565b601f82111561145757805f5260205f20601f840160051c810160208510156134b35750805b601f840160051c820191505b818110156112e9575f81556001016134bf565b815167ffffffffffffffff8111156134ec576134ec612e73565b613500816134fa8454612df6565b8461348e565b602080601f831160018114613552575f841561351c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556135e6565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561359e5788860151825594840194600190910190840161357f565b50858210156135da57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015613687578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052613673818601836127ad565b968901969450505090860190600101613615565b509098975050505050505050565b5f604082840312156136a5575f80fd5b6136ad612ec9565b82358152602083013560208201528091505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f82613725577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109b1576109b16136c5565b803560208310156109b1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156137bd5780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161383281602c85016020870161278b565b91909101602c0195945050505050565b808201808211156109b1576109b16136c5565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f825161389d81604885016020870161278b565b9190910160480195945050505050565b5f608082840312156138bd575f80fd5b6138c5612ea0565b8251815260208301516138d7816131fa565b60208201526138e98460408501613446565b6040820152939250505056fea2646970667358221220a7e78c28d4976391911497373c3bfff426de060fa72d1fbc537e431a0fece95964736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b1c38038062001b1c833981016040819052620000339162000240565b808383600362000044838262000351565b50600462000053828262000351565b5050505f8062000069836200009b60201b60201c565b91509150816200007b5760126200007d565b805b60ff1660a05250506001600160a01b03166080525062000452915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691620000e3916200041d565b5f60405180830381855afa9150503d805f81146200011d576040519150601f19603f3d011682016040523d82523d5f602084013e62000122565b606091505b50915091508180156200013757506020815110155b156200016e575f818060200190518101906200015491906200043a565b905060ff81116200016c576001969095509350505050565b505b505f9485945092505050565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015620001aa57818101518382015260200162000190565b50505f910152565b5f82601f830112620001c2575f80fd5b81516001600160401b0380821115620001df57620001df6200017a565b604051601f8301601f19908116603f011681019082821181831017156200020a576200020a6200017a565b8160405283815286602085880101111562000223575f80fd5b620002368460208301602089016200018e565b9695505050505050565b5f805f6060848603121562000253575f80fd5b83516001600160401b03808211156200026a575f80fd5b6200027887838801620001b2565b945060208601519150808211156200028e575f80fd5b506200029d86828701620001b2565b604086015190935090506001600160a01b0381168114620002bc575f80fd5b809150509250925092565b600181811c90821680620002dc57607f821691505b602082108103620002fb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200034c57805f5260205f20601f840160051c81016020851015620003285750805b601f840160051c820191505b8181101562000349575f815560010162000334565b50505b505050565b81516001600160401b038111156200036d576200036d6200017a565b62000385816200037e8454620002c7565b8462000301565b602080601f831160018114620003bb575f8415620003a35750858301515b5f19600386901b1c1916600185901b17855562000415565b5f85815260208120601f198616915b82811015620003eb57888601518255948401946001909101908401620003ca565b50858210156200040957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251620004308184602087016200018e565b9190910192915050565b5f602082840312156200044b575f80fd5b5051919050565b60805160a051611693620004895f395f6105d301525f818161027c0152818161043101528181610a880152610bd601526116935ff3fe608060405234801561000f575f80fd5b50600436106101b0575f3560e01c806370a08231116100f3578063ba08765211610093578063ce96cb771161006e578063ce96cb77146103c3578063d905777e146103d6578063dd62ed3e146103e9578063ef8b30f7146103b0575f80fd5b8063ba0876521461039d578063c63d75b6146102a6578063c6e6f592146103b0575f80fd5b80639dc29fac116100ce5780639dc29fac14610351578063a9059cbb14610364578063b3d7f6b914610377578063b460af941461038a575f80fd5b806370a082311461030157806394bf804d1461033657806395d89b4114610349575f80fd5b806323b872dd1161015e578063402d267d11610139578063402d267d146102a657806340c10f19146102d95780634cdad506146101e45780636e553f65146102ee575f80fd5b806323b872dd14610235578063313ce5671461024857806338d52e0f14610262575f80fd5b8063095ea7b31161018e578063095ea7b3146101f75780630a28a4771461021a57806318160ddd1461022d575f80fd5b806301e1d114146101b457806306fdde03146101cf57806307a2d13a146101e4575b5f80fd5b6101bc61042e565b6040519081526020015b60405180910390f35b6101d76104e3565b6040516101c69190611222565b6101bc6101f236600461128c565b610573565b61020a6102053660046112cb565b610584565b60405190151581526020016101c6565b6101bc61022836600461128c565b61059b565b6002546101bc565b61020a6102433660046112f3565b6105a7565b6102506105cc565b60405160ff90911681526020016101c6565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c6565b6101bc6102b436600461132c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b6102ec6102e73660046112cb565b6105f7565b005b6101bc6102fc366004611345565b610605565b6101bc61030f36600461132c565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b6101bc610344366004611345565b610655565b6101d761068f565b6102ec61035f3660046112cb565b61069e565b61020a6103723660046112cb565b6106a8565b6101bc61038536600461128c565b6106b5565b6101bc61039836600461136f565b6106c1565b6101bc6103ab36600461136f565b610750565b6101bc6103be36600461128c565b6107d6565b6101bc6103d136600461132c565b6107e1565b6101bc6103e436600461132c565b610810565b6101bc6103f73660046113a8565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b5f7f00000000000000000000000000000000000000000000000000000000000000006040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa1580156104ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104de91906113d0565b905090565b6060600380546104f2906113e7565b80601f016020809104026020016040519081016040528092919081815260200182805461051e906113e7565b80156105695780601f1061054057610100808354040283529160200191610569565b820191905f5260205f20905b81548152906001019060200180831161054c57829003601f168201915b5050505050905090565b5f61057e825f61083a565b92915050565b5f33610591818585610872565b5060019392505050565b5f61057e826001610884565b5f336105b48582856108b3565b6105bf858585610980565b60019150505b9392505050565b5f6104de817f0000000000000000000000000000000000000000000000000000000000000000611465565b6106018282610a29565b5050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610635565b60405180910390fd5b5f61063f856107d6565b905061064d33858784610a83565b949350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f610681856106b5565b905061064d33858388610a83565b6060600480546104f2906113e7565b6106018282610b2f565b5f33610591818585610980565b5f61057e82600161083a565b5f806106cc836107e1565b90508085111561072e576040517ffe9cceec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107388661059b565b90506107473386868985610b89565b95945050505050565b5f8061075b83610810565b9050808511156107bd576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107c786610573565b9050610747338686848a610b89565b5f61057e825f610884565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e905f61083a565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e565b5f6105c561084661042e565b61085190600161147e565b61085c5f600a6115af565b600254610869919061147e565b85919085610c8a565b61087f8383836001610ccc565b505050565b5f6105c561089382600a6115af565b6002546108a0919061147e565b6108a861042e565b61086990600161147e565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461097a578181101561096c576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018290526044810183905260640161062c565b61097a84848484035f610ccc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109cf576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8216610a1e576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b61087f838383610e03565b73ffffffffffffffffffffffffffffffffffffffff8216610a78576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b6106015f8383610e03565b610aaf7f0000000000000000000000000000000000000000000000000000000000000000853085610faa565b610ab98382610a29565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051610b21929190918252602082015260400190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b7e576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b610601825f83610e03565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610bc757610bc78386836108b3565b610bd18382610b2f565b610bfc7f00000000000000000000000000000000000000000000000000000000000000008584611033565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051610c7b929190918252602082015260400190565b60405180910390a45050505050565b5f610cb7610c9783611071565b8015610cb257505f8480610cad57610cad6115bd565b868809115b151590565b610cc286868661109d565b610747919061147e565b73ffffffffffffffffffffffffffffffffffffffff8416610d1b576040517fe602df050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8316610d6a576040517f94280d620000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600160209081526040808320938716835292905220829055801561097a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b2191815260200190565b73ffffffffffffffffffffffffffffffffffffffff8316610e3a578060025f828254610e2f919061147e565b90915550610eea9050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020819052604090205481811015610ebf576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602481018290526044810183905260640161062c565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610f1357600280548290039055610f3e565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f9d91815260200190565b60405180910390a3505050565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283811660448301526064820183905261097a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611172565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261087f91859182169063a9059cbb90606401610fec565b5f6002826003811115611086576110866115ea565b6110909190611617565b60ff166001149050919050565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f036110f0578382816110e6576110e66115bd565b04925050506105c5565b808411611107576111076003851502601118611211565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f8060205f8451602086015f885af180611191576040513d5f823e3d81fd5b50505f513d915081156111a85780600114156111c2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561097a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161062c565b634e487b715f52806020526024601cfd5b5f602080835283518060208501525f5b8181101561124e57858101830151858201604001528201611232565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f6020828403121561129c575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112c6575f80fd5b919050565b5f80604083850312156112dc575f80fd5b6112e5836112a3565b946020939093013593505050565b5f805f60608486031215611305575f80fd5b61130e846112a3565b925061131c602085016112a3565b9150604084013590509250925092565b5f6020828403121561133c575f80fd5b6105c5826112a3565b5f8060408385031215611356575f80fd5b82359150611366602084016112a3565b90509250929050565b5f805f60608486031215611381575f80fd5b83359250611391602085016112a3565b915061139f604085016112a3565b90509250925092565b5f80604083850312156113b9575f80fd5b6113c2836112a3565b9150611366602084016112a3565b5f602082840312156113e0575f80fd5b5051919050565b600181811c908216806113fb57607f821691505b602082108103611432577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff818116838216019081111561057e5761057e611438565b8082018082111561057e5761057e611438565b600181815b808511156114ea57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156114d0576114d0611438565b808516156114dd57918102915b93841c9390800290611496565b509250929050565b5f826115005750600161057e565b8161150c57505f61057e565b8160018114611522576002811461152c57611548565b600191505061057e565b60ff84111561153d5761153d611438565b50506001821b61057e565b5060208310610133831016604e8410600b841016171561156b575081810a61057e565b6115758383611491565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156115a7576115a7611438565b029392505050565b5f6105c560ff8416836114f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff83168061164e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff8416069150509291505056fea2646970667358221220e4c7204716e83cc6436d4c089c98eaebf1301b2ac725b313f068e28e347d110264736f6c6343000816003360e060405234801562000010575f80fd5b506040516200355f3803806200355f833981016040819052620000339162000240565b828282826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000099919062000287565b8282818181813380620000c557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000d081620001d0565b506001600160a01b038083166080528116620000ff57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b15801562000144575f80fd5b505af115801562000157573d5f803e3d5ffd5b50505050505050506200016f6200021f60201b60201c565b60ff168360ff16101562000196576040516301e9714b60e41b815260040160405180910390fd5b620001a3600684620002c4565b620001b090600a620003df565b60a0525050506001600160a01b0390921660c05250620003ef9350505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b80516001600160a01b03811681146200023b575f80fd5b919050565b5f805f6060848603121562000253575f80fd5b6200025e8462000224565b92506200026e6020850162000224565b91506200027e6040850162000224565b90509250925092565b5f6020828403121562000298575f80fd5b815160ff81168114620002a9575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b60ff8281168282160390811115620002e057620002e0620002b0565b92915050565b600181815b808511156200032657815f19048211156200030a576200030a620002b0565b808516156200031857918102915b93841c9390800290620002eb565b509250929050565b5f826200033e57506001620002e0565b816200034c57505f620002e0565b8160018114620003655760028114620003705762000390565b6001915050620002e0565b60ff841115620003845762000384620002b0565b50506001821b620002e0565b5060208310610133831016604e8410600b8410161715620003b5575081810a620002e0565b620003c18383620002e6565b805f1904821115620003d757620003d7620002b0565b029392505050565b5f620002a960ff8416836200032e565b60805160a05160c0516130f16200046e5f395f818161069e015281816119b40152611b9001525f8181610514015281816118f10152818161196a0152611a6601525f81816104110152818161088301528181610f6d015281816112810152818161156601528181611bf201528181611de90152611ee001526130f15ff3fe6080604052600436106101f5575f3560e01c806382413eac11610117578063bc70b354116100ac578063d045a0dc1161007c578063f2fde38b11610062578063f2fde38b14610671578063fc0c546a14610690578063ff7bd03d146106c2575f80fd5b8063d045a0dc1461063f578063d424388514610652575f80fd5b8063bc70b354146105cd578063bd815db0146105ec578063c7c7f5b3146105ff578063ca5eb5e114610620575f80fd5b80639f68b964116100e75780639f68b96414610544578063b731ea0a14610557578063b98bd07014610583578063bb0b6a53146105a2575f80fd5b806382413eac146104a0578063857749b0146104bf5780638da5cb5b146104da578063963efcaa14610503575f80fd5b80633b6f743b1161018d5780635e280f111161015d5780635e280f11146104005780636fc1b31e14610433578063715018a6146104525780637d25a05e14610466575f80fd5b80633b6f743b1461035157806352ae28791461037d5780635535d4611461038f5780635a0dfe4d146103bb575f80fd5b8063156a0d0f116101c8578063156a0d0f146102bd57806317442b70146102fd5780631f5e13341461031e5780633400288b14610332575f80fd5b80630d35b415146101f9578063111ecdad1461023057806313137d6514610281578063134d4f2514610296575b5f80fd5b348015610204575f80fd5b50610218610213366004611ffe565b6106e1565b6040516102279392919061209b565b60405180910390f35b34801561023b575f80fd5b5060045461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610227565b61029461028f3660046121c6565b610881565b005b3480156102a1575f80fd5b506102aa600281565b60405161ffff9091168152602001610227565b3480156102c8575f80fd5b50604080517f02e49c2c0000000000000000000000000000000000000000000000000000000081526001602082015201610227565b348015610308575f80fd5b5060408051600181526002602082015201610227565b348015610329575f80fd5b506102aa600181565b34801561033d575f80fd5b5061029461034c366004612277565b610980565b34801561035c575f80fd5b5061037061036b3660046122ac565b610996565b60405161022791906122fb565b348015610388575f80fd5b503061025c565b34801561039a575f80fd5b506103ae6103a9366004612323565b6109fc565b6040516102279190612354565b3480156103c6575f80fd5b506103f06103d5366004612277565b63ffffffff919091165f908152600160205260409020541490565b6040519015158152602001610227565b34801561040b575f80fd5b5061025c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043e575f80fd5b5061029461044d366004612366565b610a9e565b34801561045d575f80fd5b50610294610b20565b348015610471575f80fd5b50610487610480366004612277565b5f92915050565b60405167ffffffffffffffff9091168152602001610227565b3480156104ab575f80fd5b506103f06104ba366004612381565b610b33565b3480156104ca575f80fd5b5060405160068152602001610227565b3480156104e5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661025c565b34801561050e575f80fd5b506105367f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610227565b34801561054f575f80fd5b5060016103f0565b348015610562575f80fd5b5060025461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561058e575f80fd5b5061029461059d366004612425565b610b55565b3480156105ad575f80fd5b506105366105bc366004612464565b60016020525f908152604090205481565b3480156105d8575f80fd5b506103ae6105e736600461247d565b610b6f565b6102946105fa366004612425565b610d29565b61061261060d3660046124da565b610eed565b604051610227929190612561565b34801561062b575f80fd5b5061029461063a366004612366565b610f20565b61029461064d3660046121c6565b610fc7565b34801561065d575f80fd5b5061029461066c366004612366565b61100f565b34801561067c575f80fd5b5061029461068b366004612366565b61108a565b34801561069b575f80fd5b507f000000000000000000000000000000000000000000000000000000000000000061025c565b3480156106cd575f80fd5b506103f06106dc3660046125b3565b6110ed565b604080518082019091525f8082526020820152606061071160405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078091906125cd565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ec91906125e8565b604080518082018252848152602080820184905282515f8082529181019093529097509192509061083f565b604080518082019091525f8152606060208201528152602001906001900390816108185790505b5093505f80610863604089013560608a013561085e60208c018c612464565b611121565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146108f7576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b602087018035906109119061090c908a612464565b611175565b14610968576109236020880188612464565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602088013560248201526044016108ee565b610977878787878787876111c9565b50505050505050565b61098861135a565b61099282826113ac565b5050565b604080518082019091525f80825260208201525f6109c46040850135606086013561085e6020880188612464565b9150505f806109d38684611400565b90925090506109f06109e86020880188612464565b838388611551565b93505050505b92915050565b600360209081525f928352604080842090915290825290208054610a1f9061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4b9061262c565b8015610a965780601f10610a6d57610100808354040283529160200191610a96565b820191905f5260205f20905b815481529060010190602001808311610a7957829003601f168201915b505050505081565b610aa661135a565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610b2861135a565b610b315f61163c565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b610b5d61135a565b610992610b6a8284612757565b6116b0565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ba29061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bce9061262c565b8015610c195780601f10610bf057610100808354040283529160200191610c19565b820191905f5260205f20905b815481529060010190602001808311610bfc57829003601f168201915b5050505050905080515f03610c675783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610b4d9350505050565b5f839003610c76579050610b4d565b60028310610cf357610cbc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506117b192505050565b80610cca8460028188612860565b604051602001610cdc93929190612887565b604051602081830303815290604052915050610b4d565b83836040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9291906128f4565b5f5b81811015610e2c5736838383818110610d4657610d46612907565b9050602002810190610d589190612934565b9050610d8a610d6a6020830183612464565b602083013563ffffffff919091165f908152600160205260409020541490565b610d945750610e24565b3063d045a0dc60c08301358360a0810135610db3610100830183612970565b610dc4610100890160e08a01612366565b610dd26101208a018a612970565b6040518963ffffffff1660e01b8152600401610df497969594939291906129e6565b5f604051808303818588803b158015610e0b575f80fd5b505af1158015610e1d573d5f803e3d5ffd5b5050505050505b600101610d2b565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015610e75573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610eba9190810190612a79565b6040517f8351eea70000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b610ef5611fa4565b604080518082019091525f8082526020820152610f138585856117f6565b915091505b935093915050565b610f2861135a565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b158015610fae575f80fd5b505af1158015610fc0573d5f803e3d5ffd5b5050505050565b333014611000576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097787878787878787610968565b61101761135a565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610b15565b61109261135a565b73ffffffffffffffffffffffffffffffffffffffff81166110e1576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016108ee565b6110ea8161163c565b50565b5f6020820180359060019083906111049086612464565b63ffffffff16815260208101919091526040015f20541492915050565b5f8061112c856118ee565b915081905083811015610f18576040517f71c4efed00000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016108ee565b63ffffffff81165f90815260016020526040812054806109f6576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff841660048201526024016108ee565b5f6111da6111d78787611924565b90565b90505f611205826111f36111ee8a8a611942565b611964565b61120060208d018d612464565b611999565b905060288611156112eb575f61124161122460608c0160408d01612ae2565b61123160208d018d612464565b8461123c8c8c6119e3565b611a2d565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112bc9086908d905f908790600401612afd565b5f604051808303815f87803b1580156112d3575f80fd5b505af11580156112e5573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61133160208d018d612464565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b31576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016108ee565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61145b856020013561141586611a5f565b61142260a0890189612970565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611ad292505050565b90935090505f8161146d576001611470565b60025b90506114906114826020880188612464565b826105e760808a018a612970565b60045490935073ffffffffffffffffffffffffffffffffffffffff168015611547576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906115069088908890600401612b45565b602060405180830381865afa158015611521573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115459190612b69565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff1681526020016115c089611175565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016115f5929190612b84565b6040805180830381865afa15801561160f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116339190612c55565b95945050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b8151811015611781576116e18282815181106116d0576116d0612907565b6020026020010151604001516117b1565b8181815181106116f3576116f3612907565b60200260200101516040015160035f84848151811061171457611714612907565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f84848151811061174b5761174b612907565b60200260200101516020015161ffff1661ffff1681526020019081526020015f2090816117789190612cb3565b506001016116b2565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610b159190612dcf565b600281015161ffff811660031461099257816040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b6117fe611fa4565b604080518082019091525f80825260208201525f8061183333604089013560608a013561182e60208c018c612464565b611b64565b915091505f806118438984611400565b909250905061186f61185860208b018b612464565b8383611869368d90038d018d612e76565b8b611bc1565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118bd908d018d612464565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b5f7f000000000000000000000000000000000000000000000000000000000000000061191a8184612ea6565b6109f69190612ede565b5f6119326020828486612860565b61193b91612f1a565b9392505050565b5f611951602860208486612860565b61195a91612f56565b60c01c9392505050565b5f6109f67f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff8416612ede565b5f6119db73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585611cd4565b509092915050565b60606119f28260288186612860565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606084848484604051602001611a469493929190612f9e565b6040516020818303038152906040529050949350505050565b5f80611a8b7f000000000000000000000000000000000000000000000000000000000000000084612ea6565b905067ffffffffffffffff8111156109f6576040517fe2ce9413000000000000000000000000000000000000000000000000000000008152600481018290526024016108ee565b8051606090151580611b33578484604051602001611b1f92919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b604051602081830303815290604052611b5a565b84843385604051602001611b4a949392919061301b565b6040516020818303038152906040525b9150935093915050565b5f80611b71858585611121565b9092509050611bb873ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016873085611d5a565b94509492505050565b611bc9611fa4565b5f611bd6845f0151611da6565b602085015190915015611bf057611bf08460200151611de6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff168152602001611c4d8c611175565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b8152600401611c88929190612b84565b60806040518083038185885af1158015611ca4573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611cc99190613073565b979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052611d5591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611f05565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052611da09186918216906323b872dd90608401611d0e565b50505050565b5f813414611de2576040517f9f7041200000000000000000000000000000000000000000000000000000000081523460048201526024016108ee565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7491906125cd565b905073ffffffffffffffffffffffffffffffffffffffff8116611ec3576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61099273ffffffffffffffffffffffffffffffffffffffff8216337f000000000000000000000000000000000000000000000000000000000000000085611d5a565b5f8060205f8451602086015f885af180611f24576040513d5f823e3d81fd5b50505f513d91508115611f3b578060011415611f55565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611da0576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016108ee565b60405180606001604052805f80191681526020015f67ffffffffffffffff168152602001611fe360405180604001604052805f81526020015f81525090565b905290565b5f60e08284031215611ff8575f80fd5b50919050565b5f6020828403121561200e575f80fd5b813567ffffffffffffffff811115612024575f80fd5b610b4d84828501611fe8565b5f5b8381101561204a578181015183820152602001612032565b50505f910152565b5f8151808452612069816020860160208601612030565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612132578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261211f87890182612052565b97505093820193908201906001016120d5565b50508751606088015250505060208501516080850152509050610b4d565b5f60608284031215611ff8575f80fd5b5f8083601f840112612170575f80fd5b50813567ffffffffffffffff811115612187575f80fd5b60208301915083602082850101111561219e575f80fd5b9250929050565b73ffffffffffffffffffffffffffffffffffffffff811681146110ea575f80fd5b5f805f805f805f60e0888a0312156121dc575f80fd5b6121e68989612150565b965060608801359550608088013567ffffffffffffffff80821115612209575f80fd5b6122158b838c01612160565b909750955060a08a0135915061222a826121a5565b90935060c0890135908082111561223f575f80fd5b5061224c8a828b01612160565b989b979a50959850939692959293505050565b803563ffffffff81168114612272575f80fd5b919050565b5f8060408385031215612288575f80fd5b6122918361225f565b946020939093013593505050565b80151581146110ea575f80fd5b5f80604083850312156122bd575f80fd5b823567ffffffffffffffff8111156122d3575f80fd5b6122df85828601611fe8565b92505060208301356122f08161229f565b809150509250929050565b8151815260208083015190820152604081016109f6565b803561ffff81168114612272575f80fd5b5f8060408385031215612334575f80fd5b61233d8361225f565b915061234b60208401612312565b90509250929050565b602081525f61193b6020830184612052565b5f60208284031215612376575f80fd5b813561193b816121a5565b5f805f8060a08587031215612394575f80fd5b61239e8686612150565b9350606085013567ffffffffffffffff8111156123b9575f80fd5b6123c587828801612160565b90945092505060808501356123d9816121a5565b939692955090935050565b5f8083601f8401126123f4575f80fd5b50813567ffffffffffffffff81111561240b575f80fd5b6020830191508360208260051b850101111561219e575f80fd5b5f8060208385031215612436575f80fd5b823567ffffffffffffffff81111561244c575f80fd5b612458858286016123e4565b90969095509350505050565b5f60208284031215612474575f80fd5b61193b8261225f565b5f805f8060608587031215612490575f80fd5b6124998561225f565b93506124a760208601612312565b9250604085013567ffffffffffffffff8111156124c2575f80fd5b6124ce87828801612160565b95989497509550505050565b5f805f83850360808112156124ed575f80fd5b843567ffffffffffffffff811115612503575f80fd5b61250f87828801611fe8565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612541575f80fd5b506020840191506060840135612556816121a5565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff6020850151166020830152604084015161259c604084018280518252602090810151910152565b5082516080830152602083015160a083015261193b565b5f606082840312156125c3575f80fd5b61193b8383612150565b5f602082840312156125dd575f80fd5b815161193b816121a5565b5f602082840312156125f8575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b600181811c9082168061264057607f821691505b602082108103611ff8577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b6040516060810167ffffffffffffffff8111828210171561269a5761269a6125ff565b60405290565b6040805190810167ffffffffffffffff8111828210171561269a5761269a6125ff565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561270a5761270a6125ff565b604052919050565b5f67ffffffffffffffff82111561272b5761272b6125ff565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612771576127716125ff565b8360051b60206127828183016126c3565b868152918501918181019036841115612799575f80fd5b865b84811015612854578035868111156127b1575f80fd5b880160603682900312156127c3575f80fd5b6127cb612677565b6127d48261225f565b81526127e1868301612312565b86820152604080830135898111156127f7575f80fd5b929092019136601f84011261280a575f80fd5b823561281d61281882612712565b6126c3565b8181523689838701011115612830575f80fd5b818986018a8301375f9181018901919091529082015284525091830191830161279b565b50979650505050505050565b5f808585111561286e575f80fd5b8386111561287a575f80fd5b5050820193919092039150565b5f8451612898818460208901612030565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610b4d6020830184866128ad565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112612966575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129a3575f80fd5b83018035915067ffffffffffffffff8211156129bd575f80fd5b60200191503681900382131561219e575f80fd5b67ffffffffffffffff811681146110ea575f80fd5b63ffffffff6129f48961225f565b168152602088013560208201525f6040890135612a10816129d1565b67ffffffffffffffff811660408401525087606083015260e06080830152612a3c60e0830187896128ad565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c0840152612a6b8185876128ad565b9a9950505050505050505050565b5f60208284031215612a89575f80fd5b815167ffffffffffffffff811115612a9f575f80fd5b8201601f81018413612aaf575f80fd5b8051612abd61281882612712565b818152856020838501011115612ad1575f80fd5b611633826020830160208601612030565b5f60208284031215612af2575f80fd5b813561193b816129d1565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f612b3b6080830184612052565b9695505050505050565b604081525f612b576040830185612052565b82810360208401526116338185612052565b5f60208284031215612b79575f80fd5b815161193b8161229f565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a06080840152612bb960e0840182612052565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a0850152612bf48282612052565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215612c37575f80fd5b612c3f6126a0565b9050815181526020820151602082015292915050565b5f60408284031215612c65575f80fd5b61193b8383612c27565b601f821115611d5557805f5260205f20601f840160051c81016020851015612c945750805b601f840160051c820191505b81811015610fc0575f8155600101612ca0565b815167ffffffffffffffff811115612ccd57612ccd6125ff565b612ce181612cdb845461262c565b84612c6f565b602080601f831160018114612d33575f8415612cfd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612dc7565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612d7f57888601518255948401946001909101908401612d60565b5085821015612dbb57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015612e68578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612e5481860183612052565b968901969450505090860190600101612df6565b509098975050505050505050565b5f60408284031215612e86575f80fd5b612e8e6126a0565b82358152602083013560208201528091505092915050565b5f82612ed9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109f6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b803560208310156109f6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015612f965780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161300b81602c850160208701612030565b91909101602c0195945050505050565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f8251613063816048850160208701612030565b9190910160480195945050505050565b5f60808284031215613083575f80fd5b61308b612677565b82518152602083015161309d816129d1565b60208201526130af8460408501612c27565b6040820152939250505056fea26469706673582212201d2eeb249efab86d32800173e736d788fc450154b978b7660829bc5ead288d1364736f6c6343000816003361016060405234801562000011575f80fd5b50604051620024be380380620024be833981016040819052620000349162000608565b60015f556001600160a01b03808416608052821660a081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa15801562000087573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000659565b6001600160a01b0390811660c052811660e081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa158015620000fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000122919062000659565b6001600160a01b0316610100816001600160a01b03168152505060a0516001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a1919062000659565b6001600160a01b03166101208190526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620001ea573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200021091906200067e565b63ffffffff1661014052608051610100516001600160a01b039081169116146200026c576101005160805160405163070bc55b60e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b6080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d1919062000659565b6001600160a01b031660c0516001600160a01b031614620003815760c0516080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000354919062000659565b60405163ba9d665f60e01b81526001600160a01b0392831660048201529116602482015260440162000263565b60e0516001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e69190620006a3565b620004145760e051604051637e0a8a5760e11b81526001600160a01b03909116600482015260240162000263565b60c05160405163095ea7b360e01b81526001600160a01b0385811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af115801562000465573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200048b9190620006a3565b506101005160405163095ea7b360e01b81526001600160a01b0383811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620004de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005049190620006a3565b50816001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000542573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005689190620006a3565b15620005e75760c05160405163095ea7b360e01b81526001600160a01b0384811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620005bf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005e59190620006a3565b505b505050620006c4565b6001600160a01b038116811462000605575f80fd5b50565b5f805f606084860312156200061b575f80fd5b83516200062881620005f0565b60208501519093506200063b81620005f0565b60408501519092506200064e81620005f0565b809150509250925092565b5f602082840312156200066a575f80fd5b81516200067781620005f0565b9392505050565b5f602082840312156200068f575f80fd5b815163ffffffff8116811462000677575f80fd5b5f60208284031215620006b4575f80fd5b8151801515811462000677575f80fd5b60805160a05160c05160e051610100516101205161014051611d246200079a5f395f81816102a5015261111301525f8181610200015261096b01525f818161027201528181610375015261119101525f818161018701528181610a1d0152610d4d01525f81816101540152818161031101526111b701525f818160e2015281816103be015281816108dd015281816109c601528181610da7015261113e01525f81816101ba015281816104560152818161055701528181610627015281816107230152818161104201526113290152611d245ff3fe6080604052600436106100c6575f3560e01c80636fad06f511610071578063a99ecc541161004c578063a99ecc5414610261578063aa72fe3f14610294578063d0a10260146102dc575f80fd5b80636fad06f5146101ef5780637e6e1e10146102225780639a6b198c1461024e575f80fd5b8063369caf83116100a1578063369caf8314610176578063411557d1146101a957806353174fa4146101dc575f80fd5b80630bfec755146100d157806319197ec61461012e5780631df34fa314610143575f80fd5b366100cd57005b5f80fd5b3480156100dc575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c36600461160e565b6102ef565b005b34801561014e575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b348015610181575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b4575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b6101416101ea36600461160e565b610353565b3480156101fa575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561022d575f80fd5b5061024161023c366004611661565b6103a9565b60405161012591906116c5565b61014161025c3660046116dc565b610843565b34801561026c575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561029f575f80fd5b506102c77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610125565b6101416102ea36600461177c565b610953565b6102f7610c50565b61033973ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d20565b61034e60015f55565b505050565b61035b610c50565b61039d73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d7a565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036105e0576040517fd905777e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063d905777e90602401602060405180830381865afa15801561049d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c19190611813565b905080841115610528576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716600482015260248101859052604481018290526064015b60405180910390fd5b6040517f4cdad506000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634cdad50690602401602060405180830381865afa1580156105b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d59190611813565b6040840152506107a8565b6040517f402d267d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063402d267d90602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611813565b9050808411156106f4576040517f79012fb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602481018590526044810182905260640161051f565b6040517fef8b30f7000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef8b30f790602401602060405180830381865afa15801561077d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a19190611813565b6040840152505b6040517f3b6f743b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690633b6f743b906107fc9085905f9060040161190a565b6040805180830381865afa158015610816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a919061197a565b95945050505050565b33301461087e576040517fa19dbf0000000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b5f808380602001905181019061089491906119e9565b91509150803410156108db576040517f7cb769dc0000000000000000000000000000000000000000000000000000000081526004810182905234602482015260440161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361093f5761093a85848432610d20565b61094b565b61094b85848432610d7a565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146109c4576040517f91ac5e4f00000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015610a6c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15610abb576040517f84fb3f0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816600482015260240161051f565b5f610ac68686610dcd565b90505f610ad38787610dee565b90505f610ae08888610dfd565b6040517f9a6b198c0000000000000000000000000000000000000000000000000000000081529091503090639a6b198c903490610b27908e90889087908990600401611ad0565b5f604051808303818588803b158015610b3e575f80fd5b505af193505050508015610b50575060015b610c19573d808015610b7d576040519150601f19603f3d011682016040523d82523d5f602084013e610b82565b606091505b507f7cb769dc00000000000000000000000000000000000000000000000000000000610bad82611b15565b7fffffffff000000000000000000000000000000000000000000000000000000001603610bdc57805181602001fd5b610be98b8a8a8632610e47565b6040518a907ffe509803c09416b28ff3d8f690c8b0c61462a892c46d5430c8fb20abe472daf0905f90a250610c44565b60405189907f27b5aea9f5736c02241d8a0272e9ec988ea44cf85c4b4760329431aa19678394905f90a25b50505050505050505050565b60025f5403610c8b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052610d1a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610f6c565b50505050565b5f610d2b858561100b565b9050610d3b8184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5050505050565b5f610d8585856112eb565b9050610d958184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5f610ddc604c602c8486611b64565b610de591611b8b565b90505b92915050565b5f610ddc602c600c8486611b64565b6060610e0c82604c8186611b64565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b610e8c6040518060e001604052805f63ffffffff1681526020015f80191681526020015f81526020015f81526020016060815260200160608152602001606081525090565b610e96858561136d565b63ffffffff168152610ea88585610dcd565b602080830191909152604080830185905280518082018252348082525f9382019390935290517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89169263c7c7f5b3929091610f219186918890600401611bc7565b60c06040518083038185885af1158015610f3d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f629190611c16565b5050505050505050565b5f8060205f8451602086015f885af180610f8b576040513d5f823e3d81fd5b50505f513d91508115610fa2578060011415610fbc565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610d1a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161051f565b6040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018290523060248201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636e553f65906044015b6020604051808303815f875af115801561109e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de59190611813565b80821015611106576040517f71c4efed000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161051f565b5050565b815163ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116911603611242575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146111b5577f00000000000000000000000000000000000000000000000000000000000000006111d7565b7f00000000000000000000000000000000000000000000000000000000000000005b90503415611211576040517f7578d2bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1a61121f846020015190565b604085015173ffffffffffffffffffffffffffffffffffffffff8416919061138f565b604080518082018252348082525f602083015291517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169263c7c7f5b39290916112aa9187918790600401611bc7565b60c06040518083038185885af11580156112c6573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d739190611c16565b6040517fba08765200000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ba08765290606401611082565b5f61137c600c60088486611b64565b61138591611ca6565b60e01c9392505050565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261034e91859182169063a9059cbb90606401610cd3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff8111828210171561141d5761141d6113cd565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561146a5761146a6113cd565b604052919050565b63ffffffff81168114611483575f80fd5b50565b803561149181611472565b919050565b5f67ffffffffffffffff8211156114af576114af6113cd565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126114ea575f80fd5b81356114fd6114f882611496565b611423565b818152846020838601011115611511575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0828403121561153d575f80fd5b6115456113fa565b905061155082611486565b8152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff8082111561158a575f80fd5b611596858386016114db565b608084015260a08401359150808211156115ae575f80fd5b6115ba858386016114db565b60a084015260c08401359150808211156115d2575f80fd5b506115df848285016114db565b60c08301525092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611491575f80fd5b5f805f60608486031215611620575f80fd5b83359250602084013567ffffffffffffffff81111561163d575f80fd5b6116498682870161152d565b925050611658604085016115eb565b90509250925092565b5f805f8060808587031215611674575f80fd5b61167d856115eb565b935061168b602086016115eb565b925060408501359150606085013567ffffffffffffffff8111156116ad575f80fd5b6116b98782880161152d565b91505092959194509250565b815181526020808301519082015260408101610de8565b5f805f80608085870312156116ef575f80fd5b6116f8856115eb565b935060208501359250604085013567ffffffffffffffff81111561171a575f80fd5b611726878288016114db565b949793965093946060013593505050565b5f8083601f840112611747575f80fd5b50813567ffffffffffffffff81111561175e575f80fd5b602083019150836020828501011115611775575f80fd5b9250929050565b5f805f805f805f60a0888a031215611792575f80fd5b61179b886115eb565b965060208801359550604088013567ffffffffffffffff808211156117be575f80fd5b6117ca8b838c01611737565b90975095508591506117de60608b016115eb565b945060808a01359150808211156117f3575f80fd5b506118008a828b01611737565b989b979a50959850939692959293505050565b5f60208284031215611823575f80fd5b5051919050565b5f5b8381101561184457818101518382015260200161182c565b50505f910152565b5f815180845261186381602086016020860161182a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526118d760e085018261184c565b905060a083015184820360a08601526118f0828261184c565b91505060c083015184820360c086015261083a828261184c565b604081525f61191c6040830185611895565b905082151560208301529392505050565b5f6040828403121561193d575f80fd5b6040516040810181811067ffffffffffffffff82111715611960576119606113cd565b604052825181526020928301519281019290925250919050565b5f6040828403121561198a575f80fd5b610de5838361192d565b805161149181611472565b5f82601f8301126119ae575f80fd5b81516119bc6114f882611496565b8181528460208386010111156119d0575f80fd5b6119e182602083016020870161182a565b949350505050565b5f80604083850312156119fa575f80fd5b825167ffffffffffffffff80821115611a11575f80fd5b9084019060e08287031215611a24575f80fd5b611a2c6113fa565b611a3583611994565b8152602083015160208201526040830151604082015260608301516060820152608083015182811115611a66575f80fd5b611a728882860161199f565b60808301525060a083015182811115611a89575f80fd5b611a958882860161199f565b60a08301525060c083015182811115611aac575f80fd5b611ab88882860161199f565b60c08301525060209590950151949694955050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f611b04608083018561184c565b905082606083015295945050505050565b5f815160208301517fffffffff0000000000000000000000000000000000000000000000000000000080821693506004831015611b5c5780818460040360031b1b83161693505b505050919050565b5f8085851115611b72575f80fd5b83861115611b7e575f80fd5b5050820193919092039150565b80356020831015610de8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b608081525f611bd96080830186611895565b9050611bf2602083018580518252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff83166060830152949350505050565b5f8082840360c0811215611c28575f80fd5b6080811215611c35575f80fd5b506040516060810167ffffffffffffffff8282108183111715611c5a57611c5a6113cd565b8160405285518352602086015191508082168214611c76575f80fd5b506020820152611c89856040860161192d565b60408201529150611c9d846080850161192d565b90509250929050565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611ce65780818660040360031b1b83161692505b50509291505056fea26469706673582212203c210af0c85b10469f135dd49d1274fa8e04b8bee0c2069213c4acfe2a3036b564736f6c6343000816003360c06040526001600d5534801562000015575f80fd5b5060405162005fc238038062005fc28339810160408190526200003891620002c2565b81816001600160a01b0381166200006957604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007481620000c8565b5063ffffffff166080526040516200008c90620002b4565b604051809103905ff080158015620000a6573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c09062000117565b505062000338565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200012162000284565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200016b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000191919062000310565b620001af5760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001e95760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002b25760405163118cdaa760e01b815233600482015260240162000060565b565b6102818062005d4183390190565b5f8060408385031215620002d4575f80fd5b825163ffffffff81168114620002e8575f80fd5b60208401519092506001600160a01b038116811462000305575f80fd5b809150509250929050565b5f6020828403121562000321575f80fd5b8151801515811462000331575f80fd5b9392505050565b60805160a0516159c46200037d5f395f61078601525f818161054301528181612d7701528181613782015281816137e801528181613f570152613fbd01526159c45ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b73578063ef667aa114610b92578063f2fde38b14610bdb578063f64be4c714610bfa575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b54575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614886565b610c2e565b005b348015610374575f80fd5b5061037d610d41565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c036600461492e565b610d71565b6103d86103d3366004614976565b6110f2565b60405161039d91906149c5565b3480156103f0575f80fd5b506103676103ff366004614a07565b611258565b34801561040f575f80fd5b5061042361041e366004614a72565b611315565b60405161039d9190614b2e565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614b57565b61142b565b34801561049b575f80fd5b506104636104aa366004614bb9565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614bf8565b6115ff565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614b57565b611694565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614c20565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614c39565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614c72565b611841565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614c8b565b61188f565b34801561067e575f80fd5b5061036761068d36600461492e565b611904565b34801561069d575f80fd5b506103676106ac366004614d7f565b611df9565b3480156106bc575f80fd5b506103676106cb366004614e59565b611e63565b3480156106db575f80fd5b5061070e6106ea366004614c72565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614c72565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f31565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004614ee3565b611f44565b3480156107ea575f80fd5b506106446107f9366004614f30565b612047565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120b2565b60405161039d9190614f59565b610367610849366004614fa5565b612112565b348015610859575f80fd5b50610367610868366004615049565b6122ce565b348015610878575f80fd5b5061060c610887366004614c39565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd366004615049565b6125c0565b3480156108dd575f80fd5b5061060c6108ec366004614c39565b612694565b3480156108fc575f80fd5b5061036761090b366004615089565b61272b565b34801561091b575f80fd5b5061036761092a3660046150b2565b612b2a565b34801561093a575f80fd5b506103676109493660046150cd565b612b42565b348015610959575f80fd5b50610463610968366004614c39565b612cd8565b348015610978575f80fd5b50610367610987366004615107565b612de6565b348015610997575f80fd5b506105ae6109a6366004614bf8565b61309d565b3480156109b6575f80fd5b506103676109c5366004614c20565b613123565b3480156109d5575f80fd5b506106446109e4366004614f30565b613198565b3480156109f4575f80fd5b50610463610a03366004615121565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614c20565b6131fc565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a366004615089565b613273565b348015610a8a575f80fd5b50610367610a99366004615121565b61356e565b348015610aa9575f80fd5b50610644610ab8366004614c20565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614bf8565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614976565b613690565b60405161039d9190615160565b348015610b4d575f80fd5b505f6105ae565b348015610b5f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b7e575f80fd5b50610367610b8d366004614c20565b6139b1565b348015610b9d575f80fd5b5061070e610bac366004614bf8565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610be6575f80fd5b50610367610bf5366004614c20565b613bab565b348015610c05575f80fd5b506105ae610c14366004614c72565b60096020525f90815260409020546001600160a01b031681565b610c7d86610c3f60208a018a614c72565b60208a0135610c5460608c0160408d01615177565b898989604051602001610c6993929190615190565b604051602081830303815290604052613c01565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cd1908b908a908a908a9033908b908b9060040161522a565b5f604051808303818588803b158015610ce8575f80fd5b505af1158015610cfa573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d30929190615280565b60405180910390a150505050505050565b5f80610d50600d546001141590565b610d5b575f80610d69565b610d69600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610dc4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e7d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3591906152d1565b6002811115610e4657610e466152a4565b03610e7d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f49576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610eef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1391906152fc565b610f49576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f5288613e3f565b5f610f5d89896115ff565b9150508015610f98576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03610ff6576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001015561108c565b43861161102f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b6110fa6147d8565b6111076020840184614c72565b336001600d5414611144576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d5561118390860160808701615317565b80156111985750600e546001600160a01b0316155b156111cf576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111db3388613ea8565b915091505f6111e73490565b90505f6112026111fd60a08b0160808c01615317565b614180565b90506112138460400151838361424a565b600e54604085015160200151611235916001600160a01b03169083868c6142b1565b6040840151516112479083858b6142de565b50506001600d555095945050505050565b61126185613e3f565b5f83838360405160200161127793929190615190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112d3866112b86020880188614c72565b60208801356112cd60608a0160408b01615177565b85613c01565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611305929190615280565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661136b576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113dc573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261142191908101906153f8565b9695505050505050565b61143485613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114bf576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061150b575080155b1561154e576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611305565b6001600160a01b038083165f90815260076020908152604080832063ffffffff86168452909152812054909116908161168d5763ffffffff83165f908152600a60205260409020546001600160a01b0316915081611689576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b61169d85613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611723576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114b6565b80158061176d57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117b0576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611305565b63ffffffff81165f908152600960205260408120546001600160a01b031615801590611889575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516118ee9a9998979695949392919061542a565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561193657506001600160a01b03811615155b1561196d576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a26575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119de91906152d1565b60028111156119ef576119ef6152a4565b03611a26576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611af2576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611a98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611abc91906152fc565b611af2576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611afb88613e3f565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b62576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d4f576001600160a01b0381161580611c1c57506001600160a01b038716155b15611c53576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c7a91906154bf565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d41918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611dee565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110df565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e4e9a999897969594939291906154d2565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611eb6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ebf85613e3f565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f0890889087908790600401615530565b5f604051808303815f87803b158015611f1f575f80fd5b505af1158015611dee573d5f803e3d5ffd5b611f39614308565b611f425f61434d565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fb2576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fc292919061567b565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161203891908890889088908890889061568a565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120ab9185918591859061207690850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166143b4565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561210857602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116120ea575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161215c908790879061567b565b604051809103902090508082146121a9576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114b6565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612230908e908d908c908c9033908d908d906004016156d2565b5f604051808303818588803b158015612247575f80fd5b505af1158015612259573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122ba94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561230057506001600160a01b03811615155b15612337576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b038116156123f1576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612385573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a991906152d1565b60028111156123ba576123ba6152a4565b036123f1576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124bd576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248791906152fc565b6124bd576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c687613e3f565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361252c576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d30565b5f805f6125cd86866115ff565b91509150816001600160a01b0316846001600160a01b0316036125f5576001925050506120ab565b5f81612628576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061263d565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126775750438160200151115b1561268857600193505050506120ab565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612723576001016126d0565b949350505050565b612733614308565b6001600160a01b0382165f90815260056020526040902054829060ff16612786576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561283f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f791906152d1565b6002811115612808576128086152a4565b0361283f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561290b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d591906152fc565b61290b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612966576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612a965763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a3b87436154bf565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b20565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b32614308565b612b3d83838361444c565b505050565b612b5982612b536020860186614c72565b336125c0565b612b8f576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bb790870187614c72565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612bf48484836143b4565b612c2a576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c3584848361446f565b612c6b576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c9783612c7c6020870187614c72565b6020870135612c916060890160408a01615177565b86614528565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612cca93929190615725565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d209067ffffffffffffffff16600161574d565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612dee614308565b6001600160a01b0381165f90815260056020526040902054819060ff16612e41576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612efb576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb391906152d1565b6002811115612ec457612ec46152a4565b03612efb576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fc7576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906152fc565b612fc7576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613020576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611305565b6001600160a01b038083165f90815260066020908152604080832063ffffffff861684529091529020541680611889575063ffffffff81165f908152600960205260409020546001600160a01b031680611889576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61312b614308565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b0381165f90815260016020908152604082206120ab918591859185906131c790850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff1661446f565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981910161318d565b6001600160a01b0382165f90815260056020526040902054829060ff166132c6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561337f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613313573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333791906152d1565b6002811115613348576133486152a4565b0361337f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561344b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156133f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061341591906152fc565b61344b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613453614308565b845f0361349d5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613522565b4385116134d6576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d30565b61357784613e3f565b613582848484612694565b61358d90600161574d565b67ffffffffffffffff168167ffffffffffffffff16146135e5576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612cca565b604080518082019091525f80825260208201526136b360a0840160808501615317565b80156136c85750600e546001600160a01b0316155b156136ff576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061372790870187614c72565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137629067ffffffffffffffff16600161574d565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137cd9190614c72565b63ffffffff168152602001866020013581526020016138c7847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061381a9190614c72565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b81526020016138d9604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139259050856109a66020890189614c72565b90506001600160a01b03811663d80e9bd98361394460608a018a61576e565b61395460a08c0160808d01615317565b6040518563ffffffff1660e01b815260040161397394939291906157cf565b6040805180830381865afa15801561398d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142191906158c3565b6139b9614308565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5891906152fc565b613a8e576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613ae0576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161318d565b613bb3614308565b6001600160a01b038116613bf5576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114b6565b613bfe8161434d565b50565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d5957600181015b8467ffffffffffffffff168167ffffffffffffffff1611613cf5576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613ced576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b600101613c4d565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613dec576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114b6565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613e7157506001600160a01b038181165f908152600f6020526040902054163314155b15613bfe576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613eb06147d8565b5f80613f3785613ec36020870187614c72565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fa29190614c72565b63ffffffff16815260200186602001358152602001613fef847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061381a9190614c72565b8152602001614001604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061404d9050876109a66020890189614c72565b90505f806001600160a01b038316634389e58f8561406e60608c018c61576e565b61407e60a08e0160808f01615317565b6040518563ffffffff1660e01b815260040161409d94939291906157cf565b5f604051808303815f875af11580156140b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526140fd91908101906158dd565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161413160608b018b61576e565b866040516141429493929190615929565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b5f811561424557600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156141e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061420a9190615969565b9050805f03614245576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b825182108061425c5750808360200151115b15612b3d57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114b6565b83156142c2576142c28583866145a7565b828410156142d7576142d785828686036145a7565b5050505050565b83156142ee576142ee82856145fb565b8284101561430257614302818585036145fb565b50505050565b5f546001600160a01b03163314611f42576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114b6565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061272357506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d9061440d908790600401615980565b602060405180830381865afa158015614428573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272391906152fc565b6001600160a01b03831661446457612b3d82826145fb565b612b3d8383836145a7565b5f67ffffffffffffffff821661448b6060860160408701615177565b67ffffffffffffffff16118061272357506001600160a01b0383165f90815260026020908152604082209082906144c490880188614c72565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f8660400160208101906145049190615177565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b8061455f576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6001600160a01b0382166145e7576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b3d6001600160a01b03841683836146d6565b6001600160a01b03821661463b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614684576040519150601f19603f3d011682016040523d82523d5f602084013e614689565b606091505b5050905080612b3d576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114b6565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b3d93879390925f9283929183919082885af180614772576040513d5f823e3d81fd5b50505f513d91508115614789578060011415614796565b6001600160a01b0384163b155b15614302576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114b6565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161481760405180604001604052805f81526020015f81525090565b905290565b5f6060828403121561482c575f80fd5b50919050565b80356001600160a01b0381168114614245575f80fd5b5f8083601f840112614858575f80fd5b50813567ffffffffffffffff81111561486f575f80fd5b60208301915083602082850101111561168d575f80fd5b5f805f805f805f60e0888a03121561489c575f80fd5b6148a6898961481c565b96506148b460608901614832565b95506080880135945060a088013567ffffffffffffffff808211156148d7575f80fd5b6148e38b838c01614848565b909650945060c08a01359150808211156148fb575f80fd5b506149088a828b01614848565b989b979a50959850939692959293505050565b803563ffffffff81168114614245575f80fd5b5f805f8060808587031215614941575f80fd5b61494a85614832565b93506149586020860161491b565b925061496660408601614832565b9396929550929360600135925050565b5f8060408385031215614987575f80fd5b823567ffffffffffffffff81111561499d575f80fd5b830160a081860312156149ae575f80fd5b91506149bc60208401614832565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614a00604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614a1b575f80fd5b614a2486614832565b9450614a33876020880161481c565b93506080860135925060a086013567ffffffffffffffff811115614a55575f80fd5b614a6188828901614848565b969995985093965092949392505050565b5f805f8060808587031215614a85575f80fd5b614a8e85614832565b9350614a9c60208601614832565b9250614aaa6040860161491b565b9150614ab86060860161491b565b905092959194509250565b5f5b83811015614add578181015183820152602001614ac5565b50505f910152565b5f8151808452614afc816020860160208601614ac3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120ab6020830184614ae5565b803567ffffffffffffffff81168114614245575f80fd5b5f805f805f60a08688031215614b6b575f80fd5b614b7486614832565b9450614b826020870161491b565b935060408601359250614b9760608701614b40565b949793965091946080013592915050565b803561ffff81168114614245575f80fd5b5f805f8060808587031215614bcc575f80fd5b614bd585614832565b9350614be360208601614832565b925060408501359150614ab860608601614ba8565b5f8060408385031215614c09575f80fd5b614c1283614832565b91506149bc6020840161491b565b5f60208284031215614c30575f80fd5b6120ab82614832565b5f805f60608486031215614c4b575f80fd5b614c5484614832565b9250614c626020850161491b565b9150604084013590509250925092565b5f60208284031215614c82575f80fd5b6120ab8261491b565b5f805f805f805f805f805f806101208d8f031215614ca7575f80fd5b614cb08d614832565b9b50614cbe60208e01614832565b9a5060408d01359950614cd360608e01614ba8565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614cfb575f80fd5b614d0b8e60c08f01358f01614848565b909650945067ffffffffffffffff60e08e01351115614d28575f80fd5b614d388e60e08f01358f01614848565b909450925067ffffffffffffffff6101008e01351115614d56575f80fd5b614d678e6101008f01358f01614848565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614d9a575f80fd5b614da48d8d61481c565b9a50614db260608d01614832565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614de2575f80fd5b614df28e60e08f01358f01614848565b90975095506101008d0135811015614e08575f80fd5b614e198e6101008f01358f01614848565b90955093506101208d0135811015614e2f575f80fd5b50614e418d6101208e01358e01614848565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614e6c575f80fd5b614e7585614832565b9350614e8360208601614832565b9250604085013567ffffffffffffffff80821115614e9f575f80fd5b818701915087601f830112614eb2575f80fd5b813581811115614ec0575f80fd5b8860208260051b8501011115614ed4575f80fd5b95989497505060200194505050565b5f805f805f60808688031215614ef7575f80fd5b614f0086614832565b945060208601359350614f1560408701614ba8565b9250606086013567ffffffffffffffff811115614a55575f80fd5b5f8060808385031215614f41575f80fd5b614f4b848461481c565b91506149bc60608401614832565b602080825282518282018190525f9190848201906040850190845b81811015614f995783516001600160a01b031683529284019291840191600101614f74565b50909695505050505050565b5f805f805f805f8060c0898b031215614fbc575f80fd5b614fc589614832565b9750614fd360208a01614832565b965060408901359550614fe860608a01614ba8565b9450608089013567ffffffffffffffff80821115615004575f80fd5b6150108c838d01614848565b909650945060a08b0135915080821115615028575f80fd5b506150358b828c01614848565b999c989b5096995094979396929594505050565b5f805f6060848603121561505b575f80fd5b61506484614832565b92506150726020850161491b565b915061508060408501614832565b90509250925092565b5f805f6060848603121561509b575f80fd5b6150a48461491b565b9250614c6260208501614832565b5f805f606084860312156150c4575f80fd5b6150a484614832565b5f805f60a084860312156150df575f80fd5b6150e9858561481c565b92506150f760608501614832565b9150608084013590509250925092565b5f8060408385031215615118575f80fd5b6149ae8361491b565b5f805f8060808587031215615134575f80fd5b61513d85614832565b935061514b6020860161491b565b925060408501359150614ab860608601614b40565b815181526020808301519082015260408101611889565b5f60208284031215615187575f80fd5b6120ab82614b40565b838152818360208301375f910160200190815292915050565b63ffffffff6151b78261491b565b1682526020810135602083015267ffffffffffffffff6151d960408301614b40565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b61523481896151a9565b86606082015260e060808201525f61525060e0830187896151e3565b6001600160a01b03861660a084015282810360c08401526152728185876151e3565b9a9950505050505050505050565b6080810161528e82856151a9565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f602082840312156152e1575f80fd5b8151600381106120ab575f80fd5b8015158114613bfe575f80fd5b5f6020828403121561530c575f80fd5b81516120ab816152ef565b5f60208284031215615327575f80fd5b81356120ab816152ef565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011261536e575f80fd5b815167ffffffffffffffff8082111561538957615389615332565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156153cf576153cf615332565b816040528381528660208588010111156153e7575f80fd5b611421846020830160208901614ac3565b5f60208284031215615408575f80fd5b815167ffffffffffffffff81111561541e575f80fd5b6127238482850161535f565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f61545960e08301888a6151e3565b82810360a084015261546c8187896151e3565b905082810360c08401526154818185876151e3565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561188957611889615492565b5f6101206154e0838e6151a9565b8b60608401528a60808401528960a08401528060c0840152615505818401898b6151e3565b905082810360e084015261551a8187896151e3565b90508281036101008401526154818185876151e3565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b8981101561566b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c36030181126155c4575f80fd5b8b0163ffffffff806155d58361491b565b168552806155e488840161491b565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811261561d575f80fd5b01858101903567ffffffffffffffff811115615637575f80fd5b803603821315615645575f80fd5b878986015261565788860182846151e3565b958701959450505090840190600101615564565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a060808301526156c660a0830184866151e3565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a060408401526156fb60a08401888a6151e3565b818716606085015283810360808501526157168186886151e3565b9b9a5050505050505050505050565b60a0810161573382866151a9565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614a0057614a00615492565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126157a1575f80fd5b83018035915067ffffffffffffffff8211156157bb575f80fd5b60200191503681900382131561168d575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f606086015161581f60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152615850610140840182614ae5565b905082810360208401526158658186886151e3565b915050612ddd604083018415159052565b5f60408284031215615886575f80fd5b6040516040810181811067ffffffffffffffff821117156158a9576158a9615332565b604052825181526020928301519281019290925250919050565b5f604082840312156158d3575f80fd5b6120ab8383615876565b5f80606083850312156158ee575f80fd5b6158f88484615876565b9150604083015167ffffffffffffffff811115615913575f80fd5b61591f8582860161535f565b9150509250929050565b606081525f61593b6060830187614ae5565b828103602084015261594e8186886151e3565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615979575f80fd5b5051919050565b6060810161188982846151a956fea2646970667358221220938f9466c98d432f294c8fa92afa649818bd8c0b591d10b7b71b464300e2a18764736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c6343000816003360e06040526001600d5534801562000015575f80fd5b5060405162006193380380620061938339810160408190526200003891620002ef565b828281816001600160a01b0381166200006b57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007681620000d9565b5063ffffffff166080526040516200008e90620002c5565b604051809103905ff080158015620000a8573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c29062000128565b50506001600160a01b031660c05250620003679050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200013262000295565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200017c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a291906200033f565b620001c05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001fa5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002c35760405163118cdaa760e01b815233600482015260240162000062565b565b6102818062005f1283390190565b80516001600160a01b0381168114620002ea575f80fd5b919050565b5f805f6060848603121562000302575f80fd5b835163ffffffff8116811462000316575f80fd5b92506200032660208501620002d3565b91506200033660408501620002d3565b90509250925092565b5f6020828403121562000350575f80fd5b8151801515811462000360575f80fd5b9392505050565b60805160a05160c051615b48620003ca5f395f8181610b500152818161314e015281816141df01526143f001525f61078601525f818161054301528181612d98015281816137b40152818161381a01528181613f860152613fec0152615b485ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b93578063ef667aa114610bb2578063f2fde38b14610bfb578063f64be4c714610c1a575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b74575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614a0a565b610c4e565b005b348015610374575f80fd5b5061037d610d61565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c0366004614ab2565b610d91565b6103d86103d3366004614afa565b611112565b60405161039d9190614b49565b3480156103f0575f80fd5b506103676103ff366004614b8b565b611279565b34801561040f575f80fd5b5061042361041e366004614bf6565b611336565b60405161039d9190614cb2565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614cdb565b61144c565b34801561049b575f80fd5b506104636104aa366004614d3d565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614d7c565b611620565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614cdb565b6116b5565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614da4565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614dbd565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614df6565b611862565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614e0f565b6118b0565b34801561067e575f80fd5b5061036761068d366004614ab2565b611925565b34801561069d575f80fd5b506103676106ac366004614f03565b611e1a565b3480156106bc575f80fd5b506103676106cb366004614fdd565b611e84565b3480156106db575f80fd5b5061070e6106ea366004614df6565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614df6565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f52565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004615067565b611f65565b3480156107ea575f80fd5b506106446107f93660046150b4565b612068565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120d3565b60405161039d91906150dd565b610367610849366004615129565b612133565b348015610859575f80fd5b506103676108683660046151cd565b6122ef565b348015610878575f80fd5b5061060c610887366004614dbd565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd3660046151cd565b6125e1565b3480156108dd575f80fd5b5061060c6108ec366004614dbd565b6126b5565b3480156108fc575f80fd5b5061036761090b36600461520d565b61274c565b34801561091b575f80fd5b5061036761092a366004615236565b612b4b565b34801561093a575f80fd5b50610367610949366004615251565b612b63565b348015610959575f80fd5b50610463610968366004614dbd565b612cf9565b348015610978575f80fd5b5061036761098736600461528b565b612e07565b348015610997575f80fd5b506105ae6109a6366004614d7c565b6130be565b3480156109b6575f80fd5b506103676109c5366004614da4565b613144565b3480156109d5575f80fd5b506106446109e43660046150b4565b6131c3565b3480156109f4575f80fd5b50610463610a033660046152a5565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614da4565b613227565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a36600461520d565b6132a5565b348015610a8a575f80fd5b50610367610a993660046152a5565b6135a0565b348015610aa9575f80fd5b50610644610ab8366004614da4565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614d7c565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614afa565b6136c2565b60405161039d91906152e4565b348015610b4d575f80fd5b507f00000000000000000000000000000000000000000000000000000000000000006105ae565b348015610b7f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b9e575f80fd5b50610367610bad366004614da4565b6139e3565b348015610bbd575f80fd5b5061070e610bcc366004614d7c565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c06575f80fd5b50610367610c15366004614da4565b613bdd565b348015610c25575f80fd5b506105ae610c34366004614df6565b60096020525f90815260409020546001600160a01b031681565b610c9d86610c5f60208a018a614df6565b60208a0135610c7460608c0160408d016152fb565b898989604051602001610c8993929190615314565b604051602081830303815290604052613c30565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cf1908b908a908a908a9033908b908b906004016153ae565b5f604051808303818588803b158015610d08575f80fd5b505af1158015610d1a573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d50929190615404565b60405180910390a150505050505050565b5f80610d70600d546001141590565b610d7b575f80610d89565b610d89600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610de4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e9d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e559190615455565b6002811115610e6657610e66615428565b03610e9d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f69576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610f0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f339190615480565b610f69576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f7288613e6e565b5f610f7d8989611620565b9150508015610fb8576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03611016576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600101556110ac565b43861161104f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b61111a61495c565b6111276020840184614df6565b336001600d5414611164576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d556111a39086016080870161549b565b80156111b85750600e546001600160a01b0316155b156111ef576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111fb3388613ed7565b915091505f6112086141af565b90505f61122361121e60a08b0160808c0161549b565b614255565b90506112348460400151838361431f565b600e54604085015160200151611256916001600160a01b03169083868c614386565b6040840151516112689083858b6143b3565b50506001600d555095945050505050565b61128285613e6e565b5f83838360405160200161129893929190615314565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112f4866112d96020880188614df6565b60208801356112ee60608a0160408b016152fb565b85613c30565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611326929190615404565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661138c576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113fd573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611442919081019061557c565b9695505050505050565b61145585613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114e0576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061152c575080155b1561156f576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611326565b6001600160a01b038083165f90815260076020908152604080832063ffffffff8616845290915281205490911690816116ae5763ffffffff83165f908152600a60205260409020546001600160a01b03169150816116aa576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b6116be85613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611744576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114d7565b80158061178e57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117d1576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611326565b63ffffffff81165f908152600960205260408120546001600160a01b0316158015906118aa575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d60405161190f9a999897969594939291906155ae565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561195757506001600160a01b03811615155b1561198e576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a47575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ff9190615455565b6002811115611a1057611a10615428565b03611a47576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611b13576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611ab9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611add9190615480565b611b13576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b1c88613e6e565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b83576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d70576001600160a01b0381161580611c3d57506001600160a01b038716155b15611c74576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c9b9190615643565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d62918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611e0f565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110ff565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e6f9a99989796959493929190615656565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611ed7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ee085613e6e565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f29908890879087906004016156b4565b5f604051808303815f87803b158015611f40575f80fd5b505af1158015611e0f573d5f803e3d5ffd5b611f5a61441e565b611f635f614463565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fd3576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fe39291906157ff565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161205991908890889088908890889061580e565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120cc9185918591859061209790850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166144ca565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561212957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161210b575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161217d90879087906157ff565b604051809103902090508082146121ca576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114d7565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612251908e908d908c908c9033908d908d90600401615856565b5f604051808303818588803b158015612268575f80fd5b505af115801561227a573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122db94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561232157506001600160a01b03811615155b15612358576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612412576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ca9190615455565b60028111156123db576123db615428565b03612412576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124de576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612484573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124a89190615480565b6124de576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124e787613e6e565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361254d576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d50565b5f805f6125ee8686611620565b91509150816001600160a01b0316846001600160a01b031603612616576001925050506120cc565b5f81612649576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061265e565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126985750438160200151115b156126a957600193505050506120cc565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612744576001016126f1565b949350505050565b61275461441e565b6001600160a01b0382165f90815260056020526040902054829060ff166127a7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615612860575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128189190615455565b600281111561282957612829615428565b03612860576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561292c576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f69190615480565b61292c576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612987576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612ab75763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a5c8743615643565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b41565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b5361441e565b612b5e838383614562565b505050565b612b7a82612b746020860186614df6565b336125e1565b612bb0576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bd890870187614df6565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612c158484836144ca565b612c4b576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c56848483614585565b612c8c576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cb883612c9d6020870187614df6565b6020870135612cb26060890160408a016152fb565b8661463e565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612ceb939291906158a9565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d419067ffffffffffffffff1660016158d1565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612e0f61441e565b6001600160a01b0381165f90815260056020526040902054819060ff16612e62576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612f1c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed49190615455565b6002811115612ee557612ee5615428565b03612f1c576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fe8576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fb29190615480565b612fe8576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613041576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611326565b6001600160a01b038083165f90815260066020908152604080832063ffffffff8616845290915290205416806118aa575063ffffffff81165f908152600960205260409020546001600160a01b0316806118aa576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61314c61441e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036131b7576040517f10647d0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131c0816146bd565b50565b6001600160a01b0381165f90815260016020908152604082206120cc918591859185906131f290850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff16614585565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d798398191015b60405180910390a150565b6001600160a01b0382165f90815260056020526040902054829060ff166132f8576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b038116156133b1575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133699190615455565b600281111561337a5761337a615428565b036133b1576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561347d576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015613423573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134479190615480565b61347d576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61348561441e565b845f036134cf5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613554565b438511613508576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d50565b6135a984613e6e565b6135b48484846126b5565b6135bf9060016158d1565b67ffffffffffffffff168167ffffffffffffffff1614613617576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612ceb565b604080518082019091525f80825260208201526136e560a084016080850161549b565b80156136fa5750600e546001600160a01b0316155b15613731576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061375990870187614df6565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137949067ffffffffffffffff1660016158d1565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137ff9190614df6565b63ffffffff168152602001866020013581526020016138f9847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061384c9190614df6565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b815260200161390b60408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139579050856109a66020890189614df6565b90506001600160a01b03811663d80e9bd98361397660608a018a6158f2565b61398660a08c0160808d0161549b565b6040518563ffffffff1660e01b81526004016139a59493929190615953565b6040805180830381865afa1580156139bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114429190615a47565b6139eb61441e565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a8a9190615480565b613ac0576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613b12576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161329a565b613be561441e565b6001600160a01b038116613c27576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114d7565b6131c081614463565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d8857600181015b8467ffffffffffffffff168167ffffffffffffffff1611613d24576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613d1c576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b600101613c7c565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613e1b576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114d7565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613ea057506001600160a01b038181165f908152600f6020526040902054163314155b156131c0576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613edf61495c565b5f80613f6685613ef26020870187614df6565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fd19190614df6565b63ffffffff1681526020018660200135815260200161401e847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061384c9190614df6565b815260200161403060408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061407c9050876109a66020890189614df6565b90505f806001600160a01b038316634389e58f8561409d60608c018c6158f2565b6140ad60a08e0160808f0161549b565b6040518563ffffffff1660e01b81526004016140cc9493929190615953565b5f604051808303815f875af11580156140e7573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261412c9190810190615a61565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161416060608b018b6158f2565b866040516141719493929190615aad565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561422c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142509190615aed565b905090565b5f811561431a57600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156142bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142df9190615aed565b9050805f0361431a576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b82518210806143315750808360200151115b15612b5e57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114d7565b83156143975761439785838661472b565b828410156143ac576143ac858286860361472b565b5050505050565b34156143eb576040517f9a317a5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144187f000000000000000000000000000000000000000000000000000000000000000085858585614386565b50505050565b5f546001600160a01b03163314611f63576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114d7565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061274457506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d90614523908790600401615b04565b602060405180830381865afa15801561453e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127449190615480565b6001600160a01b03831661457a57612b5e828261477f565b612b5e83838361472b565b5f67ffffffffffffffff82166145a160608601604087016152fb565b67ffffffffffffffff16118061274457506001600160a01b0383165f90815260026020908152604082209082906145da90880188614df6565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f86604001602081019061461a91906152fb565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b80614675576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6146c561441e565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a623969060200161329a565b6001600160a01b03821661476b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b5e6001600160a01b038416838361485a565b6001600160a01b0382166147bf576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614808576040519150601f19603f3d011682016040523d82523d5f602084013e61480d565b606091505b5050905080612b5e576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114d7565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b5e93879390925f9283929183919082885af1806148f6576040513d5f823e3d81fd5b50505f513d9150811561490d57806001141561491a565b6001600160a01b0384163b155b15614418576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114d7565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161499b60405180604001604052805f81526020015f81525090565b905290565b5f606082840312156149b0575f80fd5b50919050565b80356001600160a01b038116811461431a575f80fd5b5f8083601f8401126149dc575f80fd5b50813567ffffffffffffffff8111156149f3575f80fd5b6020830191508360208285010111156116ae575f80fd5b5f805f805f805f60e0888a031215614a20575f80fd5b614a2a89896149a0565b9650614a38606089016149b6565b95506080880135945060a088013567ffffffffffffffff80821115614a5b575f80fd5b614a678b838c016149cc565b909650945060c08a0135915080821115614a7f575f80fd5b50614a8c8a828b016149cc565b989b979a50959850939692959293505050565b803563ffffffff8116811461431a575f80fd5b5f805f8060808587031215614ac5575f80fd5b614ace856149b6565b9350614adc60208601614a9f565b9250614aea604086016149b6565b9396929550929360600135925050565b5f8060408385031215614b0b575f80fd5b823567ffffffffffffffff811115614b21575f80fd5b830160a08186031215614b32575f80fd5b9150614b40602084016149b6565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614b84604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614b9f575f80fd5b614ba8866149b6565b9450614bb787602088016149a0565b93506080860135925060a086013567ffffffffffffffff811115614bd9575f80fd5b614be5888289016149cc565b969995985093965092949392505050565b5f805f8060808587031215614c09575f80fd5b614c12856149b6565b9350614c20602086016149b6565b9250614c2e60408601614a9f565b9150614c3c60608601614a9f565b905092959194509250565b5f5b83811015614c61578181015183820152602001614c49565b50505f910152565b5f8151808452614c80816020860160208601614c47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120cc6020830184614c69565b803567ffffffffffffffff8116811461431a575f80fd5b5f805f805f60a08688031215614cef575f80fd5b614cf8866149b6565b9450614d0660208701614a9f565b935060408601359250614d1b60608701614cc4565b949793965091946080013592915050565b803561ffff8116811461431a575f80fd5b5f805f8060808587031215614d50575f80fd5b614d59856149b6565b9350614d67602086016149b6565b925060408501359150614c3c60608601614d2c565b5f8060408385031215614d8d575f80fd5b614d96836149b6565b9150614b4060208401614a9f565b5f60208284031215614db4575f80fd5b6120cc826149b6565b5f805f60608486031215614dcf575f80fd5b614dd8846149b6565b9250614de660208501614a9f565b9150604084013590509250925092565b5f60208284031215614e06575f80fd5b6120cc82614a9f565b5f805f805f805f805f805f806101208d8f031215614e2b575f80fd5b614e348d6149b6565b9b50614e4260208e016149b6565b9a5060408d01359950614e5760608e01614d2c565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614e7f575f80fd5b614e8f8e60c08f01358f016149cc565b909650945067ffffffffffffffff60e08e01351115614eac575f80fd5b614ebc8e60e08f01358f016149cc565b909450925067ffffffffffffffff6101008e01351115614eda575f80fd5b614eeb8e6101008f01358f016149cc565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614f1e575f80fd5b614f288d8d6149a0565b9a50614f3660608d016149b6565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614f66575f80fd5b614f768e60e08f01358f016149cc565b90975095506101008d0135811015614f8c575f80fd5b614f9d8e6101008f01358f016149cc565b90955093506101208d0135811015614fb3575f80fd5b50614fc58d6101208e01358e016149cc565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614ff0575f80fd5b614ff9856149b6565b9350615007602086016149b6565b9250604085013567ffffffffffffffff80821115615023575f80fd5b818701915087601f830112615036575f80fd5b813581811115615044575f80fd5b8860208260051b8501011115615058575f80fd5b95989497505060200194505050565b5f805f805f6080868803121561507b575f80fd5b615084866149b6565b94506020860135935061509960408701614d2c565b9250606086013567ffffffffffffffff811115614bd9575f80fd5b5f80608083850312156150c5575f80fd5b6150cf84846149a0565b9150614b40606084016149b6565b602080825282518282018190525f9190848201906040850190845b8181101561511d5783516001600160a01b0316835292840192918401916001016150f8565b50909695505050505050565b5f805f805f805f8060c0898b031215615140575f80fd5b615149896149b6565b975061515760208a016149b6565b96506040890135955061516c60608a01614d2c565b9450608089013567ffffffffffffffff80821115615188575f80fd5b6151948c838d016149cc565b909650945060a08b01359150808211156151ac575f80fd5b506151b98b828c016149cc565b999c989b5096995094979396929594505050565b5f805f606084860312156151df575f80fd5b6151e8846149b6565b92506151f660208501614a9f565b9150615204604085016149b6565b90509250925092565b5f805f6060848603121561521f575f80fd5b61522884614a9f565b9250614de6602085016149b6565b5f805f60608486031215615248575f80fd5b615228846149b6565b5f805f60a08486031215615263575f80fd5b61526d85856149a0565b925061527b606085016149b6565b9150608084013590509250925092565b5f806040838503121561529c575f80fd5b614b3283614a9f565b5f805f80608085870312156152b8575f80fd5b6152c1856149b6565b93506152cf60208601614a9f565b925060408501359150614c3c60608601614cc4565b8151815260208083015190820152604081016118aa565b5f6020828403121561530b575f80fd5b6120cc82614cc4565b838152818360208301375f910160200190815292915050565b63ffffffff61533b82614a9f565b1682526020810135602083015267ffffffffffffffff61535d60408301614cc4565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6153b8818961532d565b86606082015260e060808201525f6153d460e083018789615367565b6001600160a01b03861660a084015282810360c08401526153f6818587615367565b9a9950505050505050505050565b60808101615412828561532d565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60208284031215615465575f80fd5b8151600381106120cc575f80fd5b80151581146131c0575f80fd5b5f60208284031215615490575f80fd5b81516120cc81615473565b5f602082840312156154ab575f80fd5b81356120cc81615473565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126154f2575f80fd5b815167ffffffffffffffff8082111561550d5761550d6154b6565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715615553576155536154b6565b8160405283815286602085880101111561556b575f80fd5b611442846020830160208901614c47565b5f6020828403121561558c575f80fd5b815167ffffffffffffffff8111156155a2575f80fd5b612744848285016154e3565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f6155dd60e08301888a615367565b82810360a08401526155f0818789615367565b905082810360c0840152615605818587615367565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156118aa576118aa615616565b5f610120615664838e61532d565b8b60608401528a60808401528960a08401528060c0840152615689818401898b615367565b905082810360e084015261569e818789615367565b9050828103610100840152615605818587615367565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b898110156157ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c3603018112615748575f80fd5b8b0163ffffffff8061575983614a9f565b16855280615768888401614a9f565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181126157a1575f80fd5b01858101903567ffffffffffffffff8111156157bb575f80fd5b8036038213156157c9575f80fd5b87898601526157db8886018284615367565b9587019594505050908401906001016156e8565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a0608083015261584a60a083018486615367565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a0604084015261587f60a08401888a615367565b8187166060850152838103608085015261589a818688615367565b9b9a5050505050505050505050565b60a081016158b7828661532d565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614b8457614b84615616565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615925575f80fd5b83018035915067ffffffffffffffff82111561593f575f80fd5b6020019150368190038213156116ae575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f60608601516159a360c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e06101208401526159d4610140840182614c69565b905082810360208401526159e9818688615367565b915050612dfe604083018415159052565b5f60408284031215615a0a575f80fd5b6040516040810181811067ffffffffffffffff82111715615a2d57615a2d6154b6565b604052825181526020928301519281019290925250919050565b5f60408284031215615a57575f80fd5b6120cc83836159fa565b5f8060608385031215615a72575f80fd5b615a7c84846159fa565b9150604083015167ffffffffffffffff811115615a97575f80fd5b615aa3858286016154e3565b9150509250929050565b606081525f615abf6060830187614c69565b8281036020840152615ad2818688615367565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615afd575f80fd5b5051919050565b606081016118aa828461532d56fea264697066735822122068baa86dcd9bd8142959c16f23b905a6a20b9dbc18984656c1ecce183a4b190464736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c63430008160033608060405234801561000f575f80fd5b506040516200196d3803806200196d83398101604081905261003091610108565b338061005557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005e816100b9565b506001600160a01b03165f908152600260205260409020805460ff1916600190811790915580546001600160801b03191668056bc75e2d6310000017905560058054602f60801b6001600160801b0391909116179055610135565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610118575f80fd5b81516001600160a01b038116811461012e575f80fd5b9392505050565b61182a80620001435f395ff3fe608060405260043610610178575f3560e01c80638ca2fb08116100d1578063d350ad251161007c578063e0ad121a11610057578063e0ad121a14610607578063f2fde38b146106ba578063fd9be522146106d9575f80fd5b8063d350ad25146104d4578063da26663a146104f3578063dbbb4155146105e8575f80fd5b8063c1723a1d116100ac578063c1723a1d1461045f578063c184032714610472578063cd68b79b14610498575f80fd5b80638ca2fb08146103b55780638da5cb5b146103f357806392807f581461041c575f80fd5b80635d6d7ccb116101315780637bc3c9ab1161010c5780637bc3c9ab146102fa5780637dc438a41461033f57806388a4124c1461035e575f80fd5b80635d6d7ccb146102765780635e280f1114610295578063715018a6146102e6575f80fd5b80633161b7f6116101615780633161b7f6146101d257806336a5beba146101f157806352a7251014610257575f80fd5b806311f2c3431461017c5780632f7cb0b4146101b1575b5f80fd5b348015610187575f80fd5b5061019e61019636600461145a565b5f9392505050565b6040519081526020015b60405180910390f35b3480156101bc575f80fd5b506101d06101cb3660046114a9565b6106f8565b005b3480156101dd575f80fd5b506101d06101ec3660046114c9565b610735565b3480156101fc575f80fd5b506040805180820182525f8082526020918201528151808301835260045467ffffffffffffffff811680835263ffffffff680100000000000000009092048216928401928352845190815291511691810191909152016101a8565b348015610262575f80fd5b506101d061027136600461155b565b610901565b348015610281575f80fd5b506101d06102903660046114a9565b61095e565b3480156102a0575f80fd5b506006546102c19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a8565b3480156102f1575f80fd5b506101d0610a23565b348015610305575f80fd5b506103196103143660046115a5565b610a36565b604080519283526fffffffffffffffffffffffffffffffff9091166020830152016101a8565b34801561034a575f80fd5b506101d06103593660046115c0565b610ad0565b348015610369575f80fd5b5061037d61037836600461145a565b610bd9565b604080519485526fffffffffffffffffffffffffffffffff9384166020860152918316918401919091521660608201526080016101a8565b3480156103c0575f80fd5b506103e36103cf3660046115d6565b60026020525f908152604090205460ff1681565b60405190151581526020016101a8565b3480156103fe575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166102c1565b348015610427575f80fd5b506005546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff90911681526020016101a8565b61037d61046d36600461145a565b610bf9565b34801561047d575f80fd5b506001546fffffffffffffffffffffffffffffffff1661043e565b3480156104a3575f80fd5b5060055461043e9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b3480156104df575f80fd5b506101d06104ee3660046114a9565b610c29565b3480156104fe575f80fd5b506105a461050d3660046115ef565b60408051606080820183525f808352602080840182905292840181905263ffffffff94851681526003835283902083519182018452546fffffffffffffffffffffffffffffffff81168252700100000000000000000000000000000000810467ffffffffffffffff169282019290925278010000000000000000000000000000000000000000000000009091049092169082015290565b6040805182516fffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff16908201529181015163ffffffff16908201526060016101a8565b3480156105f3575f80fd5b506101d06106023660046115d6565b610c74565b348015610612575f80fd5b506105a4610621366004611608565b60408051606080820183525f808352602080840182905292840181905261ffff949094168452600382529282902082519384018352546fffffffffffffffffffffffffffffffff8116845267ffffffffffffffff700100000000000000000000000000000000820416918401919091527801000000000000000000000000000000000000000000000000900463ffffffff169082015290565b3480156106c5575f80fd5b506101d06106d43660046115d6565b610cc3565b3480156106e4575f80fd5b506101d06106f3366004611621565b610d26565b610700610d3c565b600580546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055565b336107545f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146107b757335f9081526002602052604090205460ff166107b7576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156108fc57368383838181106107d4576107d4611649565b6080029190910191506108f390506107ef60208301836115ef565b6108013684900384016020850161168d565b805160208083015160409384015184516060810186526fffffffffffffffffffffffffffffffff948516815267ffffffffffffffff92831681850190815263ffffffff9283168288019081529783165f908152600390955295909320925183549551965194167fffffffffffffffff000000000000000000000000000000000000000000000000909516949094177001000000000000000000000000000000009590911694909402939093177fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000009190921602179055565b506001016107b9565b505050565b610909610d3c565b73ffffffffffffffffffffffffffffffffffffffff919091165f90815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b3361097d5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146109e057335f9081526002602052604090205460ff166109e0576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610a2b610d3c565b610a345f610d8e565b565b5f808461ffff16606e1480610a5057508461ffff1661279f145b80610a6057508461ffff16614eaf145b15610a7d57610a748561ffff168585610e02565b91509150610ac8565b8461ffff16606f1480610a9557508461ffff16612794145b80610aa557508461ffff16614ea4145b15610ab957610a748561ffff168585610f5c565b610a748561ffff168585611104565b935093915050565b33610aef5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610b5257335f9081526002602052604090205460ff16610b52576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b626107ef60208301836115ef565b5f610b7360a083016080840161171c565b90505f610b8660c0840160a085016115ef565b6004805463ffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090921667ffffffffffffffff90941693909317179091555050565b5f805f80610be88787876111d7565b935093509350935093509350935093565b5f80808080610c0c565b60405180910390fd5b610c178888886111d7565b94509450945094505093509350935093565b610c31610d3c565b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610c7c610d3c565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ccb610d3c565b73ffffffffffffffffffffffffffffffffffffffff8116610d1a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610c03565b610d2381610d8e565b50565b610d2e610d3c565b610d3882826112ad565b5050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610a34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c03565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b63ffffffff8381165f90815260036020526040812060045460055492938493849268010000000000000000900490911690606490610e669070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1689611762565b610e7091906117ac565b610e7a9190611762565b82549091505f90610ead907801000000000000000000000000000000000000000000000000900463ffffffff1688611762565b83546004549192505f9167ffffffffffffffff70010000000000000000000000000000000090920482169184918691610ee791168b6117bf565b610ef191906117bf565b610efb91906117bf565b610f059190611762565b60015485549192506fffffffffffffffffffffffffffffffff90811691610f2d911683611762565b610f3791906117ac565b935493996fffffffffffffffffffffffffffffffff9094169850929650505050505050565b5f805f610f68866113af565b63ffffffff8082165f9081526003602052604081208054939450929091610fac91780100000000000000000000000000000000000000000000000090041688611762565b610fb890610c746117bf565b82549091505f90610fe790700100000000000000000000000000000000900467ffffffffffffffff1683611762565b63ffffffff808b165f908152600360205260408120805493945092909161102b9178010000000000000000000000000000000000000000000000009004168b611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661105a8b846117bf565b6110649190611762565b60015487549192505f916fffffffffffffffffffffffffffffffff9182169161108e911687611762565b61109891906117ac565b60015485549192505f916fffffffffffffffffffffffffffffffff918216916110c2911685611762565b6110cc91906117ac565b90505f6110d982846117bf565b9554959f6fffffffffffffffffffffffffffffffff9096169e50949c50505050505050505050505050565b63ffffffff8084165f908152600360205260408120805491928392839161114891780100000000000000000000000000000000000000000000000090041687611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661117787846117bf565b6111819190611762565b60015484549192506fffffffffffffffffffffffffffffffff908116916111a9911683611762565b6111b391906117ac565b925492986fffffffffffffffffffffffffffffffff90931697509195505050505050565b5f808080806111e8617530896117d2565b90508063ffffffff16606e148061120657508063ffffffff1661279f145b8061121857508063ffffffff16614eaf145b1561123257611228818888610e02565b9095509350611281565b8063ffffffff16606f148061124e57508063ffffffff16612794145b8061126057508063ffffffff16614ea4145b1561127057611228818888610f5c565b61127b818888611104565b90955093505b505060015460055493979296506fffffffffffffffffffffffffffffffff908116955090921692509050565b73ffffffffffffffffffffffffffffffffffffffff82166112fa576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114611350576040519150601f19603f3d011682016040523d82523d5f602084013e611355565b606091505b50509050806108fc576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c03565b5f806113bd617530846117d2565b90508063ffffffff16606f036113d65750606592915050565b8063ffffffff16612794036113ef575061278992915050565b8063ffffffff16614ea4036114085750614e9992915050565b6040517ff42c33dc00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c03565b803563ffffffff81168114611455575f80fd5b919050565b5f805f6060848603121561146c575f80fd5b61147584611442565b95602085013595506040909401359392505050565b80356fffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f602082840312156114b9575f80fd5b6114c28261148a565b9392505050565b5f80602083850312156114da575f80fd5b823567ffffffffffffffff808211156114f1575f80fd5b818501915085601f830112611504575f80fd5b813581811115611512575f80fd5b8660208260071b8501011115611526575f80fd5b60209290920196919550909350505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f806040838503121561156c575f80fd5b61157583611538565b915060208301358015158114611589575f80fd5b809150509250929050565b803561ffff81168114611455575f80fd5b5f805f606084860312156115b7575f80fd5b61147584611594565b5f60c082840312156115d0575f80fd5b50919050565b5f602082840312156115e6575f80fd5b6114c282611538565b5f602082840312156115ff575f80fd5b6114c282611442565b5f60208284031215611618575f80fd5b6114c282611594565b5f8060408385031215611632575f80fd5b61163b83611538565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b803567ffffffffffffffff81168114611455575f80fd5b5f6060828403121561169d575f80fd5b6040516060810181811067ffffffffffffffff821117156116e5577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040526116f18361148a565b81526116ff60208401611676565b602082015261171060408401611442565b60408201529392505050565b5f6020828403121561172c575f80fd5b6114c282611676565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761177957611779611735565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826117ba576117ba61177f565b500490565b8082018082111561177957611779611735565b5f63ffffffff808416806117e8576117e861177f565b9216919091069291505056fea2646970667358221220057b4584fe743c800fee37c9f14cc5705300ed67e417991ba4a7213c92a3bfad64736f6c6343000816003360e060405234801562000010575f80fd5b506040516200588138038062005881833981016040819052620000339162000185565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001cf565b6001600160a01b03821660805263ffffffff811660a05283833380620000d957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000e4816200011e565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b03989098169790971790965550620001fb945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811462000182575f80fd5b50565b5f805f806080858703121562000199575f80fd5b8451620001a6816200016d565b6020860151909450620001b9816200016d565b6040860151606090960151949790965092505050565b5f60208284031215620001e0575f80fd5b815163ffffffff81168114620001f4575f80fd5b9392505050565b60805160a05160c0516156426200023f5f395f8181612458015261264f01525f50505f81816107f80152818161093b015281816116c30152611daa01526156425ff3fe608060405260043610610186575f3560e01c806361d027b3116100d1578063d15b0d491161007c578063f2fde38b11610057578063f2fde38b14610528578063faaebd2114610547578063fd9be52214610580575f80fd5b8063d15b0d49146104be578063d80e9bd9146104dd578063f0f4426014610509575f80fd5b80638da5cb5b116100ac5780638da5cb5b1461044a5780639c33abf714610473578063c14c43491461049f575f80fd5b806361d027b3146103eb5780636750cd4c14610417578063715018a614610436575f80fd5b806329460b0b1161013157806343ea4fa91161010c57806343ea4fa9146103145780634d9632001461033357806354fd4d50146103c0575f80fd5b806329460b0b1461029c57806339e3f938146102bb5780634389e58f146102e7575f80fd5b80631881d94d116101615780631881d94d14610242578063200175f71461025c57806320efd7221461027d575f80fd5b806301ffc9a7146101915780630e97289b146101c5578063188183f414610216575f80fd5b3661018d57005b5f80fd5b34801561019c575f80fd5b506101b06101ab3660046141f9565b61059f565b60405190151581526020015b60405180910390f35b3480156101d0575f80fd5b506006546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b348015610221575f80fd5b50610235610230366004614285565b610683565b6040516101bc91906142bc565b34801561024d575f80fd5b505f6040516101bc91906142ef565b348015610267575f80fd5b5061027b61027636600461432e565b61078e565b005b348015610288575f80fd5b5061027b6102973660046143ad565b610939565b3480156102a7575f80fd5b5061027b6102b63660046143fe565b610aec565b3480156102c6575f80fd5b506102da6102d5366004614285565b610ccf565b6040516101bc91906144fe565b3480156102f2575f80fd5b5061030661030136600461451f565b610e6a565b6040516101bc929190614631565b34801561031f575f80fd5b506102da61032e366004614285565b610f1f565b34801561033e575f80fd5b5061038f61034d366004614285565b600460209081525f928352604080842090915290825290205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101bc565b3480156103cb575f80fd5b5060408051600381525f60208201526002918101919091526060016101bc565b3480156103f6575f80fd5b506003546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b348015610422575f80fd5b506101b0610431366004614654565b6112d0565b348015610441575f80fd5b5061027b6112da565b348015610455575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166101f1565b34801561047e575f80fd5b5061049261048d36600461466f565b6112ed565b6040516101bc91906146b7565b3480156104aa575f80fd5b5061027b6104b93660046146c9565b6113d4565b3480156104c9575f80fd5b5061027b6104d8366004614738565b611547565b3480156104e8575f80fd5b506104fc6104f736600461451f565b6115d5565b6040516101bc919061474f565b348015610514575f80fd5b5061027b610523366004614766565b611643565b348015610533575f80fd5b5061027b610542366004614766565b611657565b348015610552575f80fd5b50610572610561366004614766565b60056020525f908152604090205481565b6040519081526020016101bc565b34801561058b575f80fd5b5061027b61059a366004614781565b6116b7565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061063157507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b8061067d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080518082019091525f808252602082015263ffffffff8083165f8181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845260048352818420948452939091528120805492939092169081900361071257825463ffffffff16610714565b805b63ffffffff1684528154640100000000900473ffffffffffffffffffffffffffffffffffffffff1680610766578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16610768565b805b73ffffffffffffffffffffffffffffffffffffffff166020860152509295945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146107df576040517f885762a700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061088391906147ab565b73ffffffffffffffffffffffffffffffffffffffff16036108d0576040517fe695d04400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108db8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109a8576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610ae657368383838181106109c5576109c56147c6565b90506020028101906109d791906147f3565b90506109ee6109e96020830183614654565b611821565b6001610a006040830160208401614654565b63ffffffff1603610a4057610a3b610a1b6020830183614654565b86610a29604085018561482f565b810190610a369190614958565b611868565b610add565b6002610a526040830160208401614654565b63ffffffff1603610a8d57610a3b610a6d6020830183614654565b86610a7b604085018561482f565b810190610a889190614b11565b611914565b610a9d6040820160208301614654565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b506001016109aa565b50505050565b610af461195d565b5f5b81811015610c915736838383818110610b1157610b116147c6565b9050602002810190610b239190614b43565b905060ff610b346020830183614b75565b610b45906040810190602001614ba7565b60ff1603610b7f576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff610b8e6020830183614b75565b610b9f906060810190604001614ba7565b60ff1603610bd9576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff610bef6020830183614b75565b610bfd906020810190614bc0565b67ffffffffffffffff1603610c3e576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5c610c4e6020830183614b75565b610c5790614bd9565b6119af565b610c885f610c6d6020840184614654565b610c7a6020850185614b75565b610c8390614bd9565b611a00565b50600101610af6565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610cc3929190614c90565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a01000000000000000000009091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610dec57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dc1575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610e5957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e2e575b505050505081525050905092915050565b604080518082019091525f80825260208201526060610e8b86868686611d93565b6006546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815292945090925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610ee990849089908990600401614e2d565b5f604051808303815f87803b158015610f00575f80fd5b505af1158015610f12573d5f803e3d5ffd5b5050505094509492505050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610fce57825467ffffffffffffffff168452610fed565b67ffffffffffffffff81811614610fed5767ffffffffffffffff811684525b815468010000000000000000900460ff166110a157825468010000000000000000900460ff161561109c578260010180548060200260200160405190810160405280929190818152602001828054801561107b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611050575b50505050506080850152825468010000000000000000900460ff1660208501525b61113d565b815468010000000000000000900460ff9081161461113d578160010180548060200260200160405190810160405280929190818152602001828054801561111c57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116110f1575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff1661120a5782546901000000000000000000900460ff161561120557826002018054806020026020016040519081016040528092919081815260200182805480156111cd57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111a2575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112be565b81546901000000000000000000900460ff908116146112be578160020180548060200260200160405190810160405280929190818152602001828054801561128657602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161125b575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112c7846119af565b50505092915050565b5f61067d82611e8a565b6112e261195d565b6112eb5f611ef0565b565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161134c576113268385610683565b60405160200161133691906142bc565b60405160208183030381529060405290506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601611393576113838385610f1f565b60405160200161133691906144fe565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610ad4565b9392505050565b6113dc61195d565b5f5b8181101561151557368383838181106113f9576113f96147c6565b60609081029290920192505f916114169150830160408401614766565b73ffffffffffffffffffffffffffffffffffffffff1603611463576040517f20e9d05a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114736040820160208301614654565b63ffffffff165f036114b1576040517f49cfac4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec906114eb8385614654565b63ffffffff16815260208101919091526040015f2061150a8282614e8f565b5050506001016113de565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610cc3929190614f27565b61154f61195d565b600254811115611599576002546040517f34084fb8000000000000000000000000000000000000000000000000000000008152610ad4918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f806116246115fd6060890160408a01614766565b61160d60808a0160608b01614654565b61161a60c08b018b61482f565b9050878a8a611f64565b604080518082019091529182526020820152925050505b949350505050565b61164b61195d565b61165481612062565b50565b61165f61195d565b73ffffffffffffffffffffffffffffffffffffffff81166116ae576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b61165481611ef0565b6116c0816120d5565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174e91906147ab565b905061175b81848461213d565b6040805133815273ffffffffffffffffffffffffffffffffffffffff851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a66698839060600161092c565b73ffffffffffffffffffffffffffffffffffffffff82166117fb576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61181c73ffffffffffffffffffffffffffffffffffffffff8416838361216d565b505050565b61182a81611e8a565b611654576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610ad4565b73ffffffffffffffffffffffffffffffffffffffff8083165f90815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc8059061092c90849086908590614fb3565b61191f828483611a00565b6119298284610f1f565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161092c9392919061500f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146112eb576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ad4565b602081015160ff161580156119c95750606081015160ff16155b15611654576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff9081161480611a1b5750602081015160ff16155b15611a625760808101515115611a5d576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae1565b806020015160ff16816080015151141580611a9d57506002611a86600160ff615076565b611a90919061508f565b60ff16816020015160ff16115b15611ad4576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae181608001516121fa565b604081015160ff9081161480611afc5750604081015160ff16155b15611b825760a08101515115611b3e576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611b7d576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c59565b806040015160ff168160a0015151141580611bbd57506002611ba6600160ff615076565b611bb0919061508f565b60ff16816040015160ff16115b15611bf4576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff161580611c155750806040015160ff16816060015160ff16115b15611c4c576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c598160a001516121fa565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a0100000000000000000000959091169490940293909317835560808401518051859493611d6f93908501920190614166565b5060a08201518051611d8b916002840191602090910190614166565b505050505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314611e17576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611e24888888612292565b90925090505f80611e55611e3e60608c0160408d01614766565b611e4e60808d0160608e01614654565b858a612359565b9092509050611e6482846150d5565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff161515806113cd5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f80611f7286866124e3565b915091505f611f828b8b846124fc565b90505f611f8f8c8c610683565b9050611fa48a825f015163ffffffff16612508565b806020015173ffffffffffffffffffffffffffffffffffffffff1663709eb6648c8e8d886040518563ffffffff1660e01b8152600401611fe794939291906150e8565b602060405180830381865afa158015612002573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120269190615132565b61203090836150d5565b91505f806120408e8e868e612550565b909250905061204f82856150d5565b9e909d509b505050505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016115ca565b335f9081526005602052604090205480821115612128576040517f34084fb80000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b335f9081526005602052604090209190039055565b73ffffffffffffffffffffffffffffffffffffffff83166121625761181c8282612691565b61181c8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261181c908490612793565b5f805b825181101561181c575f838281518110612219576122196147c6565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611612288576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b91506001016121fd565b60605f805f6122a186866124e3565b90925090505f6122ca6122ba60608a0160408b01614766565b61023060808b0160608c01614654565b90505f6122da60c08a018a61482f565b905090506122f181835f015163ffffffff16612508565b60208201516123219061230a60808c0160608d01614654565b61231a60608d0160408e01614766565b8488612832565b61232b90866150d5565b94505f806123398b86612966565b909250905061234882886150d5565b909b909a5098505050505050505050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526003549192505f9182916124809173ffffffffffffffffffffffffffffffffffffffff16907f000000000000000000000000000000000000000000000000000000000000000090849087612988565b9150915061249087878484612a33565b909550935084156124d75760035473ffffffffffffffffffffffffffffffffffffffff165f90815260056020526040812080548792906124d19084906150d5565b90915550505b50505094509492505050565b6060806124f08484612aaa565b915091505b9250929050565b5f61163b848484612b90565b8082111561254c576040517fc667af3e0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b5050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526003549192505f9182916126759173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086612c04565b9150915061268587878484612a33565b94509450505050611e81565b73ffffffffffffffffffffffffffffffffffffffff82166126de576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612734576040519150601f19603f3d011682016040523d82523d5f602084013e612739565b606091505b505090508061181c576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ad4565b5f8060205f8451602086015f885af1806127b2576040513d5f823e3d81fd5b50505f513d915081156127c95780600114156127e3565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610ae6576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ad4565b6040517f717e8a420000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff87169063717e8a429061288c9088908890889088906004016150e8565b6020604051808303815f875af11580156128a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128cc9190615132565b9050801561290e5773ffffffffffffffffffffffffffffffffffffffff86165f90815260056020526040812080548392906129089084906150d5565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff88168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b5f606061297d6005612977866151d3565b85612cab565b909590945092505050565b5f6060863b8083036129ad57604080515f808252602082019092529250925050612a29565b5f805f8761ffff1667ffffffffffffffff8111156129cd576129cd614890565b6040519080825280601f01601f1916602001820160405280156129f7576020820181803683370190505b5090505f80885160208a018c8f8ff191503d925087831115612a17578792505b828152825f602083013e909450925050505b9550959350505050565b5f80831580612a43575082516020115b15612a5257505f905080611e81565b5f83806020019051810190612a679190615132565b90508515612a7757809150612aa0565b5f6002548811612a8957600254612a8b565b875b9050808211612a9a5781612a9c565b805b9350505b5094509492505050565b6060805f80612ab98686612dfe565b9150915080515f03612b0e57604080515f808252602082019092528391612b02565b604080518082019091525f815260606020820152815260200190600190039081612adb5790505b509350935050506124f5565b6040805160018082528183019092525f91816020015b604080518082019091525f815260606020820152815260200190600190039081612b245790505090506040518060400160405280600260ff16815260200183815250815f81518110612b7857612b786147c6565b60209081029190910101529196919550909350505050565b5f80612b9c8585610f1f565b90505f83515f14612bca57835f81518110612bb957612bb96147c6565b602002602001015160200151612bda565b60405180602001604052805f8152505b90505f80612be783613034565b91509150612bf884888a85856132ce565b98975050505050505050565b5f6060853b808303612c2957604080515f808252602082019092529250925050611e81565b5f805f8761ffff1667ffffffffffffffff811115612c4957612c49614890565b6040519080825280601f01601f191660200182016040528015612c73576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115612c92578792505b828152825f602083013e90999098509650505050505050565b5f60605f612cb885613486565b90505f612cc48661356c565b805160208201206060880151604089015192935090915f612ce58284610f1f565b90505f89515f14612d1357895f81518110612d0257612d026147c6565b602002602001015160200151612d23565b60405180602001604052805f8152505b90506060612d828d846040518060a001604052808963ffffffff1681526020018c81526020018a8152602001875f015167ffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525085613589565b604051919b509150612d9a908990899060200161526e565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a0015183604051612de69392919061529c565b60405180910390a15050505050505050935093915050565b6060806002831015612e3e576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b5f612e4c60028286886152f8565b612e559161531f565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161301d57805f5b86831015612faa575f612e9e60018501858a8c6152f8565b612ea791615367565b60f81c90505f819003612ee8576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b8160ff165f03612efa57809150612f36565b8160ff168160ff1614612f3657365f612f1586868c8e6152f8565b91509150612f26898986858561385b565b9099509750859450919250829150505b60018401935f90612f4c90600301868b8d6152f8565b612f559161531f565b60f01c90505f819003612f97576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101869052602401610ad4565b8060020161ffff16850194505050612e86565b828714612fe6576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b600287111561301657365f612ffd85858b8d6152f8565b9150915061300e888885858561385b565b909850965050505b505061302b565b6130288287876139ce565b93505b50509250929050565b60608082515f0361304457915091565b5f61304e84613c49565b90508060ff166001036130fe5760408051600180825281830190925290816020015b606081526020019060019003908161307057905050925083835f8151811061309a5761309a6147c6565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506130d2846003613d6b565b825f815181106130e4576130e46147c6565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561311a5761311a614890565b604051908082528060200260200182016040528015613143578160200160208202803683370190505b5091508060ff1667ffffffffffffffff81111561316257613162614890565b60405190808252806020026020018201604052801561319557816020015b60608152602001906001900390816131805790505b5092505f8060ff5b8651831015613245576001909201915f6131b78885613dea565b6002949094019390505f6131cb8986613d6b565b90508260ff1660ff036131e057809250613236565b8260ff168160ff1614613236577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f61321e8b8784613e69565b905061322c8a8a8784613fe2565b5093909301929150815b5061ffff16929092019161319d565b8183035f613254898584613e69565b905061326288888584613fe2565b5f5b8660ff168160ff1610156132c257878160ff1681518110613287576132876147c6565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613264565b50505050505050915091565b5f80866040015187602001516132e491906153ad565b90505f5b8160ff168160ff16101561347b575f886020015160ff168260ff161061333c5760a089015160208a015161331c9084615076565b60ff168151811061332f5761332f6147c6565b602002602001015161335e565b88608001518260ff1681518110613355576133556147c6565b60200260200101515b60408051602081019091525f808252919250905b86518110156133ca578360ff16878281518110613391576133916147c6565b602002602001015160ff16036133c2578781815181106133b3576133b36147c6565b602002602001015191506133ca565b600101613372565b5089516040517f30bb3aac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416916330bb3aac91613423918d918d9087906004016153c6565b602060405180830381865afa15801561343e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134629190615132565b61346c90866150d5565b945050508060010190506132e8565b505095945050505050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001613556929190615410565b5f60605f8061359785613034565b915091505f876040015188602001516135b091906153ad565b90508060ff1667ffffffffffffffff8111156135ce576135ce614890565b6040519080825280602002602001820160405280156135f7578160200160208202803683370190505b5093505f5b8160ff168160ff161015610f12575f896020015160ff168260ff16106136505760a08a015160208b01516136309084615076565b60ff1681518110613643576136436147c6565b6020026020010151613672565b89608001518260ff1681518110613669576136696147c6565b60200260200101515b60408051602081019091525f808252919250905b85518110156136de578360ff168682815181106136a5576136a56147c6565b602002602001015160ff16036136d6578681815181106136c7576136c76147c6565b602002602001015191506136de565b600101613686565b506040517f95d376d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906395d376d790613733908d908590600401615435565b6020604051808303815f875af115801561374f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137739190615132565b878460ff1681518110613788576137886147c6565b6020026020010181815250505f878460ff16815181106137aa576137aa6147c6565b6020026020010151111561385157868360ff16815181106137cd576137cd6147c6565b60200260200101518c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461381f91906150d5565b92505081905550868360ff168151811061383b5761383b6147c6565b60200260200101518861384e91906150d5565b97505b50506001016135fc565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8616016138f5578651156138b8578684846040516020016138a4939291906154b2565b6040516020818303038152906040526138ee565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b96506139c3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff86160161398c5785511561394f5785848460405160200161393b939291906154b2565b604051602081830303815290604052613985565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b95506139c3565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff86166004820152602401610ad4565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff851601613af35760228214613a35576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613a55613a476022600286886152f8565b613a50916154d8565b61410d565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b1660248201529091506034016040516020818303038152906040529150506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff851601613c1157604282111580613b2e5750606282115b15613b65576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613b77613a476022600286886152f8565b90505f613b8b613a476042602287896152f8565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613bbe866042818a6152f8565b613bc7916154d8565b60405160086020938403029190911c9250613bf8916001916011918391889183916031916002918b918b9101615514565b60405160208183030381529060405293505050506113cd565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff85166004820152602401610ad4565b5f80805b8351821015613d27576001909101905f613c678584613dea565b905060028301925060028161ffff161015613cb1576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b5f613cbc8685613d6b565b90508060ff1660ff03613cfb576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b8316613d185760019485019460ff82161b831792505b5061ffff169190910190613c4d565b83518214613d64576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101839052602401610ad4565b5050919050565b5f613d778260016150d5565b83511015613de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401610ad4565b50016001015190565b5f613df68260026150d5565b83511015613e60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606401610ad4565b50016002015190565b606081613e7781601f6150d5565b1015613edf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ad4565b613ee982846150d5565b84511015613f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ad4565b606082158015613f715760405191505f825260208201604052613fd9565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613faa578051835260209283019201613f92565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff0361401f576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61402b8360016153ad565b90505f5b8451811015611d8b575f85828151811061404b5761404b6147c6565b602002602001015190508060ff168360ff16036140c057868281518110614074576140746147c6565b60200260200101518460405160200161408e92919061526e565b6040516020818303038152906040528783815181106140af576140af6147c6565b602002602001018190525050611d8b565b8060ff165f0361410457828683815181106140dd576140dd6147c6565b602002602001019060ff16908160ff1681525050838783815181106140af576140af6147c6565b5060010161402f565b5f6fffffffffffffffffffffffffffffffff821115614162576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526080600482015260248101839052604401610ad4565b5090565b828054828255905f5260205f209081019282156141de579160200282015b828111156141de57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614184565b506141629291505b80821115614162575f81556001016141e6565b5f60208284031215614209575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113cd575f80fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611654575f80fd5b803561426481614238565b919050565b63ffffffff81168114611654575f80fd5b803561426481614269565b5f8060408385031215614296575f80fd5b82356142a181614238565b915060208301356142b181614269565b809150509250929050565b815163ffffffff16815260208083015173ffffffffffffffffffffffffffffffffffffffff16908201526040810161067d565b6020810160038310614328577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f805f60608486031215614340575f80fd5b833561434b81614238565b9250602084013561435b81614238565b929592945050506040919091013590565b5f8083601f84011261437c575f80fd5b50813567ffffffffffffffff811115614393575f80fd5b6020830191508360208260051b85010111156124f5575f80fd5b5f805f604084860312156143bf575f80fd5b83356143ca81614238565b9250602084013567ffffffffffffffff8111156143e5575f80fd5b6143f18682870161436c565b9497909650939450505050565b5f806020838503121561440f575f80fd5b823567ffffffffffffffff811115614425575f80fd5b6144318582860161436c565b90969095509350505050565b5f815180845260208085019450602084015f5b8381101561448257815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614450565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c060808501526144dc60c085018261443d565b905060a083015184820360a08601526144f5828261443d565b95945050505050565b602081525f6113cd602083018461448d565b80358015158114614264575f80fd5b5f805f8060608587031215614532575f80fd5b843567ffffffffffffffff80821115614549575f80fd5b9086019060e0828903121561455c575f80fd5b90945060208601359080821115614571575f80fd5b818701915087601f830112614584575f80fd5b813581811115614592575f80fd5b8860208285010111156145a3575f80fd5b6020830195508094505050506145bb60408601614510565b905092959194509250565b5f5b838110156145e05781810151838201526020016145c8565b50505f910152565b5f81518084526145ff8160208601602086016145c6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f61163b60608301846145e8565b5f60208284031215614664575f80fd5b81356113cd81614269565b5f805f60608486031215614681575f80fd5b833561468c81614269565b9250602084013561469c81614238565b915060408401356146ac81614269565b809150509250925092565b602081525f6113cd60208301846145e8565b5f80602083850312156146da575f80fd5b823567ffffffffffffffff808211156146f1575f80fd5b818501915085601f830112614704575f80fd5b813581811115614712575f80fd5b866020606083028501011115614726575f80fd5b60209290920196919550909350505050565b5f60208284031215614748575f80fd5b5035919050565b81518152602080830151908201526040810161067d565b5f60208284031215614776575f80fd5b81356113cd81614238565b5f8060408385031215614792575f80fd5b823561479d81614238565b946020939093013593505050565b5f602082840312156147bb575f80fd5b81516113cd81614238565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614825575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614862575f80fd5b83018035915067ffffffffffffffff82111561487c575f80fd5b6020019150368190038213156124f5575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156148e0576148e0614890565b60405290565b60405160e0810167ffffffffffffffff811182821017156148e0576148e0614890565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561495057614950614890565b604052919050565b5f60408284031215614968575f80fd5b6040516040810181811067ffffffffffffffff8211171561498b5761498b614890565b604052823561499981614269565b815260208301356149a981614238565b60208201529392505050565b803567ffffffffffffffff81168114614264575f80fd5b803560ff81168114614264575f80fd5b5f82601f8301126149eb575f80fd5b8135602067ffffffffffffffff821115614a0757614a07614890565b8160051b614a16828201614909565b9283528481018201928281019087851115614a2f575f80fd5b83870192505b84831015614a57578235614a4881614238565b82529183019190830190614a35565b979650505050505050565b5f60c08284031215614a72575f80fd5b614a7a6148bd565b9050614a85826149b5565b8152614a93602083016149cc565b6020820152614aa4604083016149cc565b6040820152614ab5606083016149cc565b6060820152608082013567ffffffffffffffff80821115614ad4575f80fd5b614ae0858386016149dc565b608084015260a0840135915080821115614af8575f80fd5b50614b05848285016149dc565b60a08301525092915050565b5f60208284031215614b21575f80fd5b813567ffffffffffffffff811115614b37575f80fd5b61163b84828501614a62565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614825575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614825575f80fd5b5f60208284031215614bb7575f80fd5b6113cd826149cc565b5f60208284031215614bd0575f80fd5b6113cd826149b5565b5f61067d3683614a62565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c17575f80fd5b830160208101925035905067ffffffffffffffff811115614c36575f80fd5b8060051b36038213156124f5575f80fd5b8183525f60208085019450825f5b85811015614482578135614c6881614238565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614c55565b60208082528181018390525f906040808401600586901b8501820187855b88811015614e1f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112614d0f575f80fd5b8b018035614d1c81614269565b63ffffffff16855280880135368290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41018112614d58575f80fd5b8589018890520167ffffffffffffffff614d71826149b5565b1687860152614d818882016149cc565b606060ff80831682890152614d978a85016149cc565b92506080818416818a0152614dad8386016149cc565b935060a09250818416838a0152614dc681860186614be4565b60c08b81015294509150614de1905061010089018483614c47565b925050614df081840184614be4565b93509050838783030160e0880152614e09828483614c47565b978a019796505050928701925050600101614cae565b509098975050505050505050565b604081525f614e3f60408301866145e8565b8281036020840152838152838560208301375f6020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b8135614e9a81614269565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135614eda81614238565b77ffffffffffffffffffffffffffffffffffffffff000000008160201b16837fffffffffffffffff0000000000000000000000000000000000000000000000008416171784555050505050565b60208082528181018390525f90604080840186845b87811015614fa6578135614f4f81614269565b63ffffffff90811684528286013590614f6782614269565b168386015281840135614f7981614238565b73ffffffffffffffffffffffffffffffffffffffff16838501526060928301929190910190600101614f3c565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526080810161163b6040830184805163ffffffff16825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6144f5606083018461448d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561067d5761067d615049565b5f60ff8316806150c6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b8082018082111561067d5761067d615049565b63ffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201525f61512860808301846145e8565b9695505050505050565b5f60208284031215615142575f80fd5b5051919050565b5f82601f830112615158575f80fd5b813567ffffffffffffffff81111561517257615172614890565b6151a360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614909565b8181528460208386010111156151b7575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e082360312156151e3575f80fd5b6151eb6148e6565b6151f4836149b5565b81526152026020840161427a565b602082015261521360408401614259565b60408201526152246060840161427a565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff811115615256575f80fd5b61526236828601615149565b60c08301525092915050565b5f835161527f8184602088016145c6565b8351908301906152938183602088016145c6565b01949350505050565b606081525f6152ae606083018661443d565b602083820360208501526152c2828761443d565b8481036040860152855180825260208088019450909101905f5b81811015614e1f578451835293830193918301916001016152dc565b5f8085851115615306575f80fd5b83861115615312575f80fd5b5050820193919092039150565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561535f5780818660020360031b1b83161692505b505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561535f5760019490940360031b84901b1690921692915050565b60ff818116838216019081111561067d5761067d615049565b63ffffffff8516815267ffffffffffffffff8416602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201525f61512860808301846145e8565b8281525f82516154278160208501602087016145c6565b919091016020019392505050565b6040815263ffffffff83511660408201525f602084015160a0606084015261546060e08401826145e8565b90506040850151608084015267ffffffffffffffff60608601511660a084015273ffffffffffffffffffffffffffffffffffffffff60808601511660c084015282810360208401526144f581856145e8565b5f84516154c38184602089016145c6565b8201838582375f930192835250909392505050565b8035602083101561067d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b166017840152506155f4601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea264697066735822122007106a9f1a4ad0c76a6c3862b682c6be555db12b22a4209a408302fac9b0046164736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002b7c38038062002b7c833981016040819052620000339162000139565b8080816001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000072573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000098919062000168565b3380620000be57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c981620000ea565b506001600160a01b0390911660805263ffffffff1660a052506200018d9050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156200014a575f80fd5b81516001600160a01b038116811462000161575f80fd5b9392505050565b5f6020828403121562000179575f80fd5b815163ffffffff8116811462000161575f80fd5b60805160a0516129c6620001b65f395f61036301525f818161048301526104e701526129c65ff3fe608060405234801561000f575f80fd5b5060043610610115575f3560e01c806343ea4fa9116100ad5780638da5cb5b1161007d578063c40ff83511610063578063c40ff835146102b6578063e084d952146102c9578063f2fde38b146102dc575f80fd5b80638da5cb5b1461026f5780639c33abf714610296575f80fd5b806343ea4fa91461022257806354fd4d50146102355780636750cd4c14610254578063715018a614610267575f80fd5b806320efd722116100e857806320efd7221461017857806329460b0b1461018b57806339e3f9381461019e5780633c782a52146101be575f80fd5b806301ffc9a7146101195780630223536e146101415780630894edf1146101565780631881d94d14610169575b5f80fd5b61012c610127366004611bf2565b6102ef565b60405190151581526020015b60405180910390f35b61015461014f366004611c92565b61034a565b005b610154610164366004611ceb565b61035c565b60016040516101389190611d33565b610154610186366004611dd6565b6104e5565b610154610199366004611e25565b610645565b6101b16101ac366004611e77565b610828565b6040516101389190611f69565b6102026101cc366004611f7b565b600260209081525f938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff909116602083015201610138565b6101b1610230366004611e77565b6109c3565b60408051600381525f6020820152600291810191909152606001610138565b61012c610262366004611fad565b610d74565b610154610d7e565b5f5460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610138565b6102a96102a4366004611fc6565b610d91565b6040516101389190611ffd565b6101546102c4366004612067565b610e31565b61012c6102d7366004612283565b610e41565b6101546102ea3660046122cd565b610e55565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0ab7be9f000000000000000000000000000000000000000000000000000000001480610344575061034482610eb8565b92915050565b61035684848484610f4e565b50505050565b61038783837f0000000000000000000000000000000000000000000000000000000000000000611060565b5f610392848461112e565b90505f61039f858561113f565b90505f6103ac83836109c3565b90506103d08187876040516103c29291906122e6565b604051809103902086611161565b5f60405180606001604052808463ffffffff1681526020016103f2898961130a565b81526020016104018989611322565b67ffffffffffffffff908116909152604080517fa825d747000000000000000000000000000000000000000000000000000000008152835163ffffffff1660048201526020840151602482015290830151909116604482015273ffffffffffffffffffffffffffffffffffffffff8681166064830152608482018890529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b1580156104c6575f80fd5b505af11580156104d8573d5f803e3d5ffd5b5050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610554576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156103565736838383818110610571576105716122f5565b90506020028101906105839190612322565b905061059a6105956020830183611fad565b611344565b60026105ac6040830160208401611fad565b63ffffffff16036105ec576105e76105c76020830183611fad565b866105d5604085018561235e565b8101906105e291906123bf565b61138b565b61063c565b6105fc6040820160208301611fad565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610556565b61064d6113e1565b5f5b818110156107ea573683838381811061066a5761066a6122f5565b905060200281019061067c91906123f1565b905060ff61068d6020830183612423565b61069e906040810190602001612455565b60ff16036106d8576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6106e76020830183612423565b6106f8906060810190604001612455565b60ff1603610732576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6107486020830183612423565b61075690602081019061246e565b67ffffffffffffffff1603610797576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b56107a76020830183612423565b6107b090612487565b611433565b6107e15f6107c66020840184611fad565b6107d36020850185612423565b6107dc90612487565b611484565b5060010161064f565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b560828260405161081c92919061253c565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561094557602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161091a575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156109b257602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610987575b505050505081525050905092915050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610a7257825467ffffffffffffffff168452610a91565b67ffffffffffffffff81811614610a915767ffffffffffffffff811684525b815468010000000000000000900460ff16610b4557825468010000000000000000900460ff1615610b405782600101805480602002602001604051908101604052809291908181526020018280548015610b1f57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610af4575b50505050506080850152825468010000000000000000900460ff1660208501525b610be1565b815468010000000000000000900460ff90811614610be15781600101805480602002602001604051908101604052809291908181526020018280548015610bc057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b95575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610cae5782546901000000000000000000900460ff1615610ca95782600201805480602002602001604051908101604052809291908181526020018280548015610c7157602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c46575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d62565b81546901000000000000000000900460ff90811614610d625781600201805480602002602001604051908101604052809291908181526020018280548015610d2a57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610cff575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d6b84611433565b50505092915050565b5f61034482611817565b610d866113e1565b610d8f5f61187d565b565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601610df057610dca83856109c3565b604051602001610dda9190611f69565b6040516020818303038152906040529050610e2a565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610633565b9392505050565b610e3c838383611060565b505050565b5f610e4d8484846118f1565b949350505050565b610e5d6113e1565b73ffffffffffffffffffffffffffffffffffffffff8116610eac576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610633565b610eb58161187d565b50565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061034457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610344565b6040805180820182526001815267ffffffffffffffff8316602082015290516002905f90610f7f90889088906122e6565b604080519182900390912082526020808301939093529081015f9081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916110529187908790869088906126d6565b60405180910390a150505050565b6051821461109a576040517fc9bf37b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016110a684846119f1565b60ff16146110e0576040517f3a9ae7b900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff166110f18484611a12565b63ffffffff1614610e3c576040517f42d2c97e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e2a61113c8484611a21565b90565b5f61114e600d60098486612759565b61115791612780565b60e01c9392505050565b61116c8383836118f1565b6111a2576040517f4c3118d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611257575f5b836020015160ff168160ff161015611255575f83815260026020908152604080832085845290915281206080860151805191929160ff85169081106111f8576111f86122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001690556001016111b1565b505b604083015160ff1615610e3c575f5b836040015160ff168160ff161015610356575f838152600260209081526040808320858452909152812060a0860151805191929160ff85169081106112ad576112ad6122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611266565b5f611319602d600d8486612759565b610e2a916127c8565b5f611331600960018486612759565b61133a91612804565b60c01c9392505050565b61134d81611817565b610eb5576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610633565b611396828483611484565b6113a082846109c3565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516113d49392919061284a565b60405180910390a1505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610d8f576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610633565b602081015160ff1615801561144d5750606081015160ff16155b15610eb5576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff908116148061149f5750602081015160ff16155b156114e657608081015151156114e1576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611565565b806020015160ff168160800151511415806115215750600261150a600160ff6128b1565b61151491906128ca565b60ff16816020015160ff16115b15611558576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115658160800151611a30565b604081015160ff90811614806115805750604081015160ff16155b156116065760a081015151156115c2576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611601576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd565b806040015160ff168160a00151511415806116415750600261162a600160ff6128b1565b61163491906128ca565b60ff16816040015160ff16115b15611678576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806116995750806040015160ff16816060015160ff16115b156116d0576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd8160a00151611a30565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a01000000000000000000009590911694909402939093178355608084015180518594936117f393908501920190611b56565b5060a0820151805161180f916002840191602090910190611b56565b505050505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff16151580610e2a5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60208301515f9060ff161561196f575f5b846020015160ff168160ff1610156119585761194385608001518260ff1681518110611930576119306122f5565b60200260200101518585885f0151611ac8565b611950575f915050610e2a565b600101611902565b50836040015160ff165f0361196f57506001610e2a565b60608401515f5b856040015160ff168160ff1610156119e6576119b78660a001518260ff16815181106119a4576119a46122f5565b60200260200101518686895f0151611ac8565b156119de57816119c681612910565b9250508160ff165f036119de57600192505050610e2a565b600101611976565b505f95945050505050565b5f6119ff6001828486612759565b611a089161294a565b60f81c9392505050565b5f61114e6031602d8486612759565b5f611319605160318486612759565b5f805b8251811015610e3c575f838281518110611a4f57611a4f6122f5565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611611abe576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101611a33565b5f838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff16938301939093529091611b4c57508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b828054828255905f5260205f20908101928215611bce579160200282015b82811115611bce57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190611b74565b50611bda929150611bde565b5090565b5b80821115611bda575f8155600101611bdf565b5f60208284031215611c02575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e2a575f80fd5b5f8083601f840112611c41575f80fd5b50813567ffffffffffffffff811115611c58575f80fd5b602083019150836020828501011115611c6f575f80fd5b9250929050565b803567ffffffffffffffff81168114611c8d575f80fd5b919050565b5f805f8060608587031215611ca5575f80fd5b843567ffffffffffffffff811115611cbb575f80fd5b611cc787828801611c31565b90955093505060208501359150611ce060408601611c76565b905092959194509250565b5f805f60408486031215611cfd575f80fd5b833567ffffffffffffffff811115611d13575f80fd5b611d1f86828701611c31565b909790965060209590950135949350505050565b6020810160038310611d6c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b803573ffffffffffffffffffffffffffffffffffffffff81168114611c8d575f80fd5b5f8083601f840112611da5575f80fd5b50813567ffffffffffffffff811115611dbc575f80fd5b6020830191508360208260051b8501011115611c6f575f80fd5b5f805f60408486031215611de8575f80fd5b611df184611d72565b9250602084013567ffffffffffffffff811115611e0c575f80fd5b611e1886828701611d95565b9497909650939450505050565b5f8060208385031215611e36575f80fd5b823567ffffffffffffffff811115611e4c575f80fd5b611e5885828601611d95565b90969095509350505050565b803563ffffffff81168114611c8d575f80fd5b5f8060408385031215611e88575f80fd5b611e9183611d72565b9150611e9f60208401611e64565b90509250929050565b5f815180845260208085019450602084015f5b83811015611eed57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611ebb565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152611f4760c0850182611ea8565b905060a083015184820360a0860152611f608282611ea8565b95945050505050565b602081525f610e2a6020830184611ef8565b5f805f60608486031215611f8d575f80fd5b8335925060208401359150611fa460408501611d72565b90509250925092565b5f60208284031215611fbd575f80fd5b610e2a82611e64565b5f805f60608486031215611fd8575f80fd5b611fe184611e64565b9250611fef60208501611d72565b9150611fa460408501611e64565b5f602080835283518060208501525f5b818110156120295785810183015185820160400152820161200d565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f805f60408486031215612079575f80fd5b833567ffffffffffffffff81111561208f575f80fd5b61209b86828701611c31565b9094509250611fa4905060208501611e64565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156120fe576120fe6120ae565b60405290565b803560ff81168114611c8d575f80fd5b5f82601f830112612123575f80fd5b8135602067ffffffffffffffff80831115612140576121406120ae565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715612183576121836120ae565b60405293845260208187018101949081019250878511156121a2575f80fd5b6020870191505b848210156121c9576121ba82611d72565b835291830191908301906121a9565b979650505050505050565b5f60c082840312156121e4575f80fd5b6121ec6120db565b90506121f782611c76565b815261220560208301612104565b602082015261221660408301612104565b604082015261222760608301612104565b6060820152608082013567ffffffffffffffff80821115612246575f80fd5b61225285838601612114565b608084015260a084013591508082111561226a575f80fd5b5061227784828501612114565b60a08301525092915050565b5f805f60608486031215612295575f80fd5b833567ffffffffffffffff8111156122ab575f80fd5b6122b7868287016121d4565b9660208601359650604090950135949350505050565b5f602082840312156122dd575f80fd5b610e2a82611d72565b818382375f9101908152919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112612354575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612391575f80fd5b83018035915067ffffffffffffffff8211156123ab575f80fd5b602001915036819003821315611c6f575f80fd5b5f602082840312156123cf575f80fd5b813567ffffffffffffffff8111156123e5575f80fd5b610e4d848285016121d4565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612354575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612354575f80fd5b5f60208284031215612465575f80fd5b610e2a82612104565b5f6020828403121561247e575f80fd5b610e2a82611c76565b5f61034436836121d4565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124c5575f80fd5b830160208101925035905067ffffffffffffffff8111156124e4575f80fd5b8060051b3603821315611c6f575f80fd5b8183525f60208085019450825f5b85811015611eed5773ffffffffffffffffffffffffffffffffffffffff61252983611d72565b1687529582019590820190600101612503565b60208082528181018390525f906040808401600586901b8501820187855b888110156126c8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c36030181126125bb575f80fd5b8b0163ffffffff6125cb82611e64565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612601575f80fd5b8589018890520167ffffffffffffffff61261a82611c76565b168786015261262a888201612104565b606060ff808316828901526126408a8501612104565b92506080818416818a0152612656838601612104565b935060a09250818416838a015261266f81860186612492565b60c08b8101529450915061268a9050610100890184836124f5565b92505061269981840184612492565b93509050838783030160e08801526126b28284836124f5565b978a01979650505092870192505060010161255a565b509098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a08301375f60a085830101525f60a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b5f8085851115612767575f80fd5b83861115612773575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156127c05780818660040360031b1b83161692505b505092915050565b80356020831015610344577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156127c05760089490940360031b84901b1690921692915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f611f606060830184611ef8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561034457610344612884565b5f60ff831680612901577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b5f60ff82168061292257612922612884565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156127c05760019490940360031b84901b169092169291505056fea264697066735822122049ae6e8c1120ac3b04c6e78fb5426f5903144b4cb03d43aa8492006a0cbef95864736f6c6343000816003360e060405234801562000010575f80fd5b5060405162005cb238038062005cb2833981016040819052620000339162000170565b82836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000071573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000979190620001ba565b3380620000bd57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c88162000109565b506001600160a01b0391821660805263ffffffff1660a05260c092909252600655600280546001600160a01b031916939091169290921790915550620001e6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016d575f80fd5b50565b5f805f806080858703121562000184575f80fd5b8451620001918162000158565b6020860151909450620001a48162000158565b6040860151606090960151949790965092505050565b5f60208284031215620001cb575f80fd5b815163ffffffff81168114620001df575f80fd5b9392505050565b60805160a05160c051615a7e620002345f395f81816121c00152612ffa01525f610e0f01525f81816107510152818161089401528181610a0f01528181610ff80152611cee0152615a7e5ff3fe60806040526004361061019c575f3560e01c80637620fd01116100dc578063d15b0d4911610087578063f0f4426011610062578063f0f442601461055b578063f2fde38b1461057a578063faaebd2114610599578063fd9be522146105c4575f80fd5b8063d15b0d49146104f1578063d80e9bd914610510578063ea69d69d1461053c575f80fd5b80639c33abf7116100b75780639c33abf714610487578063ab750e75146104b3578063c85f4b4e146104d2575f80fd5b80637620fd01146103d65780638da5cb5b146104325780638eb0bf301461045b575f80fd5b806320efd7221161014757806354fd4d501161012257806354fd4d5014610359578063594924da146103845780636750cd4c146103a3578063715018a6146103c2575f80fd5b806320efd722146102d15780633c782a52146102f05780634389e58f1461032c575f80fd5b80631881d94d116101775780631881d94d1461024b5780631fb5122514610266578063200175f7146102b0575f80fd5b806301ffc9a7146101a7578063052368ca146101db5780630e97289b146101fa575f80fd5b366101a357005b5f80fd5b3480156101b2575f80fd5b506101c66101c1366004614622565b6105e3565b60405190151581526020015b60405180910390f35b3480156101e6575f80fd5b506101c66101f5366004614661565b6106c7565b348015610205575f80fd5b506002546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b348015610256575f80fd5b5060026040516101d291906146b5565b348015610271575f80fd5b506102a261028036600461474f565b600360209081525f938452604080852082529284528284209052825290205481565b6040519081526020016101d2565b3480156102bb575f80fd5b506102cf6102ca366004614791565b6106e7565b005b3480156102dc575f80fd5b506102cf6102eb366004614817565b610892565b3480156102fb575f80fd5b506102a261030a366004614868565b600460209081525f938452604080852082529284528284209052825290205481565b348015610337575f80fd5b5061034b6103463660046148dc565b6109f8565b6040516101d29291906149c9565b348015610364575f80fd5b5060408051600a81525f60208201526002918101919091526060016101d2565b34801561038f575f80fd5b506102cf61039e3660046149ec565b610d8d565b3480156103ae575f80fd5b506101c66103bd366004614a39565b61105c565b3480156103cd575f80fd5b506102cf611066565b3480156103e1575f80fd5b5061040660075460065473ffffffffffffffffffffffffffffffffffffffff90911691565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d2565b34801561043d575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610226565b348015610466575f80fd5b5061047a610475366004614a52565b611079565b6040516101d29190614b52565b348015610492575f80fd5b506104a66104a1366004614b64565b6114bd565b6040516101d29190614b9d565b3480156104be575f80fd5b506102cf6104cd3660046149ec565b61155d565b3480156104dd575f80fd5b506102cf6104ec366004614baf565b6115e6565b3480156104fc575f80fd5b506102cf61050b366004614bee565b6117cd565b34801561051b575f80fd5b5061052f61052a3660046148dc565b61185b565b6040516101d29190614c05565b348015610547575f80fd5b5061047a610556366004614a52565b6119c4565b348015610566575f80fd5b506102cf610575366004614c1c565b611b7e565b348015610585575f80fd5b506102cf610594366004614c1c565b611bf9565b3480156105a4575f80fd5b506102a26105b3366004614c1c565b60056020525f908152604090205481565b3480156105cf575f80fd5b506102cf6105de366004614c37565b611c5c565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061067557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b806106c157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f6106dc6106d486614e6e565b858585611dcc565b90505b949350505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610738576040517f96830d1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107dc9190614e79565b73ffffffffffffffffffffffffffffffffffffffff1603610829576040517fb77f504400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610834838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610901576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156109f2573683838381811061091e5761091e614e94565b90506020028101906109309190614ec1565b90506109476109426020830183614a39565b611fac565b60016109596040830160208401614a39565b63ffffffff1603610999576109946109746020830183614a39565b866109826040850185614efd565b81019061098f9190614f5e565b611ff3565b6109e9565b6109a96040820160208301614a39565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610903565b50505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610a7c576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6080860135610aad610a946060890160408a01614c1c565b73ffffffffffffffffffffffffffffffffffffffff1690565b14610ae4576040517fa4884a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80610af188888861203c565b90925090505f80610b22610b0b60608c0160408d01614c1c565b610b1b60808d0160608e01614a39565b858a6120c1565b9092509050610b318284614fbd565b9250610b4060c08b018b614efd565b604051610b4e929190614fd0565b604051809103902060035f8c6040016020810190610b6c9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f90812090610ba460808e0160608f01614a39565b63ffffffff1681526020808201929092526040015f90812091610bc9908e018e614fdf565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f20819055505f610ce36040518060e001604052808d5f016020810190610c0f9190614fdf565b67ffffffffffffffff1681526020018d6060016020810190610c319190614a39565b63ffffffff1681526020018d6040016020810190610c4f9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff1681526020018d6020016020810190610c7d9190614a39565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610ca960c08f018f614efd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505091525061224b565b6002546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610d3e9084908e908e9060040161503f565b5f604051808303815f87803b158015610d55575f80fd5b505af1158015610d67573d5f803e3d5ffd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610dc7576040517f864d08b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001610dd385856122b0565b60ff1614610e0d576040517f7952a82f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610e3e85856122d1565b63ffffffff1614610e7b576040517f3e96df1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e8685856122f3565b90505f610e938686612304565b90505f610ea08787612313565b73ffffffffffffffffffffffffffffffffffffffff84165f90815260036020908152604080832063ffffffff87168452825280832067ffffffffffffffff851684529091529020549091508514610f23576040517f660e96ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610f2e8484611079565b9050610f53818989604051610f44929190614fd0565b60405180910390208888612335565b5f60405180606001604052808563ffffffff168152602001610f758b8b6124ca565b815267ffffffffffffffff858116602092830152604080517fa825d747000000000000000000000000000000000000000000000000000000008152845163ffffffff16600482015292840151602484015283015116604482015273ffffffffffffffffffffffffffffffffffffffff8781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b15801561103b575f80fd5b505af115801561104d573d5f803e3d5ffd5b50505050505050505050505050565b5f6106c1826124e2565b61106e612560565b6110775f6125b2565b565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88811685526001845286852092855291909252939091208054929391929091168061113057825473ffffffffffffffffffffffffffffffffffffffff16611132565b805b73ffffffffffffffffffffffffffffffffffffffff168452815474010000000000000000000000000000000000000000900460ff1661122257825474010000000000000000000000000000000000000000900460ff161561121d57826001018054806020026020016040519081016040528092919081815260200182805480156111f057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111c5575b50505050506080850152825474010000000000000000000000000000000000000000900460ff1660208501525b6112d6565b815474010000000000000000000000000000000000000000900460ff908116146112d657816001018054806020026020016040519081016040528092919081815260200182805480156112a957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161127e575b50505050506080850152815474010000000000000000000000000000000000000000900460ff1660208501525b81547501000000000000000000000000000000000000000000900460ff166113d35782547501000000000000000000000000000000000000000000900460ff16156113ce578260020180548060200260200160405190810160405280929190818152602001828054801561137e57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611353575b505050505060a0850152825460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114ab565b81547501000000000000000000000000000000000000000000900460ff908116146114ab578160020180548060200260200160405190810160405280929190818152602001828054801561145b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611430575b505050505060a0850152815460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114b484612626565b50505092915050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161151c576114f68385611079565b6040516020016115069190614b52565b6040516020818303038152906040529050611556565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff831660048201526024016109e0565b9392505050565b8060045f8686604051611571929190614fd0565b604080519182900390912082526020808301939093529081015f90812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a95258916115d891879087908790879061506e565b60405180910390a150505050565b6115ee612560565b5f5b8181101561178f573683838381811061160b5761160b614e94565b905060200281019061161d91906150b1565b905060ff61162e60208301836150e3565b61163f906040810190602001615115565b60ff1603611679576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff61168860208301836150e3565b611699906060810190604001615115565b60ff16036116d3576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f16116e360208301836150e3565b6116ec90614e6e565b612626565b5f6116ff60208301836150e3565b61170d906020810190614c1c565b73ffffffffffffffffffffffffffffffffffffffff160361175a576040517f76df55a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117865f61176b6020840184614a39565b61177860208501856150e3565b61178190614e6e565b612677565b506001016115f0565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f3482826040516117c19291906151da565b60405180910390a15050565b6117d5612560565b60065481111561181f576006546040517fb79d12630000000000000000000000000000000000000000000000000000000081526109e0918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f8061187a8686612a25565b90925090505f6118906060890160408a01614c1c565b90505f6118a360808a0160608b01614a39565b90505f6118b08383611079565b90505f6118df82856118c96118c48f61540c565b612c5b565b8e8060c001906118d99190614efd565b8a612d2f565b82516040517fc8f8dcd100000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063c8f8dcd1906119379087908a906004016154a7565b602060405180830381865afa158015611952573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197691906154d5565b6119809082614fbd565b90505f806119908686858d612efb565b909250905061199f8284614fbd565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8084165f90815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff7401000000000000000000000000000000000000000087048116828501527501000000000000000000000000000000000000000000870481168287015276010000000000000000000000000000000000000000000090960490951660608601529182018054845181840281018401909552808552929360808601939092830182828015611b0057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611ad5575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015611b6d57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611b42575b505050505081525050905092915050565b611b86612560565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f90602001611850565b611c01612560565b73ffffffffffffffffffffffffffffffffffffffff8116611c50576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b611c59816125b2565b50565b335f9081526005602052604090205480821115611caf576040517fb79d126300000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016109e0565b335f908152600560209081526040808320858503905580517fe1758bd800000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169263e1758bd892600480820193918290030181865afa158015611d48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190614e79565b9050611d7981858561303c565b6040805133815273ffffffffffffffffffffffffffffffffffffffff861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a6669883906060016115d8565b60208401515f9060ff1615611e80575f5b856020015160ff168160ff161015611e6957611e5486608001518260ff1681518110611e0b57611e0b614e94565b60200260200101518686865f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b611e61575f9150506106df565b600101611ddd565b50846040015160ff165f03611e80575060016106df565b60608501515f5b866040015160ff168160ff161015611f2d57611efe8760a001518260ff1681518110611eb557611eb5614e94565b60200260200101518787875f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b15611f255781611f0d816154ec565b9250508160ff165f03611f25576001925050506106df565b600101611e87565b505f9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611f86576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa773ffffffffffffffffffffffffffffffffffffffff8416838361306c565b505050565b611fb5816124e2565b611c59576040517f0ff03e5400000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526024016109e0565b611ffe828483612677565b6120088284611079565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e14282848360405161088593929190615526565b60605f805f61204b8686612a25565b90925090505f61207461206460608a0160408b01614c1c565b61047560808b0160608c01614a39565b80519091506120939061208d60608b0160408c01614c1c565b856130f9565b93505f806120a2838b86613227565b90925090506120b18287614fbd565b909a909950975050505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526007549192505f9182916121e89173ffffffffffffffffffffffffffffffffffffffff16907f0000000000000000000000000000000000000000000000000000000000000000908490876132ed565b915091506121f887878484613398565b9095509350841561223f5760075473ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604081208054879290612239908490614fbd565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a01519551939861229a986001989197919673ffffffffffffffffffffffffffffffffffffffff169501615560565b6040516020818303038152906040529050919050565b5f6122be6001828486615625565b6122c79161564c565b60f81c9392505050565b5f6122e06031602d8486615625565b6122e991615694565b60e01c9392505050565b5f611556612301848461340f565b90565b5f6122e0600d60098486615625565b5f612322600960018486615625565b61232b916156da565b60c01c9392505050565b61234184848484611dcc565b612377576040517f28ca4b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084015160ff161561241e575f5b846020015160ff168160ff16101561241c575f84815260046020908152604080832086845290915281206080870151805191929160ff85169081106123cd576123cd614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9055806001019050612386565b505b604084015160ff16156109f2575f5b846040015160ff168160ff1610156124c3575f848152600460209081526040808320868452909152812060a0870151805191929160ff851690811061247457612474614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f905580600101905061242d565b5050505050565b5f6124d9602d600d8486615625565b61155691615720565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805474010000000000000000000000000000000000000000900460ff16151580611556575054760100000000000000000000000000000000000000000000900460ff16151592915050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611077576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016109e0565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff161580156126405750606081015160ff16155b15611c59576040517f9b5f9f7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806126925750602081015160ff16155b156126d957608081015151156126d4576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758565b806020015160ff16816080015151141580612714575060026126fd600160ff61575c565b6127079190615775565b60ff16816020015160ff16115b1561274b576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758816080015161341e565b604081015160ff90811614806127735750604081015160ff16155b156127f95760a081015151156127b5576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16156127f4576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d0565b806040015160ff168160a00151511415806128345750600261281d600160ff61575c565b6128279190615775565b60ff16816040015160ff16115b1561286b576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16158061288c5750806040015160ff16816060015160ff16115b156128c3576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d08160a0015161341e565b73ffffffffffffffffffffffffffffffffffffffff8381165f90815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097167fffffffffffffffffffffff000000000000000000000000000000000000000000909116177401000000000000000000000000000000000000000060ff96871602177fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000968616969096027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16959095177601000000000000000000000000000000000000000000009490951693909302939093178255608084015180518594612a0193850192019061458f565b5060a08201518051612a1d91600284019160209091019061458f565b505050505050565b6060806002831015612a65576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b5f612a736002828688615625565b612a7c916157bb565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8201612c4457805f5b86831015612bd1575f612ac560018501858a8c615625565b612ace9161564c565b60f81c90505f819003612b0f576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b8160ff165f03612b2157809150612b5d565b8160ff168160ff1614612b5d57365f612b3c86868c8e615625565b91509150612b4d89898685856134b6565b9099509750859450919250829150505b60018401935f90612b7390600301868b8d615625565b612b7c916157bb565b60f01c90505f819003612bbe576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016109e0565b8060020161ffff16850194505050612aad565b828714612c0d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b6002871115612c3d57365f612c2485858b8d615625565b91509150612c3588888585856134b6565b909850965050505b5050612c52565b612c4f828787613629565b93505b50509250929050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d830152605182015260710161229a565b5f805f612d3b846138a4565b915091505f89604001518a60200151612d549190615801565b90505f5b8160ff168160ff161015612eed575f8b6020015160ff168260ff1610612dac5760a08c015160208d0151612d8c908461575c565b60ff1681518110612d9f57612d9f614e94565b6020026020010151612dce565b8b608001518260ff1681518110612dc557612dc5614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015612e3a578360ff16868281518110612e0157612e01614e94565b602002602001015160ff1603612e3257868181518110612e2357612e23614e94565b60200260200101519150612e3a565b600101612de2565b506040517ffdb9b0f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063fdb9b0f190612e95908f908f908f908f90889060040161581a565b602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed491906154d5565b612ede9088614fbd565b96505050806001019050612d58565b505050509695505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526007549192505f9182916130209173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086613b3e565b9150915061303087878484613398565b94509450505050610d84565b73ffffffffffffffffffffffffffffffffffffffff831661306157611fa78282613be5565b611fa7838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611fa7908490613ce7565b6040517fc015bb7d0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff85169063c015bb7d9061314f90869086906004016154a7565b6020604051808303815f875af115801561316b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061318f91906154d5565b905080156131d15773ffffffffffffffffffffffffffffffffffffffff84165f90815260056020526040812080548392906131cb908490614fbd565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff86168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b5f6060816132376118c48661540c565b90505f61324b6132468761540c565b613d86565b905060606132768861326289840160408b01614c1c565b8561327060c08c018c614efd565b8b613da3565b604051919650915061328e908490849060200161587b565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a00151836040516132da939291906158a9565b60405180910390a1505050935093915050565b5f6060863b80830361331257604080515f80825260208201909252925092505061338e565b5f805f8761ffff1667ffffffffffffffff81111561333257613332614c61565b6040519080825280601f01601f19166020018201604052801561335c576020820181803683370190505b5090505f80885160208a018c8f8ff191503d92508783111561337c578792505b828152825f602083013e909450925050505b9550959350505050565b5f808315806133a8575082516020115b156133b757505f905080610d84565b5f838060200190518101906133cc91906154d5565b905085156133dc57809150613405565b5f60065488116133ee576006546133f0565b875b90508082116133ff5781613401565b805b9350505b5094509492505050565b5f6124d9605160318486615625565b5f805b8251811015611fa7575f83828151811061343d5761343d614e94565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116134ac576040517fc0762a5d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101613421565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161355057865115613513578684846040516020016134ff93929190615905565b604051602081830303815290604052613549565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b965061361e565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016135e7578551156135aa5785848460405160200161359693929190615905565b6040516020818303038152906040526135e0565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b955061361e565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016109e0565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff85160161374e5760228214613690576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6136b06136a2602260028688615625565b6136ab91615720565b614072565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050611556565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff85160161386c576042821115806137895750606282115b156137c0576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6137d26136a2602260028688615625565b90505f6137e66136a2604260228789615625565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613819866042818a615625565b61382291615720565b60405160086020938403029190911c9250613853916001916011918391889183916031916002918b918b910161592b565b6040516020818303038152906040529350505050611556565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016109e0565b60608082515f036138b457915091565b5f6138be846140cb565b90508060ff1660010361396e5760408051600180825281830190925290816020015b60608152602001906001900390816138e057905050925083835f8151811061390a5761390a614e94565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506139428460036141ed565b825f8151811061395457613954614e94565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561398a5761398a614c61565b6040519080825280602002602001820160405280156139b3578160200160208202803683370190505b5091508060ff1667ffffffffffffffff8111156139d2576139d2614c61565b604051908082528060200260200182016040528015613a0557816020015b60608152602001906001900390816139f05790505b5092505f8060ff5b8651831015613ab5576001909201915f613a27888561426c565b6002949094019390505f613a3b89866141ed565b90508260ff1660ff03613a5057809250613aa6565b8260ff168160ff1614613aa6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f613a8e8b87846142eb565b9050613a9c8a8a8784614464565b5093909301929150815b5061ffff169290920191613a0d565b8183035f613ac48985846142eb565b9050613ad288888584614464565b5f5b8660ff168160ff161015613b3257878160ff1681518110613af757613af7614e94565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613ad4565b50505050505050915091565b5f6060853b808303613b6357604080515f808252602082019092529250925050610d84565b5f805f8761ffff1667ffffffffffffffff811115613b8357613b83614c61565b6040519080825280601f01601f191660200182016040528015613bad576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115613bcc578792505b828152825f602083013e90999098509650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216613c32576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114613c88576040519150601f19603f3d011682016040523d82523d5f602084013e613c8d565b606091505b5050905080611fa7576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016109e0565b5f8060205f8451602086015f885af180613d06576040513d5f823e3d81fd5b50505f513d91508115613d1d578060011415613d37565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016109e0565b60608160a001518260c0015160405160200161229a929190615a23565b5f60605f80613db1856138a4565b915091505f8a604001518b60200151613dca9190615801565b90508060ff1667ffffffffffffffff811115613de857613de8614c61565b604051908082528060200260200182016040528015613e11578160200160208202803683370190505b5093505f5b8160ff168160ff161015614063575f8c6020015160ff168260ff1610613e6a5760a08d015160208e0151613e4a908461575c565b60ff1681518110613e5d57613e5d614e94565b6020026020010151613e8c565b8c608001518260ff1681518110613e8357613e83614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015613ef8578360ff16868281518110613ebf57613ebf614e94565b602002602001015160ff1603613ef057868181518110613ee157613ee1614e94565b60200260200101519150613ef8565b600101613ea0565b508173ffffffffffffffffffffffffffffffffffffffff1663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b8152600401613f3a95949392919061581a565b6020604051808303815f875af1158015613f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7a91906154d5565b878460ff1681518110613f8f57613f8f614e94565b6020026020010181815250505f878460ff1681518110613fb157613fb1614e94565b6020026020010151111561405957868360ff1681518110613fd457613fd4614e94565b602002602001015160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546140279190614fbd565b92505081905550868360ff168151811061404357614043614e94565b6020026020010151886140569190614fbd565b97505b5050600101613e16565b50505050965096945050505050565b5f6fffffffffffffffffffffffffffffffff8211156140c7576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016109e0565b5090565b5f80805b83518210156141a9576001909101905f6140e9858461426c565b905060028301925060028161ffff161015614133576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b5f61413e86856141ed565b90508060ff1660ff0361417d576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b831661419a5760019485019460ff82161b831792505b5061ffff1691909101906140cf565b835182146141e6576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018390526024016109e0565b5050919050565b5f6141f9826001614fbd565b83511015614263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e64730000000000000000000000000060448201526064016109e0565b50016001015190565b5f614278826002614fbd565b835110156142e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e647300000000000000000000000060448201526064016109e0565b50016002015190565b6060816142f981601f614fbd565b1015614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b61436b8284614fbd565b845110156143d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b6060821580156143f35760405191505f82526020820160405261445b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561442c578051835260209283019201614414565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff036144a1576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144ad836001615801565b90505f5b8451811015612a1d575f8582815181106144cd576144cd614e94565b602002602001015190508060ff168360ff1603614542578682815181106144f6576144f6614e94565b60200260200101518460405160200161451092919061587b565b60405160208183030381529060405287838151811061453157614531614e94565b602002602001018190525050612a1d565b8060ff165f03614586578286838151811061455f5761455f614e94565b602002602001019060ff16908160ff16815250508387838151811061453157614531614e94565b506001016144b1565b828054828255905f5260205f20908101928215614607579160200282015b8281111561460757825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906145ad565b506140c79291505b808211156140c7575f815560010161460f565b5f60208284031215614632575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611556575f80fd5b5f805f8060808587031215614674575f80fd5b843567ffffffffffffffff81111561468a575f80fd5b850160c0818803121561469b575f80fd5b966020860135965060408601359560600135945092505050565b60208101600383106146ee577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b73ffffffffffffffffffffffffffffffffffffffff81168114611c59575f80fd5b8035614720816146f4565b919050565b803563ffffffff81168114614720575f80fd5b803567ffffffffffffffff81168114614720575f80fd5b5f805f60608486031215614761575f80fd5b833561476c816146f4565b925061477a60208501614725565b915061478860408501614738565b90509250925092565b5f805f606084860312156147a3575f80fd5b83356147ae816146f4565b925060208401356147be816146f4565b929592945050506040919091013590565b5f8083601f8401126147df575f80fd5b50813567ffffffffffffffff8111156147f6575f80fd5b6020830191508360208260051b8501011115614810575f80fd5b9250929050565b5f805f60408486031215614829575f80fd5b8335614834816146f4565b9250602084013567ffffffffffffffff81111561484f575f80fd5b61485b868287016147cf565b9497909650939450505050565b5f805f6060848603121561487a575f80fd5b83359250602084013591506040840135614893816146f4565b809150509250925092565b5f8083601f8401126148ae575f80fd5b50813567ffffffffffffffff8111156148c5575f80fd5b602083019150836020828501011115614810575f80fd5b5f805f80606085870312156148ef575f80fd5b843567ffffffffffffffff80821115614906575f80fd5b9086019060e08289031215614919575f80fd5b9094506020860135908082111561492e575f80fd5b5061493b8782880161489e565b90945092505060408501358015158114614953575f80fd5b939692955090935050565b5f5b83811015614978578181015183820152602001614960565b50505f910152565b5f815180845261499781602086016020860161495e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f6106df6060830184614980565b5f805f80606085870312156149ff575f80fd5b843567ffffffffffffffff811115614a15575f80fd5b614a218782880161489e565b90989097506020870135966040013595509350505050565b5f60208284031215614a49575f80fd5b61155682614725565b5f8060408385031215614a63575f80fd5b8235614a6e816146f4565b9150614a7c60208401614725565b90509250929050565b5f815180845260208085019450602084015f5b83811015614aca57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614a98565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152614b3060c0850182614a85565b905060a083015184820360a0860152614b498282614a85565b95945050505050565b602081525f6115566020830184614ad5565b5f805f60608486031215614b76575f80fd5b614b7f84614725565b92506020840135614b8f816146f4565b915061478860408501614725565b602081525f6115566020830184614980565b5f8060208385031215614bc0575f80fd5b823567ffffffffffffffff811115614bd6575f80fd5b614be2858286016147cf565b90969095509350505050565b5f60208284031215614bfe575f80fd5b5035919050565b8151815260208083015190820152604081016106c1565b5f60208284031215614c2c575f80fd5b8135611556816146f4565b5f8060408385031215614c48575f80fd5b8235614c53816146f4565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b60405290565b60405160e0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614d2157614d21614c61565b604052919050565b803560ff81168114614720575f80fd5b5f82601f830112614d48575f80fd5b8135602067ffffffffffffffff821115614d6457614d64614c61565b8160051b614d73828201614cda565b9283528481018201928281019087851115614d8c575f80fd5b83870192505b84831015614db4578235614da5816146f4565b82529183019190830190614d92565b979650505050505050565b5f60c08284031215614dcf575f80fd5b614dd7614c8e565b9050614de282614715565b8152614df060208301614d29565b6020820152614e0160408301614d29565b6040820152614e1260608301614d29565b6060820152608082013567ffffffffffffffff80821115614e31575f80fd5b614e3d85838601614d39565b608084015260a0840135915080821115614e55575f80fd5b50614e6284828501614d39565b60a08301525092915050565b5f6106c13683614dbf565b5f60208284031215614e89575f80fd5b8151611556816146f4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614ef3575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f30575f80fd5b83018035915067ffffffffffffffff821115614f4a575f80fd5b602001915036819003821315614810575f80fd5b5f60208284031215614f6e575f80fd5b813567ffffffffffffffff811115614f84575f80fd5b6106df84828501614dbf565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156106c1576106c1614f90565b818382375f9101908152919050565b5f60208284031215614fef575f80fd5b61155682614738565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f6150516040830186614980565b8281036020840152615064818587614ff8565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f61509d608083018688614ff8565b604083019490945250606001529392505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614ef3575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614ef3575f80fd5b5f60208284031215615125575f80fd5b61155682614d29565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615161575f80fd5b830160208101925035905067ffffffffffffffff811115615180575f80fd5b8060051b3603821315614810575f80fd5b8183525f60208085019450825f5b85811015614aca5781356151b2816146f4565b73ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161519f565b60208082528181018390525f906040808401600586901b8501820187855b88811015615374577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112615259575f80fd5b8b0163ffffffff61526982614725565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4182360301811261529f575f80fd5b8589018890520180356152b1816146f4565b73ffffffffffffffffffffffffffffffffffffffff16858801526152d6818901614d29565b606060ff808316828901526152ec8a8501614d29565b92506080818416818a0152615302838601614d29565b935060a09250818416838a015261531b8186018661512e565b60c08b81015294509150615336905061010089018483615191565b9250506153458184018461512e565b93509050838783030160e088015261535e828483615191565b978a0197965050509287019250506001016151f8565b509098975050505050505050565b5f82601f830112615391575f80fd5b813567ffffffffffffffff8111156153ab576153ab614c61565b6153dc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614cda565b8181528460208386010111156153f0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0823603121561541c575f80fd5b615424614cb7565b61542d83614738565b815261543b60208401614725565b602082015261544c60408401614715565b604082015261545d60608401614725565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff81111561548f575f80fd5b61549b36828601615382565b60c08301525092915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6106df6040830184614980565b5f602082840312156154e5575f80fd5b5051919050565b5f60ff8216806154fe576154fe614f90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6106dc6060830184614ad5565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d84015250846031830152836051830152825161561181607185016020870161495e565b919091016071019998505050505050505050565b5f8085851115615633575f80fd5b8386111561563f575f80fd5b5050820193919092039150565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561568c5780818660010360031b1b83161692505b505092915050565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561568c5760049490940360031b84901b1690921692915050565b7fffffffffffffffff000000000000000000000000000000000000000000000000813581811691600885101561568c5760089490940360031b84901b1690921692915050565b803560208310156106c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b60ff82811682821603908111156106c1576106c1614f90565b5f60ff8316806157ac577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561568c5760029490940360031b84901b1690921692915050565b60ff81811683821601908111156106c1576106c1614f90565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f6158486080830187614980565b828103604084015261585b818688614ff8565b9050828103606084015261586f8185614980565b98975050505050505050565b5f835161588c81846020880161495e565b8351908301906158a081836020880161495e565b01949350505050565b606081525f6158bb6060830186614a85565b602083820360208501526158cf8287614a85565b8481036040860152855180825260208088019450909101905f5b81811015615374578451835293830193918301916001016158e9565b5f845161591681846020890161495e565b8201838582375f930192835250909392505050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b16601784015250615a0b601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b50602881019190915260480198975050505050505050565b8281525f8251615a3a81602085016020870161495e565b91909101602001939250505056fea2646970667358221220bea5f362b07accaf075edb98d71a1b4a7df6e2ebc2aacf15c6426cab5ad7691964736f6c63430008160033608060405234801562000010575f80fd5b5060405162003af938038062003af983398101604081905262000033916200045e565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b038581169190911790915584908490612ee090859085908216156200008d576200008b5f8362000220565b505b5f5b8551811015620000f157620000e77f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d357620000d36200050c565b60200260200101516200022060201b60201c565b506001016200008f565b505f5b81518110156200014257620001387fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d357620000d36200050c565b50600101620000f4565b505060016004908155600680546001600160a01b0319166001600160a01b038d169081179091556040805163416ecebf60e01b8152905191965063416ecebf95508083019450602093509091908290030181865afa158015620001a7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001cd919062000520565b6006805463ffffffff92909216600160a01b0263ffffffff60a01b199092169190911790555050600780546001600160a01b039094166001600160a01b0319909416939093179092555062000586915050565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156200027157505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620002be57600180546015906200029990600160a81b90046001600160401b03166200054c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b620002ca8383620002d6565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1662000379575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003303390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620002d0565b505f620002d0565b80516001600160a01b038116811462000398575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620003c1575f80fd5b815160206001600160401b0380831115620003e057620003e06200039d565b8260051b604051601f19603f830116810181811084821117156200040857620004086200039d565b604052938452602081870181019490810192508785111562000428575f80fd5b6020870191505b848210156200045357620004438262000381565b835291830191908301906200042f565b979650505050505050565b5f805f805f8060c0878903121562000474575f80fd5b6200047f8762000381565b95506200048f6020880162000381565b60408801519095506001600160401b0380821115620004ac575f80fd5b620004ba8a838b01620003b1565b9550620004ca60608a0162000381565b9450620004da60808a0162000381565b935060a0890151915080821115620004f0575f80fd5b50620004ff89828a01620003b1565b9150509295509295509295565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121562000531575f80fd5b815163ffffffff8116811462000545575f80fd5b9392505050565b5f6001600160401b038281166002600160401b031981016200057c57634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b61356580620005945f395ff3fe608060405260043610610242575f3560e01c8063724e78da11610131578063c358de0a116100ac578063cd88b9031161007c578063d2ae210411610062578063d2ae2104146107ae578063d547741f14610800578063e395eb5c1461081f575f80fd5b8063cd88b9031461077c578063cfc325701461079b575f80fd5b8063c358de0a146106ee578063c416aa511461070d578063c7b2370b1461073e578063c8f8dcd11461075d575f80fd5b806391d1485411610101578063a217fddf116100e7578063a217fddf14610690578063c015bb7d146106a3578063c2803b2c146106c2575f80fd5b806391d14854146105675780639e944965146105b6575f80fd5b8063724e78da146104f6578063741bef1a146105155780637cd44734146105415780638624ba0714610554575f80fd5b80633146646a116101c1578063475b6d9e116101915780635e280f11116101775780635e280f1114610467578063709eb664146104b8578063717e8a42146104d7575f80fd5b8063475b6d9e1461043d5780635c975abb14610450575f80fd5b80633146646a146103cd57806336568abe146103ec5780633927c0751461040b5780633d85ac331461041e575f80fd5b806316c38b3c1161021657806326e67a37116101fc57806326e67a37146103635780632de113761461038f5780632f2ff15d146103ae575f80fd5b806316c38b3c14610308578063248a9ca314610327575f80fd5b8062bf2e801461024657806301e336671461029957806301ffc9a7146102ba5780631095b6d7146102e9575b5f80fd5b348015610251575f80fd5b50600154610281907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b3480156102a4575f80fd5b506102b86102b336600461267b565b610868565b005b3480156102c5575f80fd5b506102d96102d43660046126b4565b6108a3565b6040519015158152602001610290565b3480156102f4575f80fd5b506102b861030336600461267b565b61093b565b348015610313575f80fd5b506102b86103223660046126f3565b610ac4565b348015610332575f80fd5b50610355610341366004612712565b5f9081526020819052604090206001015490565b604051908152602001610290565b34801561036e575f80fd5b5061038261037d36600461273c565b610ae8565b6040516102909190612755565b34801561039a575f80fd5b506102d96103a936600461279b565b610b6b565b3480156103b9575f80fd5b506102b86103c83660046127b4565b610c4c565b3480156103d8575f80fd5b506102b86103e7366004612823565b610c70565b3480156103f7575f80fd5b506102b86104063660046127b4565b610d33565b6102b86104193660046128c2565b610d65565b348015610429575f80fd5b506102b8610438366004612a3b565b610e53565b6102b861044b366004612b50565b611035565b34801561045b575f80fd5b5060015460ff166102d9565b348015610472575f80fd5b506006546104939073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610290565b3480156104c3575f80fd5b506103556104d2366004612bca565b611089565b3480156104e2575f80fd5b506103556104f1366004612bca565b6111e5565b348015610501575f80fd5b506102b861051036600461279b565b611365565b348015610520575f80fd5b506002546104939073ffffffffffffffffffffffffffffffffffffffff1681565b6102b861054f366004612c34565b611402565b6102b8610562366004612cf0565b6114e1565b348015610572575f80fd5b506102d96105813660046127b4565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156105c1575f80fd5b506106436105d036600461273c565b60056020525f90815260409020805460019091015467ffffffffffffffff8083169261ffff68010000000000000000820416926fffffffffffffffffffffffffffffffff6a0100000000000000000000909204821692918116917001000000000000000000000000000000009091041685565b6040805167ffffffffffffffff968716815261ffff90951660208601526fffffffffffffffffffffffffffffffff938416908501529116606083015291909116608082015260a001610290565b34801561069b575f80fd5b506103555f81565b3480156106ae575f80fd5b506103556106bd366004612d5e565b611616565b3480156106cd575f80fd5b506007546104939073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f9575f80fd5b506102b8610708366004612dad565b6117a3565b348015610718575f80fd5b5060015461049390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b348015610749575f80fd5b506102b861075836600461279b565b611851565b348015610768575f80fd5b50610355610777366004612d5e565b6118f5565b348015610787575f80fd5b506102b8610796366004612dc6565b611a56565b6102b86107a9366004612e45565b611a9f565b3480156107b9575f80fd5b506001546107e7907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610290565b34801561080b575f80fd5b506102b861081a3660046127b4565b611b7d565b34801561082a575f80fd5b506006546108539074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610290565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561089281611ba1565b61089d848484611bae565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061093557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561096581611ba1565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff166109e2576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610a4f575f80fd5b505af1158015610a61573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b5f610ace81611ba1565b8115610ae057610adc611be3565b5050565b610adc611c62565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610b5f57602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b305790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610bbe57505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610c33575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610c4057506001919050565b505f919050565b919050565b5f82815260208190526040902060010154610c6681611ba1565b61089d8383611cb9565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610c9a81611ba1565b610ca2611d89565b6007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610cfc90879087908790600401612ec6565b5f604051808303815f87803b158015610d13575f80fd5b505af1158015610d25573d5f803e3d5ffd5b5050505061089d6001600455565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610d8f81611ba1565b610d97611d89565b610db788610da58686611dcc565b610daf8787611dee565b8a8a8a611e06565b506007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610e1290879087908790600401612ec6565b5f604051808303815f87803b158015610e29575f80fd5b505af1158015610e3b573d5f803e3d5ffd5b50505050610e496001600455565b5050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610e7d81611ba1565b5f5b8251811015610ff9575f838281518110610e9b57610e9b612ee9565b6020908102919091018101516040805160a080820183528385015167ffffffffffffffff908116835260608086015161ffff9081168589019081526080808901516fffffffffffffffffffffffffffffffff908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff165f9081526005909a5296909820945185549851945188166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff9590921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090991690841617979097179290921695909517825551600191820180549351909516700100000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931693169290921717909155919091019050610e7f565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc53826040516110299190612f16565b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561105f81611ba1565b611067611d89565b611075878787878787611e06565b506110806001600455565b50505050505050565b5f8461109481610b6b565b6110ca576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110d2611f73565b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a1660208084018290528a831684860152606084018a905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f434ee01600000000000000000000000000000000000000000000000000000000815292936101009091049091169163434ee0169161119a918591908a908a90600401612fbc565b602060405180830381865afa1580156111b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d99190613079565b98975050505050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61121081611ba1565b8561121a81610b6b565b611250576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8b1660208084018290528b831684860152606084018b905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f566ef76200000000000000000000000000000000000000000000000000000000815292936101009091049091169163566ef76291611318918591908b908b90600401612fbc565b6020604051808303815f875af1158015611334573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113589190613079565b9998505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561138f81611ba1565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561142c81611ba1565b611434611d89565b6006546040517f91d20fa100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906391d20fa1908490349061149c908f908f908f908f908f908f908f908f90600401613090565b5f604051808303818589803b1580156114b3575f80fd5b5088f11580156114c5573d5f803e3d5ffd5b5050505050506114d56001600455565b50505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561150b81611ba1565b611513611d89565b6006545f9061155190602085019074010000000000000000000000000000000000000000900463ffffffff16611549828761279b565b898989611e06565b90505f61155e8234613128565b60065490915073ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08601358360208801611593818a61279b565b60808a01356115a560a08c018c61313b565b6115b260c08e018e61313b565b6040518a63ffffffff1660e01b81526004016115d497969594939291906131d6565b5f604051808303818589803b1580156115eb575f80fd5b5088f11580156115fd573d5f803e3d5ffd5b505050505050505061160f6001600455565b5050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61164181611ba1565b8461164b81610b6b565b611681576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528881166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f65003784000000000000000000000000000000000000000000000000000000008152929361010090910490911691636500378491611758918591908b908b90600401613239565b6020604051808303815f875af1158015611774573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117989190613079565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756117cd81611ba1565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561187b81611ba1565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611029565b5f8361190081610b6b565b611936576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528781166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f337c7a9e00000000000000000000000000000000000000000000000000000000815292936101009091049091169163337c7a9e91611a0d918591908a908a90600401613239565b602060405180830381865afa158015611a28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4c9190613079565b9695505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a8081611ba1565b63ffffffff84165f90815260036020526040902061160f9084846125a0565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611ac981611ba1565b611ad1611d89565b60065473ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08401353460208601611b03818861279b565b6080880135611b1560a08a018a61313b565b611b2260c08c018c61313b565b6040518a63ffffffff1660e01b8152600401611b4497969594939291906131d6565b5f604051808303818589803b158015611b5b575f80fd5b5088f1158015611b6d573d5f803e3d5ffd5b505050505050610adc6001600455565b5f82815260208190526040902060010154611b9781611ba1565b61089d8383611fb2565b611bab8133612077565b50565b73ffffffffffffffffffffffffffffffffffffffff8316611bd857611bd38282612101565b505050565b611bd3838383612203565b611beb611f73565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611c6a612271565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611c38565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015611d1657505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15611d755760018054601590611d4e907501000000000000000000000000000000000000000000900467ffffffffffffffff166132e9565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836122ad565b5060019392505050565b600260045403611dc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600455565b5f611ddb6031602d848661330f565b611de491613336565b60e01c9392505050565b5f611dff611dfc84846123a6565b90565b9392505050565b5f808367ffffffffffffffff811115611e2157611e2161294f565b604051908082528060200260200182016040528015611e4a578160200160208202803683370190505b5090505f5b84811015611f26575f868683818110611e6a57611e6a612ee9565b905060400201803603810190611e80919061337e565b90505f815f015173ffffffffffffffffffffffffffffffffffffffff16826020015187906040515f60405180830381858888f193505050503d805f8114611ee2576040519150601f19603f3d011682016040523d82523d5f602084013e611ee7565b606091505b5050905080848481518110611efe57611efe612ee9565b911515602092830291909101820152820151611f1a90866133d3565b94505050600101611e4f565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c3468888888888886604051611f6096959493929190613422565b60405180910390a1509695505050505050565b60015460ff1615611fb0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561200e57505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b1561206d5760018054601590612046907501000000000000000000000000000000000000000000900467ffffffffffffffff166134b2565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836123be565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610adc576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661214e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146121a4576040519150601f19603f3d011682016040523d82523d5f602084013e6121a9565b606091505b5050905080611bd3576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016120f8565b73ffffffffffffffffffffffffffffffffffffffff8216612250576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bd373ffffffffffffffffffffffffffffffffffffffff84168383612477565b60015460ff16611fb0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561233d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610935565b505f610935565b5f6123b560516031848661330f565b611dff916134f3565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610935565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251611bd393879390925f9283929183919082885af180612520576040513d5f823e3d81fd5b50505f513d91508115612537578060011415612551565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561089d576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016120f8565b828054828255905f5260205f2090601f01602090048101928215612634579160200282015f5b8382111561260657833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026125c6565b80156126325782816101000a81549060ff02191690556001016020815f01049283019260010302612606565b505b50612640929150612644565b5090565b5b80821115612640575f8155600101612645565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f805f6060848603121561268d575f80fd5b61269684612658565b92506126a460208501612658565b9150604084013590509250925092565b5f602082840312156126c4575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611dff575f80fd5b5f60208284031215612703575f80fd5b81358015158114611dff575f80fd5b5f60208284031215612722575f80fd5b5035919050565b803563ffffffff81168114610c47575f80fd5b5f6020828403121561274c575f80fd5b611dff82612729565b602080825282518282018190525f9190848201906040850190845b8181101561278f57835160ff1683529284019291840191600101612770565b50909695505050505050565b5f602082840312156127ab575f80fd5b611dff82612658565b5f80604083850312156127c5575f80fd5b823591506127d560208401612658565b90509250929050565b5f8083601f8401126127ee575f80fd5b50813567ffffffffffffffff811115612805575f80fd5b60208301915083602082850101111561281c575f80fd5b9250929050565b5f805f60408486031215612835575f80fd5b833567ffffffffffffffff81111561284b575f80fd5b612857868287016127de565b909790965060209590950135949350505050565b5f6060828403121561287b575f80fd5b50919050565b5f8083601f840112612891575f80fd5b50813567ffffffffffffffff8111156128a8575f80fd5b6020830191508360208260061b850101111561281c575f80fd5b5f805f805f805f60e0888a0312156128d8575f80fd5b6128e2898961286b565b9650606088013567ffffffffffffffff808211156128fe575f80fd5b61290a8b838c01612881565b909850965060808a0135955060a08a0135915080821115612929575f80fd5b506129368a828b016127de565b989b979a5095989497959660c090950135949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff8111828210171561299f5761299f61294f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156129ec576129ec61294f565b604052919050565b803567ffffffffffffffff81168114610c47575f80fd5b803561ffff81168114610c47575f80fd5b80356fffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f6020808385031215612a4c575f80fd5b823567ffffffffffffffff80821115612a63575f80fd5b818501915085601f830112612a76575f80fd5b813581811115612a8857612a8861294f565b612a96848260051b016129a5565b818152848101925060c0918202840185019188831115612ab4575f80fd5b938501935b82851015612b445780858a031215612acf575f80fd5b612ad761297c565b612ae086612729565b8152612aed8787016129f4565b878201526040612afe8188016129f4565b908201526060612b0f878201612a0b565b908201526080612b20878201612a1c565b9082015260a0612b31878201612a1c565b9082015284529384019392850192612ab9565b50979650505050505050565b5f805f805f8060e08789031215612b65575f80fd5b612b6f888861286b565b9550612b7d60608801612729565b9450612b8b60808801612658565b935060a087013567ffffffffffffffff811115612ba6575f80fd5b612bb289828a01612881565b979a969950949794969560c090950135949350505050565b5f805f805f60808688031215612bde575f80fd5b612be786612729565b9450612bf560208701612658565b935060408601359250606086013567ffffffffffffffff811115612c17575f80fd5b612c23888289016127de565b969995985093965092949392505050565b5f805f805f805f805f60e08a8c031215612c4c575f80fd5b612c558a612658565b9850612c6360208b01612658565b975060408a01359650612c7860608b01612a0b565b955060808a013567ffffffffffffffff80821115612c94575f80fd5b612ca08d838e016127de565b909750955060a08c0135915080821115612cb8575f80fd5b50612cc58c828d016127de565b9a9d999c50979a9699959894979660c00135949350505050565b5f610100828403121561287b575f80fd5b5f805f8060608587031215612d03575f80fd5b843567ffffffffffffffff80821115612d1a575f80fd5b612d2688838901612881565b9096509450602087013593506040870135915080821115612d45575f80fd5b50612d5287828801612cdf565b91505092959194509250565b5f805f60408486031215612d70575f80fd5b612d7984612658565b9250602084013567ffffffffffffffff811115612d94575f80fd5b612da0868287016127de565b9497909650939450505050565b5f60208284031215612dbd575f80fd5b611dff82612a0b565b5f805f60408486031215612dd8575f80fd5b612de184612729565b9250602084013567ffffffffffffffff80821115612dfd575f80fd5b818601915086601f830112612e10575f80fd5b813581811115612e1e575f80fd5b8760208260051b8501011115612e32575f80fd5b6020830194508093505050509250925092565b5f60208284031215612e55575f80fd5b813567ffffffffffffffff811115612e6b575f80fd5b612e7784828501612cdf565b949350505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f612ed9604083018587612e7f565b9050826020830152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f919060409081850190868401855b82811015612faf578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c09093019290850190600101612f32565b5091979650505050505050565b845173ffffffffffffffffffffffffffffffffffffffff908116825260208087015163ffffffff1690830152604080870151909116818301526060808701519083015260808087015161ffff90811682850152865467ffffffffffffffff80821660a08701529381901c90911660c085015260501c6fffffffffffffffffffffffffffffffff90811660e08501526001870154908116610100850152901c166101208201525f610160806101408401526117988184018587612e7f565b5f60208284031215613089575f80fd5b5051919050565b5f73ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525087604083015261ffff8716606083015260c060808301526130d960c083018688612e7f565b82810360a08401526130ec818587612e7f565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610935576109356130fb565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261316e575f80fd5b83018035915067ffffffffffffffff821115613188575f80fd5b60200191503681900382131561281c575f80fd5b63ffffffff6131aa82612729565b1682526020810135602083015267ffffffffffffffff6131cc604083016129f4565b1660408301525050565b6131e0818961319c565b73ffffffffffffffffffffffffffffffffffffffff8716606082015285608082015260e060a08201525f61321860e083018688612e7f565b82810360c084015261322b818587612e7f565b9a9950505050505050505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff8088511684528060208901511660208501525061ffff60408801511660408401526132d56060840187805467ffffffffffffffff808216845261ffff8260401c1660208501526fffffffffffffffffffffffffffffffff808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b806101008401526117988184018587612e7f565b5f67ffffffffffffffff808316818103613305576133056130fb565b6001019392505050565b5f808585111561331d575f80fd5b83861115613329575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156133765780818660040360031b1b83161692505b505092915050565b5f6040828403121561338e575f80fd5b6040516040810181811067ffffffffffffffff821117156133b1576133b161294f565b6040526133bd83612658565b8152602083013560208201528091505092915050565b80820180821115610935576109356130fb565b5f815180845260208085019450602084015f5b838110156134175781511515875295820195908201906001016133f9565b509495945050505050565b5f60e08201613431838a61319c565b63ffffffff8816606084015273ffffffffffffffffffffffffffffffffffffffff878116608085015260e060a085015290859052859061010084015f5b8781101561349f578261348085612658565b168252602084810135908301526040938401939091019060010161346e565b5084810360c08601526130ec81876133e6565b5f67ffffffffffffffff8216806134cb576134cb6130fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b80356020831015610935577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b169291505056fea2646970667358221220bf4067662d56dc81125eda238718adb88046662d26b0b352f03d651c8af9702b64736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b5038038062001b508339810160408190526200003391620000cf565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000080565b5063ffffffff1660a052670de0b6b3a7640000608052620000fb565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215620000e0575f80fd5b815163ffffffff81168114620000f4575f80fd5b9392505050565b60805160a051611a2c620001245f395f818161023a01526102ee01525f61083d0152611a2c5ff3fe608060405260043610610096575f3560e01c8063566ef76211610066578063715018a61161004c578063715018a6146101715780638da5cb5b14610185578063f2fde38b146101b8575f80fd5b8063566ef762146101335780636500378414610152575f80fd5b806301e33667146100a1578063337c7a9e146100c2578063434ee016146100f457806354fd4d5014610113575f80fd5b3661009d57005b5f80fd5b3480156100ac575f80fd5b506100c06100bb366004611549565b6101d7565b005b3480156100cd575f80fd5b506100e16100dc3660046115dd565b6101ef565b6040519081526020015b60405180910390f35b3480156100ff575f80fd5b506100e161010e366004611644565b610408565b34801561011e575f80fd5b506040805160018082526020820152016100eb565b34801561013e575f80fd5b506100e161014d366004611644565b61060a565b34801561015d575f80fd5b506100e161016c3660046115dd565b610620565b34801561017c575f80fd5b506100c061062d565b348015610190575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100eb565b3480156101c3575f80fd5b506100c06101d236600461168d565b610640565b6101df6106a3565b6101ea8383836106f5565b505050565b5f6101fd60208501856116ad565b67ffffffffffffffff165f0361026c576040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024015b60405180910390fd5b5f80806102a960018261028260208b018b6116ad565b61029260a08c0160808d016116ad565b6102a260808d0160608e016116f1565b8b8b610725565b919450925090505f8080806102c160208d018d61168d565b6040517f88a4124c00000000000000000000000000000000000000000000000000000000815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152871660248201526044810188905273ffffffffffffffffffffffffffffffffffffffff91909116906388a4124c90606401608060405180830381865afa158015610360573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610384919061170c565b929650909450925090506103ce846103a260408e0160208f0161175e565b8e60400160208101906103b5919061175e565b8e60400160208101906103c891906116f1565b856107b5565b97506103ee8784848f60400160208101906103e9919061175e565b6108ab565b6103f890896117ac565b9c9b505050505050505050505050565b5f61041660208501856116ad565b67ffffffffffffffff165f036104715761043660408601602087016117c5565b6040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610263565b5f806104c38161048f61048a60408b0160208c016117c5565b505f90565b61049c60208a018a6116ad565b6104ac60a08b0160808c016116ad565b6104bc60808c0160608d016116f1565b8a8a610725565b5090925090505f8080806104da60208c018c61168d565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61050560408e0160208f016117c5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff91909116600482015260608e0135602482015260448101889052606401608060405180830381865afa15801561056e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610592919061170c565b929650909450925090506105d6846105b060408d0160208e0161175e565b8d60800160208101906105c3919061175e565b8d60400160208101906103c891906116f1565b96506105f18684848e60800160208101906103e9919061175e565b6105fb90886117ac565b9b9a5050505050505050505050565b5f61061785858585610408565b95945050505050565b5f610617858585856101ef565b6106356106a3565b61063e5f610911565b565b6106486106a3565b73ffffffffffffffffffffffffffffffffffffffff8116610697576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610263565b6106a081610911565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461063e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610263565b73ffffffffffffffffffffffffffffffffffffffff831661071a576101ea8282610985565b6101ea838383610a87565b5f805f8061073686868d8d8b610af5565b805160608201516080830151919650935090915061075e9067ffffffffffffffff8a166117e8565b60208201516107779067ffffffffffffffff8c166117ac565b61078191906117ac565b92508060400151156107a757606461079a8460666117e8565b6107a491906117ff565b92505b509750975097945050505050565b5f8061ffff8616156107c757856107c9565b845b90505f6127106107dd61ffff84168a6117e8565b6107e791906117ff565b90506fffffffffffffffffffffffffffffffff8416158061081857506fffffffffffffffffffffffffffffffff8516155b156108265791506106179050565b5f88856fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000886fffffffffffffffffffffffffffffffff1661087991906117e8565b61088391906117ff565b61088d91906117ac565b905081811161089c578161089e565b805b9998505050505050505050565b5f8415610909576127108261ffff16846fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff16886108eb91906117e8565b6108f591906117ff565b6108ff91906117e8565b61061791906117ff565b949350505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166109d2576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610a28576040519150601f19603f3d011682016040523d82523d5f602084013e610a2d565b606091505b50509050806101ea576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610263565b73ffffffffffffffffffffffffffffffffffffffff8216610ad4576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101ea73ffffffffffffffffffffffffffffffffffffffff8416838361110f565b610b2a6040518060a001604052805f81526020015f81526020015f151581526020015f63ffffffff1681526020015f81525090565b5f859003610b63576040517e575ea100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80805b87831015610fbc575f368180610b7e8d8d8961119c565b9950919550935091508690507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff851601610ca6578a15610bf1576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610bfd85856111f1565b915091508b8015610c1f57505f816fffffffffffffffffffffffffffffffff16115b15610c5b576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff87166004820152602401610263565b806fffffffffffffffffffffffffffffffff168a5f01818151610c7e91906117ac565b905250610c9d6fffffffffffffffffffffffffffffffff8316896117ac565b97505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff851601610d48578a15610d0d576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f610d18848461126c565b509050806fffffffffffffffffffffffffffffffff16895f01818151610d3e91906117ac565b905250610fb39050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff851601610e75578915610daf576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610dbb85856112c1565b9250925050816fffffffffffffffffffffffffffffffff165f03610e0b576040517fa169d0e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806fffffffffffffffffffffffffffffffff168a5f01818151610e2e91906117ac565b90525060208a0180516fffffffffffffffffffffffffffffffff84169190610e579083906117ac565b90525060808a01805190610e6a82611837565b815250505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60ff851601610eab5760016040890152610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff851601610f7c578a610f11576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f805f610f1e868661134b565b925092509250806fffffffffffffffffffffffffffffffff168b5f01818151610f4791906117ac565b905250610f666fffffffffffffffffffffffffffffffff84168a6117ac565b9850610f72828961186e565b9750505050610fb3565b6040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b50505050610b67565b828814610ff8576040517f990776ea00000000000000000000000000000000000000000000000000000000815260048101849052602401610263565b83516fffffffffffffffffffffffffffffffff861610156110625783516040517e84ce0200000000000000000000000000000000000000000000000000000000815260048101919091526fffffffffffffffffffffffffffffffff86166024820152604401610263565b815f0361109b576040517fe5eb8f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8680156110ac575063ffffffff8116155b156110e3576040517f6cc33f0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81846020018181516110f591906117ac565b90525063ffffffff16606084015250909695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526101ea9084906113cc565b5f368160018401816111af888884611471565b6002929092019190506111c3888884611497565b94506001820161ffff821683016111dc81838b8d611892565b979b909a50969850505061ffff160193505050565b5f8060108314801590611205575060208314155b1561123c576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124784845f6114bb565b915060208314611257575f611263565b611263848460106114bb565b90509250929050565b5f80603083146112a8576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112b384845f6114bb565b9150611263848460106114e1565b5f8080601284148015906112d6575060228414155b1561130d576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61131885855f611471565b9250611326858560026114bb565b915060228414611336575f611342565b611342858560126114bb565b90509250925092565b5f808060148414801590611360575060248414155b15611397576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113a285855f6114bb565b92506113b0858560106114fb565b9150602484146113c0575f611342565b611342858560146114bb565b5f8060205f8451602086015f885af1806113eb576040513d5f823e3d81fd5b50505f513d9150811561140257806001141561141c565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561146b576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610263565b50505050565b5f6002820161148281848688611892565b61148b916118b9565b60f01c95945050505050565b5f8383838181106114aa576114aa611901565b919091013560f81c95945050505050565b5f601082016114cc81848688611892565b6114d59161192e565b60801c95945050505050565b5f602082016114f281848688611892565b61061791611974565b5f6004820161150c81848688611892565b611515916119b0565b60e01c95945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611544575f80fd5b919050565b5f805f6060848603121561155b575f80fd5b61156484611521565b925061157260208501611521565b9150604084013590509250925092565b5f60a08284031215611592575f80fd5b50919050565b5f8083601f8401126115a8575f80fd5b50813567ffffffffffffffff8111156115bf575f80fd5b6020830191508360208285010111156115d6575f80fd5b9250929050565b5f805f808486036101208112156115f2575f80fd5b60608112156115ff575f80fd5b508493506116108660608701611582565b925061010085013567ffffffffffffffff81111561162c575f80fd5b61163887828801611598565b95989497509550505050565b5f805f806101608587031215611658575f80fd5b6116628686611582565b93506116718660a08701611582565b925061014085013567ffffffffffffffff81111561162c575f80fd5b5f6020828403121561169d575f80fd5b6116a682611521565b9392505050565b5f602082840312156116bd575f80fd5b813567ffffffffffffffff811681146116a6575f80fd5b6fffffffffffffffffffffffffffffffff811681146106a0575f80fd5b5f60208284031215611701575f80fd5b81356116a6816116d4565b5f805f806080858703121561171f575f80fd5b845193506020850151611731816116d4565b6040860151909350611742816116d4565b6060860151909250611753816116d4565b939692955090935050565b5f6020828403121561176e575f80fd5b813561ffff811681146116a6575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156117bf576117bf61177f565b92915050565b5f602082840312156117d5575f80fd5b813563ffffffff811681146116a6575f80fd5b80820281158282048414176117bf576117bf61177f565b5f82611832577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118675761186761177f565b5060010190565b63ffffffff81811683821601908082111561188b5761188b61177f565b5092915050565b5f80858511156118a0575f80fd5b838611156118ac575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156118f95780818660020360031b1b83161692505b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156118f95760109490940360031b84901b1690921692915050565b803560208310156117bf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156118f95760049490940360031b84901b169092169291505056fea2646970667358221220ca9d45c801b5ccbb302dcb12078bab5268980f6f82de99fc1d137bac6c0848e664736f6c6343000816003360c060405234801562000010575f80fd5b5060405162004aae38038062004aae8339810160408190526200003391620004ca565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b03861617905582828686612ee05f865f5b8551811015620000d357620000c97f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000b557620000b5620005a5565b60200260200101516200027860201b60201c565b5060010162000071565b505f5b815181101562000124576200011a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000b557620000b5620005a5565b50600101620000d6565b505050505050806001600160401b03165f036200015457604051635f86e17760e01b815260040160405180910390fd5b806001600160401b0316825110156200019a5781516040516378e2c15760e11b81526001600160401b039182166004820152908216602482015260440160405180910390fd5b5f805b835181101562000229575f848281518110620001bd57620001bd620005a5565b60200260200101519050826001600160a01b0316816001600160a01b031611620001fa576040516305fa937f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600460205260409020805460ff19166001908117909155909250016200019d565b50509051600580546001600160401b0393841668010000000000000000026001600160801b0319909116939092169290921717905550505063ffffffff92831660805250501660a052620005f3565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015620002c957505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620003165760018054601590620002f190600160a81b90046001600160401b0316620005b9565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200032283836200032e565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff16620003d1575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003883390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000328565b505f62000328565b805163ffffffff81168114620003ed575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b0381168114620003ed575f80fd5b5f82601f8301126200042d575f80fd5b815160206001600160401b03808311156200044c576200044c620003f2565b8260051b604051601f19603f83011681018181108482111715620004745762000474620003f2565b604052938452602081870181019490810192508785111562000494575f80fd5b6020870191505b84821015620004bf57620004af8262000406565b835291830191908301906200049b565b979650505050505050565b5f805f805f805f60e0888a031215620004e1575f80fd5b620004ec88620003d9565b9650620004fc60208901620003d9565b60408901519096506001600160401b038082111562000519575f80fd5b620005278b838c016200041d565b96506200053760608b0162000406565b955060808a01519150808211156200054d575f80fd5b6200055b8b838c016200041d565b945060a08a01519150808216821462000572575f80fd5b60c08a01519193508082111562000587575f80fd5b50620005968a828b016200041d565b91505092959891949750929550565b634e487b7160e01b5f52603260045260245ffd5b5f6001600160401b038281166002600160401b03198101620005e957634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b60805160a05161447d620006315f395f818161090e0152818161253401526126c301525f818161084f0152818161173901526122a4015261447d5ff3fe6080604052600436106102c0575f3560e01c806395d376d711610170578063cd88b903116100d1578063e395eb5c11610087578063f42ed2ed11610062578063f42ed2ed1461096e578063fd62e75014610981578063fdb9b0f1146109a1575f80fd5b8063e395eb5c146108fd578063f010cb2314610930578063f3b4ebd01461094f575f80fd5b8063d2ae2104116100b7578063d2ae210414610886578063d547741f146108bf578063dafe0ccc146108de575f80fd5b8063cd88b9031461081f578063cf34c7681461083e575f80fd5b8063c358de0a11610126578063c5e193cd1161010c578063c5e193cd146107b4578063c7a823e0146107d3578063c7b2370b14610800575f80fd5b8063c358de0a14610764578063c416aa5114610783575f80fd5b8063a217fddf11610156578063a217fddf14610704578063aef18bf714610717578063b143044b14610745575f80fd5b806395d376d71461064e5780639e94496514610661575f80fd5b806330bb3aac116102255780635c975abb116101db578063741bef1a116101b6578063741bef1a1461058f5780638585c945146105e057806391d14854146105ff575f80fd5b80635c975abb1461052b578063724e78da14610542578063736c0d5b14610561575f80fd5b806336568abe1161020b57806336568abe146104ce57806352d3b871146104ed5780635553fb8e1461050c575f80fd5b806330bb3aac1461049057806331cb6105146104af575f80fd5b80631703a0181161027a57806326e67a371161026057806326e67a37146104265780632de11376146104525780632f2ff15d14610471575f80fd5b80631703a018146103a5578063248a9ca3146103ea575f80fd5b806301ffc9a7116102aa57806301ffc9a7146103385780631095b6d71461036757806316c38b3c14610386575f80fd5b8062bf2e80146102c457806301e3366714610317575b5f80fd5b3480156102cf575f80fd5b506001546102ff907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b348015610322575f80fd5b50610336610331366004613597565b6109c0565b005b348015610343575f80fd5b506103576103523660046135d5565b6109fb565b604051901515815260200161030e565b348015610372575f80fd5b50610336610381366004613597565b610a93565b348015610391575f80fd5b506103366103a036600461362a565b610c1d565b3480156103b0575f80fd5b506005546103d19068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161030e565b3480156103f5575f80fd5b50610418610404366004613643565b5f9081526020819052604090206001015490565b60405190815260200161030e565b348015610431575f80fd5b5061044561044036600461366d565b610c41565b60405161030e9190613686565b34801561045d575f80fd5b5061035761046c3660046136cc565b610cc4565b34801561047c575f80fd5b5061033661048b3660046136e7565b610da5565b34801561049b575f80fd5b506104186104aa366004613771565b610ef4565b3480156104ba575f80fd5b506103366104c93660046137e4565b611067565b3480156104d9575f80fd5b506103366104e83660046136e7565b6110aa565b3480156104f8575f80fd5b50610336610507366004613817565b6110dc565b348015610517575f80fd5b50610418610526366004613897565b6112a5565b348015610536575f80fd5b5060015460ff16610357565b34801561054d575f80fd5b5061033661055c3660046136cc565b611418565b34801561056c575f80fd5b5061035761057b3660046136cc565b60046020525f908152604090205460ff1681565b34801561059a575f80fd5b506002546105bb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030e565b3480156105eb575f80fd5b506103366105fa3660046138ea565b6114bd565b34801561060a575f80fd5b506103576106193660046136e7565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61041861065c366004613919565b611502565b34801561066c575f80fd5b506106c961067b36600461366d565b60066020525f908152604090205467ffffffffffffffff81169068010000000000000000810461ffff16906a010000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff909416845261ffff90921660208401526fffffffffffffffffffffffffffffffff169082015260600161030e565b34801561070f575f80fd5b506104185f81565b348015610722575f80fd5b50610357610731366004613643565b60076020525f908152604090205460ff1681565b348015610750575f80fd5b5061033661075f3660046139be565b6116d7565b34801561076f575f80fd5b5061033661077e3660046139fd565b6119db565b34801561078e575f80fd5b506001546105bb90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156107bf575f80fd5b506104186107ce366004613897565b611a89565b3480156107de575f80fd5b506107f26107ed366004613a16565b611c62565b60405161030e929190613a7e565b34801561080b575f80fd5b5061033661081a3660046136cc565b611e65565b34801561082a575f80fd5b50610336610839366004613ac9565b611f09565b348015610849575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161030e565b348015610891575f80fd5b506001546103d1907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b3480156108ca575f80fd5b506103366108d93660046136e7565b611f59565b3480156108e9575f80fd5b506103366108f8366004613597565b61206e565b348015610908575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b34801561093b575f80fd5b5061041861094a366004613b0b565b61219e565b34801561095a575f80fd5b50610336610969366004613b71565b6121d9565b61041861097c366004613bab565b61244a565b34801561098c575f80fd5b506005546103d19067ffffffffffffffff1681565b3480156109ac575f80fd5b506104186109bb366004613bab565b612603565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109ea81612790565b6109f584848461279a565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610a8d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610abd81612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16610b3a576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610ba7575f80fd5b505af1158015610bb9573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b5f610c2781612790565b8115610c3957610c356127cf565b5050565b610c3561284e565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cb857602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610c895790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610d1757505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610d8c575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610d9957506001919050565b505f919050565b919050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480610df357507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610e1d57507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b15610e6057303314610e5b576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eea565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb057610e5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6040517f94fdc372000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b6109f583836128a5565b5f83610eff81610cc4565b610f35576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a16602080840182905267ffffffffffffffff808c16858701528a8416606086015260055468010000000000000000900416608085015260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660a08601525f92835260069091529084902093517f7bfa20a9000000000000000000000000000000000000000000000000000000008152929361010090910490911691637bfa20a99161101c918591908a908a90600401613c97565b602060405180830381865afa158015611037573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105b9190613d63565b98975050505050505050565b3033146110a0576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c358282612975565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561110681612790565b5f5b82811015611266573684848381811061112357611123613d7a565b9050608002019050604051806060016040528082602001602081019061114991906138ea565b67ffffffffffffffff16815260200161116860608401604085016139fd565b61ffff1681526020016111816080840160608501613dc6565b6fffffffffffffffffffffffffffffffff16905260065f6111a5602085018561366d565b63ffffffff16815260208082019290925260409081015f20835181549385015194909201516fffffffffffffffffffffffffffffffff166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff61ffff90951668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941667ffffffffffffffff90931692909217929092179290921691909117905550600101611108565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051611298929190613ddf565b60405180910390a1505050565b5f816112b081610cc4565b6112e6576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808a16602080850182905267ffffffffffffffff808b168688015289851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517f7bfa20a9000000000000000000000000000000000000000000000000000000008152939461010090920490921692637bfa20a9926113ce928692600401613edd565b602060405180830381865afa1580156113e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140d9190613d63565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561144281612790565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146114f6576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ff81612b73565b50565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61152d81612790565b61153d60a08601608087016136cc565b61154681610cc4565b61157c576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810190915260025473ffffffffffffffffffffffffffffffffffffffff1681525f906020808201906115b6908a018a61366d565b63ffffffff1681526020016115d160808a0160608b016138ea565b67ffffffffffffffff1681526020016115f060a08a0160808b016136cc565b73ffffffffffffffffffffffffffffffffffffffff908116825260055468010000000000000000900467ffffffffffffffff166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff16604090940193909352929350610100909104169063df2b057e9083906006905f90611681908d018d61366d565b63ffffffff1663ffffffff1681526020019081526020015f2089896040518563ffffffff1660e01b81526004016116bb9493929190613c97565b6020604051808303815f875af11580156113e9573d5f803e3d5ffd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561170181612790565b5f5b828110156109f5573684848381811061171e5761171e613d7a565b90506020028101906117309190613fb2565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611766602083018361366d565b63ffffffff161461177757506119d3565b4281606001351161178857506119d3565b5f6117c0611799602084018461366d565b6117a960408501602086016136cc565b6117b66040860186613fee565b866060013561219e565b90505f6117d4826107ed6080860186613fee565b50905080611817576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a15050506119d3565b5f6118366118286040860186613fee565b6118319161404f565b612c8a565b905080156118cd575f8381526007602052604090205460ff1615611896577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab9784846040516118859291906140f7565b60405180910390a1505050506119d3565b5f83815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b5f806118df60408701602088016136cc565b73ffffffffffffffffffffffffffffffffffffffff166119026040880188613fee565b6040516119109291906141bc565b5f604051808303815f865af19150503d805f8114611949576040519150601f19603f3d011682016040523d82523d5f602084013e61194e565b606091505b5091509150816119cc578215611992575f85815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516119c39291906141cb565b60405180910390a15b5050505050505b600101611703565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a0581612790565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d906020016114b1565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de611ab481612790565b82611abe81610cc4565b611af4576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808b16602080850182905267ffffffffffffffff808c16868801528a851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517fdf2b057e00000000000000000000000000000000000000000000000000000000815293946101009092049092169263df2b057e92611bdc928692600401613edd565b6020604051808303815f875af1158015611bf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c1c9190613d63565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef84604051611c4f91815260200190565b60405180910390a1505050949350505050565b6005545f908190611c8a9068010000000000000000900467ffffffffffffffff166041614210565b8314611c9b57505f90506001611e5d565b5f611cf2866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290525f90605c01604051602081830303815290604052805190602001209050919050565b90505f805b60055468010000000000000000900467ffffffffffffffff16811015611e5257365f8888611d26856041614210565b90611d32866001614227565b611d3d906041614210565b92611d4a9392919061423a565b915091505f80611d8f8785858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612d7292505050565b5090925090505f816003811115611da857611da8613a51565b14611dc0575f60019850985050505050505050611e5d565b8573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611611e06575f60029850985050505050505050611e5d565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205460ff16611e45575f60039850985050505050505050611e5d565b5093505050600101611cf7565b5060015f9350935050505b935093915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611e8f81612790565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e0906020016114b1565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611f3381612790565b63ffffffff84165f908152600360205260409020611f529084846134be565b5050505050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480611fa757507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80611fd157507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b156120145730331461200f576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612064565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb05761200f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6109f58383612dbb565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561209881612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16612115576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f07b18bde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906307b18bde906044015f604051808303815f87803b158015612182575f80fd5b505af1158015612194573d5f803e3d5ffd5b5050505050505050565b5f85858386866040516020016121b8959493929190614261565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511612216576040517f0bbaf26300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3061222760408301602084016136cc565b73ffffffffffffffffffffffffffffffffffffffff161461229d5761225260408201602083016136cc565b6040517f1ce0bfcd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610ee1565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166122d1602083018361366d565b63ffffffff1614612324576122e9602082018261366d565b6040517f2697e1c200000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610ee1565b5f612335611799602084018461366d565b90505f612349826107ed6080860186613fee565b50905080612383576040517f15ecadee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526007602052604090205460ff16156123ce576040517f9d6a45a600000000000000000000000000000000000000000000000000000000815260048101839052602401610ee1565b5f828152600760205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556109f5907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217759061243890860186613fee565b81019061244591906136cc565b6128a5565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61247581612790565b8861247f81610cc4565b6124b5576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528c811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fbbc5a33b00000000000000000000000000000000000000000000000000000000815292936101009091049091169163bbc5a33b916125b4918591908d908d908d908d906004016142d2565b6020604051808303815f875af11580156125d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f49190613d63565b9b9a5050505050505050505050565b5f8761260e81610cc4565b612644576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528b811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fd358b30000000000000000000000000000000000000000000000000000000000815292936101009091049091169163d358b30091612743918591908c908c908c908c906004016142d2565b602060405180830381865afa15801561275e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127829190613d63565b9a9950505050505050505050565b6114ff8133612e80565b73ffffffffffffffffffffffffffffffffffffffff83166127c4576127bf8282612f05565b505050565b6127bf838383613007565b6127d7613075565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6128566130b4565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612824565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561290257505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15612961576001805460159061293a907501000000000000000000000000000000000000000000900467ffffffffffffffff16614397565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836130f0565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205481151560ff9091161515036129fb576040517f58c8d2a000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201528115156024820152604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260046020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001683151517905581612a6c57600554612a679060019067ffffffffffffffff166143bd565b612a84565b600554612a849067ffffffffffffffff1660016143e5565b60055490915067ffffffffffffffff680100000000000000009091048116908216811115612af2576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808416600483015282166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff84161790556040805173ffffffffffffffffffffffffffffffffffffffff8616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610c0f565b8067ffffffffffffffff165f03612bb6576040517f5f86e17700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff908116908216811015612c15576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808316600483015283166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a23249906020016114b1565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0223536e0000000000000000000000000000000000000000000000000000000014801590612d1f57507fffffffff0000000000000000000000000000000000000000000000000000000082167fab750e750000000000000000000000000000000000000000000000000000000014155b8015610a8d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f704316e500000000000000000000000000000000000000000000000000000000141592915050565b5f805f8351604103612da9576020840151604085015160608601515f1a612d9b888285856131e9565b955095509550505050612db4565b505081515f91506002905b9250925092565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015612e1757505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b15612e765760018054601590612e4f907501000000000000000000000000000000000000000000900467ffffffffffffffff16614406565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836132dc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c35576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216612f52576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612fa8576040519150601f19603f3d011682016040523d82523d5f602084013e612fad565b606091505b50509050806127bf576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216613054576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127bf73ffffffffffffffffffffffffffffffffffffffff84168383613395565b60015460ff16156130b2576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60015460ff166130b2576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556131803390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610a8d565b505f610a8d565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561322257505f915060039050826132d2565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613273573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166132c957505f9250600191508290506132d2565b92505f91508190505b9450945094915050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610a8d565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017815282516127bf93879390925f9283929183919082885af18061343e576040513d5f823e3d81fd5b50505f513d9150811561345557806001141561346f565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ee1565b828054828255905f5260205f2090601f01602090048101928215613552579160200282015f5b8382111561352457833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026134e4565b80156135505782816101000a81549060ff02191690556001016020815f01049283019260010302613524565b505b5061355e929150613562565b5090565b5b8082111561355e575f8155600101613563565b73ffffffffffffffffffffffffffffffffffffffff811681146114ff575f80fd5b5f805f606084860312156135a9575f80fd5b83356135b481613576565b925060208401356135c481613576565b929592945050506040919091013590565b5f602082840312156135e5575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114613614575f80fd5b9392505050565b80358015158114610da0575f80fd5b5f6020828403121561363a575f80fd5b6136148261361b565b5f60208284031215613653575f80fd5b5035919050565b803563ffffffff81168114610da0575f80fd5b5f6020828403121561367d575f80fd5b6136148261365a565b602080825282518282018190525f9190848201906040850190845b818110156136c057835160ff16835292840192918401916001016136a1565b50909695505050505050565b5f602082840312156136dc575f80fd5b813561361481613576565b5f80604083850312156136f8575f80fd5b82359150602083013561370a81613576565b809150509250929050565b803567ffffffffffffffff81168114610da0575f80fd5b5f8083601f84011261373c575f80fd5b50813567ffffffffffffffff811115613753575f80fd5b60208301915083602082850101111561376a575f80fd5b9250929050565b5f805f805f60808688031215613785575f80fd5b61378e8661365a565b945061379c60208701613715565b935060408601356137ac81613576565b9250606086013567ffffffffffffffff8111156137c7575f80fd5b6137d38882890161372c565b969995985093965092949392505050565b5f80604083850312156137f5575f80fd5b823561380081613576565b915061380e6020840161361b565b90509250929050565b5f8060208385031215613828575f80fd5b823567ffffffffffffffff8082111561383f575f80fd5b818501915085601f830112613852575f80fd5b813581811115613860575f80fd5b8660208260071b8501011115613874575f80fd5b60209290920196919550909350505050565b803561ffff81168114610da0575f80fd5b5f805f80608085870312156138aa575f80fd5b6138b385613886565b93506138c160208601613886565b92506138cf60408601613715565b915060608501356138df81613576565b939692955090935050565b5f602082840312156138fa575f80fd5b61361482613715565b5f60a08284031215613913575f80fd5b50919050565b5f805f6040848603121561392b575f80fd5b833567ffffffffffffffff80821115613942575f80fd5b61394e87838801613903565b94506020860135915080821115613963575f80fd5b506139708682870161372c565b9497909650939450505050565b5f8083601f84011261398d575f80fd5b50813567ffffffffffffffff8111156139a4575f80fd5b6020830191508360208260051b850101111561376a575f80fd5b5f80602083850312156139cf575f80fd5b823567ffffffffffffffff8111156139e5575f80fd5b6139f18582860161397d565b90969095509350505050565b5f60208284031215613a0d575f80fd5b61361482613886565b5f805f60408486031215613a28575f80fd5b83359250602084013567ffffffffffffffff811115613a45575f80fd5b6139708682870161372c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b82151581526040810160048310613abc577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8260208301529392505050565b5f805f60408486031215613adb575f80fd5b613ae48461365a565b9250602084013567ffffffffffffffff811115613aff575f80fd5b6139708682870161397d565b5f805f805f60808688031215613b1f575f80fd5b613b288661365a565b94506020860135613b3881613576565b9350604086013567ffffffffffffffff811115613b53575f80fd5b613b5f8882890161372c565b96999598509660600135949350505050565b5f60208284031215613b81575f80fd5b813567ffffffffffffffff811115613b97575f80fd5b613ba384828501613903565b949350505050565b5f805f805f805f6080888a031215613bc1575f80fd5b8735613bcc81613576565b9650602088013567ffffffffffffffff80821115613be8575f80fd5b613bf48b838c0161372c565b909850965060408a0135915080821115613c0c575f80fd5b613c188b838c0161372c565b909650945060608a0135915080821115613c30575f80fd5b50613c3d8a828b0161372c565b989b979a50959850939692959293505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f610140613d0e838873ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613d4f60c08401875467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8061012084015261140d8184018587613c50565b5f60208284031215613d73575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80356fffffffffffffffffffffffffffffffff81168114610da0575f80fd5b5f60208284031215613dd6575f80fd5b61361482613da7565b60208082528181018390525f90604080840186845b87811015613e6f5763ffffffff613e0a8361365a565b16835267ffffffffffffffff613e21868401613715565b168584015261ffff613e34858401613886565b168484015260606fffffffffffffffffffffffffffffffff613e57828501613da7565b16908401526080928301929190910190600101613df4565b5090979650505050505050565b5f81518084525f5b81811015613ea057602081850181015186830182015201613e84565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f610140613f54838773ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613f9560c08401865467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b80610120840152613fa881840185613e7c565b9695505050505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613fe4575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614021575f80fd5b83018035915067ffffffffffffffff82111561403b575f80fd5b60200191503681900382131561376a575f80fd5b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561408f5780818660040360031b1b83161692505b505092915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126140ca575f80fd5b830160208101925035905067ffffffffffffffff8111156140e9575f80fd5b80360382131561376a575f80fd5b6040815263ffffffff6141098461365a565b1660408201525f602084013561411e81613576565b73ffffffffffffffffffffffffffffffffffffffff1660608301526141466040850185614097565b60a0608085015261415b60e085018284613c50565b915050606085013560a08401526141756080860186614097565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08584030160c08601526141aa838284613c50565b93505050508260208301529392505050565b818382375f9101908152919050565b828152604060208201525f613ba36040830184613e7c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610a8d57610a8d6141e3565b80820180821115610a8d57610a8d6141e3565b5f8085851115614248575f80fd5b83861115614254575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008660e01b1681527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008560601b166004820152836018820152818360388301375f9101603801908152949350505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff808a511684528060208b01511660208501525067ffffffffffffffff60408a015116604084015261ffff60608a015116606084015261436160808401895467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8060e08401526143748184018789613c50565b905082810361010084015261438a818587613c50565b9998505050505050505050565b5f67ffffffffffffffff8083168181036143b3576143b36141e3565b6001019392505050565b67ffffffffffffffff8281168282160390808211156143de576143de6141e3565b5092915050565b67ffffffffffffffff8181168382160190808211156143de576143de6141e3565b5f67ffffffffffffffff82168061441f5761441f6141e3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019291505056fea26469706673582212208293bcc557e204de553c5250d4aeaa3a84335fc59a6c7b5a242fbc34745baa1464736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002470380380620024708339810160408190526200003391620000c8565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000079565b5063ffffffff90911660a052608052620000fe565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8060408385031215620000da575f80fd5b825163ffffffff81168114620000ee575f80fd5b6020939093015192949293505050565b60805160a0516123426200012e5f395f81816107ac015261082601525f81816109120152610cb901526123425ff3fe6080604052600436106100e7575f3560e01c80638da5cb5b11610087578063de0a93c311610057578063de0a93c314610322578063df2b057e14610396578063f2fde38b146103a9578063f5ff608f146103c8575f80fd5b80638da5cb5b1461029e5780639ac23d28146102d1578063bbc5a33b146102f0578063d358b30014610303575f80fd5b806339f26dfc116100c257806339f26dfc1461022c57806354fd4d501461024b578063715018a61461026b5780637bfa20a91461027f575f80fd5b806301e33667146100f257806310b65f76146101135780632565c24514610157575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5061011161010c366004611a78565b6103e7565b005b34801561011e575f80fd5b5061014461012d366004611ac2565b63ffffffff165f9081526001602052604090205490565b6040519081526020015b60405180910390f35b348015610162575f80fd5b506101ec610171366004611ac2565b60036020525f908152604090205463ffffffff8082169167ffffffffffffffff64010000000082048116926c0100000000000000000000000083049091169174010000000000000000000000000000000000000000810482169178010000000000000000000000000000000000000000000000009091041685565b6040805163ffffffff968716815267ffffffffffffffff95861660208201529390941693830193909352831660608201529116608082015260a00161014e565b348015610237575f80fd5b50610111610246366004611b13565b6103ff565b348015610256575f80fd5b5060408051600180825260208201520161014e565b348015610276575f80fd5b506101116104af565b34801561028a575f80fd5b50610144610299366004611bae565b6104c2565b3480156102a9575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b3480156102dc575f80fd5b506101116102eb366004611c15565b61068a565b6101446102fe366004611cd2565b610747565b34801561030e575f80fd5b5061014461031d366004611cd2565b610761565b34801561032d575f80fd5b50600254604080516effffffffffffffffffffffffffffff80841682526f0100000000000000000000000000000084041660208201527e0100000000000000000000000000000000000000000000000000000000000090920461ffff169082015260600161014e565b6101446103a4366004611bae565b61099c565b3480156103b4575f80fd5b506101116103c3366004611d67565b6109b2565b3480156103d3575f80fd5b506101116103e2366004611d80565b610a15565b6103ef610a8e565b6103fa838383610ae0565b505050565b610407610a8e565b6002805461ffff9092167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6effffffffffffffffffffffffffffff9485166f01000000000000000000000000000000027fffff00000000000000000000000000000000000000000000000000000000000090941694909516939093179190911792909216179055565b6104b7610a8e565b6104c05f610b10565b565b5f6104d06020850185611e04565b67ffffffffffffffff165f03610530576104f06040860160208701611ac2565b6040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b61053a8383610b84565b505f61055e61054f60a0880160808901611e04565b67ffffffffffffffff16610c25565b90505f8061056f6020890189611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61059a60408b0160208c01611ac2565b856105a860208c018c611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa158015610617573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063b9190611e3c565b93505050915061067e828860200160208101906106589190611e8e565b61066860c08c0160a08d01611e8e565b61067860608c0160408d01611ea7565b85610c32565b98975050505050505050565b610692610a8e565b8281146106cb576040517fb54ecc3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b83811015610740578282828181106106e7576106e7611ec2565b905060a0020160035f87878581811061070257610702611ec2565b90506020020160208101906107179190611ac2565b63ffffffff16815260208101919091526040015f206107368282611efb565b50506001016106cd565b5050505050565b5f610756878787878787610761565b979650505050505050565b5f61076f6020870187611e04565b67ffffffffffffffff165f036107d9576040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152602401610527565b6107e38383610b84565b505f6107f861054f60608a0160408b01611e04565b90505f8061080960208b018b611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c7f00000000000000000000000000000000000000000000000000000000000000008561085360208e018e611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa1580156108c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e69190611e3c565b9350505091505f6108f78989610d27565b90505f6fffffffffffffffffffffffffffffffff83166109377f0000000000000000000000000000000000000000000000000000000000000000846120c4565b6109419190612108565b905061098c610950828661211b565b61096060408e0160208f01611e8e565b8e60600160208101906109739190611e8e565b8e60400160208101906109869190611ea7565b87610c32565b9c9b505050505050505050505050565b5f6109a9858585856104c2565b95945050505050565b6109ba610a8e565b73ffffffffffffffffffffffffffffffffffffffff8116610a09576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610527565b610a1281610b10565b50565b610a1d610a8e565b5f5b818110156103fa57828282818110610a3957610a39611ec2565b9050604002016020013560015f015f858585818110610a5a57610a5a611ec2565b610a709260206040909202019081019150611ac2565b63ffffffff16815260208101919091526040015f2055600101610a1f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146104c0576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610527565b73ffffffffffffffffffffffffffffffffffffffff8316610b05576103fa8282610e0f565b6103fa838383610f11565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808215610bde575f80610b99868685610f7f565b6040517f7085244b00000000000000000000000000000000000000000000000000000000815260ff851660048201529096509294508593505060249091019050610527565b808314610c1a576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610527565b5f9150505b92915050565b5f610c1f82610120610fd8565b5f8061ffff861615610c445785610c46565b845b90505f612710610c5a61ffff84168a6120c4565b610c649190612108565b90506fffffffffffffffffffffffffffffffff84161580610c9557506fffffffffffffffffffffffffffffffff8516155b15610ca35791506109a99050565b5f846fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000876fffffffffffffffffffffffffffffffff16610cf591906120c4565b610cff9190612108565b610d09908a61211b565b9050818111610d185781610d1a565b805b9998505050505050505050565b5f80610d36848461103c61124b565b6002548151919250610d5f916effffffffffffffffffffffffffffff9091169061ffff1661212e565b6effffffffffffffffffffffffffffff169150806020015115610dca5760025461271090610db3907e01000000000000000000000000000000000000000000000000000000000000900461ffff16846120c4565b610dbd9190612108565b610dc7908361211b565b91505b806040015115610e0857600254610e05906f0100000000000000000000000000000090046effffffffffffffffffffffffffffff168361211b565b91505b5092915050565b73ffffffffffffffffffffffffffffffffffffffff8216610e5c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610eb2576040519150601f19603f3d011682016040523d82523d5f602084013e610eb7565b606091505b50509050806103fa576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610527565b73ffffffffffffffffffffffffffffffffffffffff8216610f5e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103fa73ffffffffffffffffffffffffffffffffffffffff8416838361185d565b5f36816001840181610f928888846118ea565b6002830192909150610faa9089908990600301611910565b94506002820161ffff82168301610fc381838b8d612161565b979b909a50969850505061ffff160193505050565b5f80610fe56041856120c4565b9050610ff2602082612188565b1561101a57611002602082612188565b61100c908261219b565b61101790602061211b565b90505b806110278461010461211b565b611031919061211b565b610e0590602061211b565b61104860018583611934565b6110556001856002611975565b156112455763ffffffff8085165f90815260036020908152604091829020825160a0810184529054808516825267ffffffffffffffff64010000000082048116938301939093526c01000000000000000000000000810490921692810192909252740100000000000000000000000000000000000000008104831660608301527801000000000000000000000000000000000000000000000000900490911660808201528284156111a957816020015167ffffffffffffffff168467ffffffffffffffff16111561116657815160208301516103e89163ffffffff169061113c90876121ae565b61114691906121cf565b61115091906121f3565b826040015161115f9190612219565b90506111a9565b6103e8825f015163ffffffff1685846020015161118391906121ae565b61118d91906121cf565b61119791906121f3565b82604001516111a691906121ae565b90505b42826060015163ffffffff16826111c09190612219565b67ffffffffffffffff1610806111f3575060808201516111e69063ffffffff164261211b565b8167ffffffffffffffff16115b15611242576040517f0c5a8d2300000000000000000000000000000000000000000000000000000000815263ffffffff8716600482015267ffffffffffffffff82166024820152604401610527565b50505b50505050565b604080516060810182525f80825260208201819052918101829052908085818661127682600261211b565b9261128393929190612161565b61128c9161223a565b60f01c905061129c60028361211b565b915061ffff81166001146112dc576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112e760028361211b565b91505f8683876112f882600261211b565b9261130593929190612161565b61130e9161223a565b60f01c905061131e60028461211b565b92508061ffff165f0361135d576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff168352505f5b825f015161ffff168161ffff1610156115c6575f86868481811061138c5761138c611ec2565b919091013560f81c91506113a3905060018461211b565b925060ff81166001146113e2576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113ed60028461211b565b92505f8784886113fe82600261211b565b9261140b93929190612161565b6114149161223a565b60f01c905061142460028561211b565b93507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff82160161158a575f88858961146082600261211b565b9261146d93929190612161565b6114769161223a565b60f01c905061148660028661211b565b9450845f8a828b61149882600461211b565b926114a593929190612161565b6114ae91612280565b60e01c90506114be60048361211b565b91505f8b8b848181106114d3576114d3611ec2565b600192013560f81c821492506114eb9190508461211b565b92505f8c848d6114fc82600861211b565b9261150993929190612161565b611512916122c6565b60c01c90506115278383835f8f63ffffffff16565b508a925061153c91505061ffff83168761211b565b1115611574576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158261ffff82168661211b565b9450506115bc565b6040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600101611366565b508381101561181c575f8585838181106115e2576115e2611ec2565b919091013560f81c91506115f9905060018361211b565b915060ff8116600114611638576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86838761164782600261211b565b9261165493929190612161565b61165d9161223a565b60f01c905061166d60028461211b565b925061ffff81166001146116ad576040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787858181106116c0576116c0611ec2565b919091013560f81c91506116d7905060018561211b565b935060ff81166116ed576001602086015261175c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff821601611723576001604086015261175c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff82160161158a5760016020860181905260408601525b5f88858961176b82600461211b565b9261177893929190612161565b61178191612280565b60e01c905061179160048661211b565b94505f8989878181106117a6576117a6611ec2565b600192013560f81c821492506117be9190508761211b565b95505f8a878b6117cf82600861211b565b926117dc93929190612161565b6117e5916122c6565b60c01c90506117f560088861211b565b965061180883838360018d63ffffffff16565b61181360168861211b565b96505050505050505b808414611855576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526103fa9084906119a2565b5f600282016118fb81848688612161565b6119049161223a565b60f01c95945050505050565b5f83838381811061192357611923611ec2565b919091013560f81c95945050505050565b61193f838383611975565b6103fa576040517f50fae9eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8083165f90815260208590526040812054909161199a91908490611a4116565b949350505050565b5f8060205f8451602086015f885af1806119c1576040513d5f823e3d81fd5b50505f513d915081156119d85780600114156119f2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611245576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610527565b600160ff919091161b16151590565b803573ffffffffffffffffffffffffffffffffffffffff81168114611a73575f80fd5b919050565b5f805f60608486031215611a8a575f80fd5b611a9384611a50565b9250611aa160208501611a50565b9150604084013590509250925092565b63ffffffff81168114610a12575f80fd5b5f60208284031215611ad2575f80fd5b8135611add81611ab1565b9392505050565b80356effffffffffffffffffffffffffffff81168114611a73575f80fd5b803561ffff81168114611a73575f80fd5b5f805f60608486031215611b25575f80fd5b611b2e84611ae4565b9250611b3c60208501611ae4565b9150611b4a60408501611b02565b90509250925092565b5f60608284031215611b63575f80fd5b50919050565b5f8083601f840112611b79575f80fd5b50813567ffffffffffffffff811115611b90575f80fd5b602083019150836020828501011115611ba7575f80fd5b9250929050565b5f805f80848603610140811215611bc3575f80fd5b60c0811215611bd0575f80fd5b50849350611be18660c08701611b53565b925061012085013567ffffffffffffffff811115611bfd575f80fd5b611c0987828801611b69565b95989497509550505050565b5f805f8060408587031215611c28575f80fd5b843567ffffffffffffffff80821115611c3f575f80fd5b818701915087601f830112611c52575f80fd5b813581811115611c60575f80fd5b8860208260051b8501011115611c74575f80fd5b602092830196509450908601359080821115611c8e575f80fd5b818701915087601f830112611ca1575f80fd5b813581811115611caf575f80fd5b88602060a083028501011115611cc3575f80fd5b95989497505060200194505050565b5f805f805f80868803610120811215611ce9575f80fd5b6080811215611cf6575f80fd5b50869550611d078860808901611b53565b945060e087013567ffffffffffffffff80821115611d23575f80fd5b611d2f8a838b01611b69565b9096509450610100890135915080821115611d48575f80fd5b50611d5589828a01611b69565b979a9699509497509295939492505050565b5f60208284031215611d77575f80fd5b611add82611a50565b5f8060208385031215611d91575f80fd5b823567ffffffffffffffff80821115611da8575f80fd5b818501915085601f830112611dbb575f80fd5b813581811115611dc9575f80fd5b8660208260061b8501011115611ddd575f80fd5b60209290920196919550909350505050565b67ffffffffffffffff81168114610a12575f80fd5b5f60208284031215611e14575f80fd5b8135611add81611def565b6fffffffffffffffffffffffffffffffff81168114610a12575f80fd5b5f805f8060808587031215611e4f575f80fd5b845193506020850151611e6181611e1f565b6040860151909350611e7281611e1f565b6060860151909250611e8381611e1f565b939692955090935050565b5f60208284031215611e9e575f80fd5b611add82611b02565b5f60208284031215611eb7575f80fd5b8135611add81611e1f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8135610c1f81611ab1565b8135611f0681611ab1565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135611f4681611def565b6bffffffffffffffff000000008160201b16905080837fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008416171784556040850135611f9181611def565b73ffffffffffffffff0000000000000000000000008160601b169050837fffffffffffffffffffffffff000000000000000000000000000000000000000084161793508084831717855560608601359250611feb83611ab1565b77ffffffff00000000000000000000000000000000000000008360a01b167fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff8516831782171785555050505061209361204660808401611eef565b82547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1660c09190911b7bffffffff00000000000000000000000000000000000000000000000016178255565b5050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610c1f57610c1f612097565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612116576121166120db565b500490565b80820180821115610c1f57610c1f612097565b6effffffffffffffffffffffffffffff81811683821602808216919082811461215957612159612097565b505092915050565b5f808585111561216f575f80fd5b8386111561217b575f80fd5b5050820193919092039150565b5f82612196576121966120db565b500690565b81810381811115610c1f57610c1f612097565b67ffffffffffffffff828116828216039080821115610e0857610e08612097565b67ffffffffffffffff81811683821602808216919082811461215957612159612097565b5f67ffffffffffffffff8084168061220d5761220d6120db565b92169190910492915050565b67ffffffffffffffff818116838216019080821115610e0857610e08612097565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156121595760029490940360031b84901b1690921692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156121595760049490940360031b84901b1690921692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156121595760089490940360031b84901b169092169291505056fea2646970667358221220cccc97c15d4a10960156cf1d97eac992ad00f3710384385711595e0370e0871a64736f6c6343000816003360e060405234801562000010575f80fd5b5060405162001e1538038062001e15833981016040819052620000339162000172565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b62000064816200010b565b50600180546001600160a01b0319166001600160a01b0384811691909117909155811660808190525f60a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620000ca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000f09190620001af565b63ffffffff1660c052505060636003556064600455620001db565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016f575f80fd5b50565b5f806040838503121562000184575f80fd5b825162000191816200015a565b6020840151909250620001a4816200015a565b809150509250929050565b5f60208284031215620001c0575f80fd5b815163ffffffff81168114620001d4575f80fd5b9392505050565b60805160a05160c051611bf3620002225f395f6103fc01525f61036f01525f818161033c015281816106e90152818161081201528181610a5c0152610cc30152611bf35ff3fe60806040526004361061018e575f3560e01c8063715018a6116100d5578063996f79c01161007e578063dabca06311610058578063dabca0631461051f578063f2fde38b1461053e578063fd9be5221461055d57610195565b8063996f79c0146104bf578063aec336e6146104d4578063d80e9bd9146104f357610195565b80638da5cb5b116100af5780638da5cb5b146104545780638f58aa7a1461047d578063909532381461049c57610195565b8063715018a6146103d757806372607537146103eb57806372d713221461043357610195565b80634389e58f1161013757806361d027b31161011157806361d027b31461035e5780636251b637146103915780636750cd4c146103b757610195565b80634389e58f146102d357806354fd4d50146103015780635e280f111461032b57610195565b80631881d94d116101685780631881d94d1461026d5780631c7c294e14610288578063334993ff146102b457610195565b806301ffc9a7146101c75780630e97289b146101fb57806312cc947f1461024c57610195565b3661019557005b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156101d2575f80fd5b506101e66101e136600461127f565b61057c565b60405190151581526020015b60405180910390f35b348015610206575f80fd5b506001546102279073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f2565b348015610257575f80fd5b5061026b6102663660046112fc565b610614565b005b348015610278575f80fd5b5060026040516101f2919061133b565b348015610293575f80fd5b506002546102279073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102bf575f80fd5b5061026b6102ce36600461137a565b6107e7565b3480156102de575f80fd5b506102f26102ed3660046114c1565b6107fa565b6040516101f29392919061159b565b34801561030c575f80fd5b50604080515f80825260208201526002918101919091526060016101f2565b348015610336575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b348015610369575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b34801561039c575f80fd5b506103a5600181565b60405160ff90911681526020016101f2565b3480156103c2575f80fd5b506101e66103d13660046115ed565b50600190565b3480156103e2575f80fd5b5061026b610965565b3480156103f6575f80fd5b5061041e7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101f2565b34801561043e575f80fd5b50610447610978565b6040516101f29190611606565b34801561045f575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610227565b348015610488575f80fd5b5061026b610497366004611644565b610a04565b3480156104a7575f80fd5b506104b160035481565b6040519081526020016101f2565b3480156104ca575f80fd5b506104b160045481565b3480156104df575f80fd5b5061026b6104ee36600461166e565b610b5c565b3480156104fe575f80fd5b5061051261050d366004611689565b610bab565b6040516101f291906116ff565b34801561052a575f80fd5b5061026b610539366004611716565b610beb565b348015610549575f80fd5b5061026b61055836600461166e565b610c03565b348015610568575f80fd5b5061026b610577366004611644565b610c6b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061060e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff1615801590610653575060025473ffffffffffffffffffffffffffffffffffffffff163314155b1561068a576040517f70b216ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60405180606001604052806106a08585610d5b565b63ffffffff1681526020016106b58585610d7d565b81526020016106c48585610d9c565b67ffffffffffffffff169052905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a825d747826107198686610dbe565b6107238787610dcf565b604051610731929190611750565b6040805191829003822060e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168352845163ffffffff1660048401526020850151602484015293015167ffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091166064820152608481019190915260a4015f604051808303815f87803b1580156107cc575f80fd5b505af11580156107de573d5f803e3d5ffd5b50505050505050565b6107ef610dea565b600491909155600355565b604080518082019091525f80825260208201526060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461087f576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61089061088b87611776565b610e3c565b915084515f146108a0578461092a565b600580546108ad90611811565b80601f01602080910402602001604051908101604052809291908181526020018280546108d990611811565b80156109245780601f106108fb57610100808354040283529160200191610924565b820191905f5260205f20905b81548152906001019060200180831161090757829003601f168201915b50505050505b90506109368282610ea1565b6040518060400160405280600454815260200185610954575f610958565b6003545b9052969195509350915050565b61096d610dea565b6109765f610f2a565b565b6005805461098590611811565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190611811565b80156109fc5780601f106109d3576101008083540402835291602001916109fc565b820191905f5260205f20905b8154815290600101906020018083116109df57829003601f168201915b505050505081565b610a0c610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610a59576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae7919061185c565b905073ffffffffffffffffffffffffffffffffffffffff8116610b36576040517f54c1781b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff82168484610f9e565b505050565b610b64610dea565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b604080518082019091525f80825260208201526040518060400160405280600454815260200183610bdc575f610be0565b6003545b905295945050505050565b610bf3610dea565b6005610bff82826118c2565b5050565b610c0b610dea565b73ffffffffffffffffffffffffffffffffffffffff8116610c5f576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610c6881610f2a565b50565b610c73610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610cc0576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4e919061185c565b9050610b5781848461102b565b5f610d6a600d600984866119da565b610d7391611a01565b60e01c9392505050565b5f610d8c602d600d84866119da565b610d9591611a49565b9392505050565b5f610dab6009600184866119da565b610db491611a85565b60c01c9392505050565b5f610d95610dcc848461105b565b90565b365f610dde83605181876119da565b915091505b9250929050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610976576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c56565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610e8b986001989197919673ffffffffffffffffffffffffffffffffffffffff169501611acb565b6040516020818303038152906040529050919050565b6001546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063faed6c5890610ef99085908590600401611b90565b5f604051808303815f87803b158015610f10575f80fd5b505af1158015610f22573d5f803e3d5ffd5b505050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b5790849061106a565b73ffffffffffffffffffffffffffffffffffffffff831661105057610b57828261110f565b610b57838383611211565b5f610d8c6051603184866119da565b5f8060205f8451602086015f885af180611089576040513d5f823e3d81fd5b50505f513d915081156110a05780600114156110ba565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611109576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c56565b50505050565b73ffffffffffffffffffffffffffffffffffffffff821661115c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146111b2576040519150601f19603f3d011682016040523d82523d5f602084013e6111b7565b606091505b5050905080610b57576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c56565b73ffffffffffffffffffffffffffffffffffffffff821661125e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff84168383610f9e565b5f6020828403121561128f575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d95575f80fd5b5f8083601f8401126112ce575f80fd5b50813567ffffffffffffffff8111156112e5575f80fd5b602083019150836020828501011115610de3575f80fd5b5f806020838503121561130d575f80fd5b823567ffffffffffffffff811115611323575f80fd5b61132f858286016112be565b90969095509350505050565b6020810160038310611374577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f806040838503121561138b575f80fd5b50508035926020909101359150565b5f60e082840312156113aa575f80fd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff81118282101715611400576114006113b0565b60405290565b5f82601f830112611415575f80fd5b813567ffffffffffffffff80821115611430576114306113b0565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611476576114766113b0565b8160405283815286602085880101111561148e575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803580151581146114bc575f80fd5b919050565b5f805f606084860312156114d3575f80fd5b833567ffffffffffffffff808211156114ea575f80fd5b6114f68783880161139a565b9450602086013591508082111561150b575f80fd5b5061151886828701611406565b925050611527604085016114ad565b90509250925092565b5f5b8381101561154a578181015183820152602001611532565b50505f910152565b5f8151808452611569816020860160208601611530565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8351815260208085015190820152608060408201525f6115be6080830185611552565b82810360608401526115d08185611552565b9695505050505050565b803563ffffffff811681146114bc575f80fd5b5f602082840312156115fd575f80fd5b610d95826115da565b602081525f610d956020830184611552565b73ffffffffffffffffffffffffffffffffffffffff81168114610c68575f80fd5b80356114bc81611618565b5f8060408385031215611655575f80fd5b823561166081611618565b946020939093013593505050565b5f6020828403121561167e575f80fd5b8135610d9581611618565b5f805f806060858703121561169c575f80fd5b843567ffffffffffffffff808211156116b3575f80fd5b6116bf8883890161139a565b955060208701359150808211156116d4575f80fd5b506116e1878288016112be565b90945092506116f49050604086016114ad565b905092959194509250565b81518152602080830151908201526040810161060e565b5f60208284031215611726575f80fd5b813567ffffffffffffffff81111561173c575f80fd5b61174884828501611406565b949350505050565b818382375f9101908152919050565b803567ffffffffffffffff811681146114bc575f80fd5b5f60e08236031215611786575f80fd5b61178e6113dd565b6117978361175f565b81526117a5602084016115da565b60208201526117b660408401611639565b60408201526117c7606084016115da565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156117f9575f80fd5b61180536828601611406565b60c08301525092915050565b600181811c9082168061182557607f821691505b6020821081036113aa577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6020828403121561186c575f80fd5b8151610d9581611618565b601f821115610b5757805f5260205f20601f840160051c8101602085101561189c5750805b601f840160051c820191505b818110156118bb575f81556001016118a8565b5050505050565b815167ffffffffffffffff8111156118dc576118dc6113b0565b6118f0816118ea8454611811565b84611877565b602080601f831160018114611942575f841561190c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610f22565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561198e5788860151825594840194600190910190840161196f565b50858210156119ca57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b5f80858511156119e8575f80fd5b838611156119f4575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611a415780818660040360031b1b83161692505b505092915050565b8035602083101561060e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015611a415760089490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611b7c816071850160208701611530565b919091016071019998505050505050505050565b604081525f611ba26040830185611552565b8281036020840152611bb48185611552565b9594505050505056fea2646970667358221220153f6a8e912d5720c2f1c4bf884b915b03d8f933123bf4fbba154ab615acb52564736f6c63430008160033608060405234801561000f575f80fd5b50610a8c8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e5c5e9a31461002d575b5f80fd5b61004061003b3660046106f8565b610057565b60405161004e9291906107cf565b60405180910390f35b606080610064848461006f565b915091509250929050565b60608060028310156100b4576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f6100c260028286886107fc565b6100cb91610823565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161029357805f5b86831015610220575f61011460018501858a8c6107fc565b61011d9161086b565b60f81c90505f81900361015e576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016100ab565b8160ff165f03610170578091506101ac565b8160ff168160ff16146101ac57365f61018b86868c8e6107fc565b9150915061019c89898685856102aa565b9099509750859450919250829150505b60018401935f906101c290600301868b8d6107fc565b6101cb91610823565b60f01c90505f81900361020d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016100ab565b8060020161ffff168501945050506100fc565b82871461025c576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016100ab565b600287111561028c57365f61027385858b8d6107fc565b9150915061028488888585856102aa565b909850965050505b50506102a1565b61029e82878761041d565b93505b50509250929050565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161034457865115610307578684846040516020016102f3939291906108b1565b60405160208183030381529060405261033d565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650610412565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016103db5785511561039e5785848460405160200161038a939291906108b1565b6040516020818303038152906040526103d4565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550610412565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016100ab565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff8516016105425760228214610484576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6104a46104966022600286886107fc565b61049f916108d7565b61069f565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050610698565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff8516016106605760428211158061057d5750606282115b156105b4576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c66104966022600286886107fc565b90505f6105da6104966042602287896107fc565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe850161060d866042818a6107fc565b610616916108d7565b60405160086020938403029190911c9250610647916001916011918391889183916031916002918b918b9101610914565b6040516020818303038152906040529350505050610698565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016100ab565b9392505050565b5f6fffffffffffffffffffffffffffffffff8211156106f4576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016100ab565b5090565b5f8060208385031215610709575f80fd5b823567ffffffffffffffff80821115610720575f80fd5b818501915085601f830112610733575f80fd5b813581811115610741575f80fd5b866020828501011115610752575f80fd5b60209290920196919550909350505050565b5f5b8381101561077e578181015183820152602001610766565b50505f910152565b5f815180845261079d816020860160208601610764565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f6107e16040830185610786565b82810360208401526107f38185610786565b95945050505050565b5f808585111561080a575f80fd5b83861115610816575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156108635780818660020360031b1b83161692505b505092915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156108635760019490940360031b84901b1690921692915050565b5f84516108c2818460208901610764565b8201838582375f930192835250909392505050565b8035602083101561090e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b165b92915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008b60f01b166001840152808a60f81b1660038401527fffffffffffffffffffffffffffffffff000000000000000000000000000000008960801b166004840152808860f81b166014840152506109dc601583018760f01b7fffff000000000000000000000000000000000000000000000000000000000000169052565b610a0d601783018660f81b7fff00000000000000000000000000000000000000000000000000000000000000169052565b610a3e601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea26469706673582212204c5336eb5e4cfed89d8f0ececad030c194802d04a3053cab299816b06066820764736f6c63430008160033a264697066735822122052daf7891cdc2347ff00e50a7e53d499eb73e92df13543ad919710a98f17cce764736f6c63430008160033",
+ "sourceMap": "892:7930:135:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21149:174:74;;;;;;;;;;-1:-1:-1;21149:174:74;;;;;:::i;:::-;;:::i;:::-;;1563:26:135;;;;;;;;;;-1:-1:-1;1563:26:135;;;;-1:-1:-1;;;;;1563:26:135;;;;;;-1:-1:-1;;;;;854:55:139;;;836:74;;824:2;809:18;1563:26:135;;;;;;;;23482:633:74;;;;;;:::i;:::-;;:::i;1997:3163:135:-;;;;;;;;;;;;;:::i;4416:50:74:-;;;;;;;;;;;;4461:5;4416:50;;;;;3782:6:139;3770:19;;;3752:38;;3740:2;3725:18;4416:50:74;3608:188:139;1178:27:135;;;;;;;;;;-1:-1:-1;1178:27:135;;;;;;;-1:-1:-1;;;;;1178:27:135;;;1135:36;;;;;;;;;;;;1168:3;1135:36;;;;;4223:10:139;4211:23;;;4193:42;;4181:2;4166:18;1135:36:135;4049:192:139;1764:51:135;;;;;;;;;;;;1806:9;1764:51;;;;;4392:25:139;;;4380:2;4365:18;1764:51:135;4246:177:139;4297:50:74;;;;;;;;;;;;4343:4;4297:50;;;;;4604:32:139;4592:45;;;4574:64;;4562:2;4547:18;4297:50:74;4428:216:139;1653:104:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5226:166:74:-;;;;;;;;;;-1:-1:-1;5226:166:74;;;;;:::i;:::-;;:::i;2907:134:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1095:34:135:-;;;;;;;;;;;;1128:1;1095:34;;4586:43:74;;;;;;;;;;-1:-1:-1;4586:43:74;;;;;;;;;;;7019:34:139;7007:47;;;6989:66;;6977:2;6962:18;4586:43:74;6843:218:139;1015:34:135;;;;;;;;;;;;1048:1;1015:34;;16845:490:74;;;;;;;;;;-1:-1:-1;16845:490:74;;;;;:::i;:::-;;:::i;3823:151:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1211:34:135:-;;;;;;;;;;-1:-1:-1;1211:34:135;;;;-1:-1:-1;;;;;1211:34:135;;;25280:469:74;;;;;;:::i;:::-;;:::i;1352:27:135:-;;;;;;;;;;-1:-1:-1;1352:27:135;;;;-1:-1:-1;;;;;1352:27:135;;;3684:133:94;;;;;;;;;;;;;:::i;3385:141::-;;;;;;;;;;;;;:::i;5976:204:73:-;;;;;;;;;;-1:-1:-1;5976:204:73;;;;;:::i;:::-;;:::i;:::-;;;;11502:6:139;11490:19;;;11472:38;;11529:34;11599:15;;;11594:2;11579:18;;11572:43;11651:15;;11631:18;;;11624:43;11460:2;11445:18;5976:204:73;11272:401:139;4530:49:74;;;;;;;;;;;;4574:5;4530:49;;1252:27:135;;;;;;;;;;-1:-1:-1;1252:27:135;;;;-1:-1:-1;;;;;1252:27:135;;;1876:52;;;;;;;;;;;;1917:11;1876:52;;1055:34;;;;;;;;;;;;1088:1;1055:34;;30440:228:74;;;;;;;;;;-1:-1:-1;30440:228:74;;;;;:::i;:::-;;:::i;:::-;;;12283:14:139;;12276:22;12258:41;;12246:2;12231:18;30440:228:74;12118:187:139;26061:4058:74;;;;;;;;;;-1:-1:-1;26061:4058:74;;;;;:::i;:::-;;:::i;18447:360::-;;;;;;;;;;-1:-1:-1;18447:360:74;;;;;:::i;:::-;;:::i;3193:186:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1595:52:135:-;;;;;;;;;;-1:-1:-1;1595:52:135;;;;-1:-1:-1;;;;;1595:52:135;;;1319:27;;;;;;;;;;-1:-1:-1;1319:27:135;;;;-1:-1:-1;;;;;1319:27:135;;;4229:53:74;;;;;;;;;;;;4278:4;4229:53;;5349:249:73;;;;;;;;;;-1:-1:-1;5349:249:73;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;17605:528:74:-;;;;;;;;;;-1:-1:-1;17605:528:74;;;;;:::i;:::-;;:::i;30674:338::-;;;;;;;;;;-1:-1:-1;30674:338:74;;;;;:::i;:::-;;:::i;1386:26:135:-;;;;;;;;;;-1:-1:-1;1386:26:135;;;;-1:-1:-1;;;;;1386:26:135;;;1285:27;;;;;;;;;;-1:-1:-1;1285:27:135;;;;-1:-1:-1;;;;;1285:27:135;;;21518:1958:74;;;;;;;;;;-1:-1:-1;21518:1958:74;;;;;:::i;:::-;;:::i;3047:140:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1821:48:135:-;;;;;;;;;;;;1862:7;1821:48;;1418:45;;;;;;;;;;-1:-1:-1;1418:45:135;;;;-1:-1:-1;;;;;1418:45:135;;;3532:146:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6186:197:73:-;;;;;;;;;;-1:-1:-1;6186:197:73;;;;;:::i;:::-;;:::i;:::-;;;;21332:34:139;21393:15;;;21375:34;;21457:10;21445:23;;;21440:2;21425:18;;21418:51;21505:15;;21485:18;;;21478:43;;;;21310:2;21295:18;6186:197:73;21122:405:139;30125:187:74;;;;;;;;;;-1:-1:-1;30125:187:74;;;;;:::i;:::-;;:::i;24702:376::-;;;;;;:::i;:::-;;:::i;30318:116::-;;;;;;;;;;-1:-1:-1;30318:116:74;;;;;:::i;:::-;;:::i;2754:147:94:-;;;;;;;;;;;;;:::i;2459:141::-;;;;;;;;;;;;;:::i;20814:147:74:-;;;;;;;;;;-1:-1:-1;20814:147:74;;;;;:::i;:::-;;:::i;4472:52::-;;;;;;;;;;;;4523:1;4472:52;;5786:184:73;;;;;;;;;;-1:-1:-1;5786:184:73;;;;;:::i;:::-;;:::i;:::-;;;;23649:34:139;23637:47;;;23619:66;;23716:2;23701:18;;23694:34;;;;23592:18;5786:184:73;23445:289:139;1243:204:89;;;;;;;;;;;;;:::i;4104:56:74:-;;;;;;;;;;;;4147:13;4104:56;;1516:40:135;;;;;;;;;;-1:-1:-1;1516:40:135;;;;-1:-1:-1;;;;;1516:40:135;;;5621:10886:74;;;;;;;;;;-1:-1:-1;5621:10886:74;;;;;:::i;:::-;;:::i;1470:40:135:-;;;;;;;;;;-1:-1:-1;1470:40:135;;;;-1:-1:-1;;;;;1470:40:135;;;5120:100:74;;;;;;;;;;-1:-1:-1;5120:100:74;;;;;:::i;:::-;5185:16;:28;;;;;;;;;;;;;;;5120:100;2606:142:94;;;;;;;;;;;;;:::i;24121:575:74:-;;;;;;:::i;:::-;;:::i;1934:56:135:-;;;;;;;;;;;;1975:15;1934:56;;5604:176:73;;;;;;;;;;-1:-1:-1;5604:176:73;;;;;:::i;:::-;;:::i;:::-;;;;24910:34:139;24971:15;;;24953:34;;25023:15;;;;25018:2;25003:18;;24996:43;24873:18;5604:176:73;24726:319:139;1065:26:101;;;;;;;;;;-1:-1:-1;1065:26:101;;;;;;;;19989:464:74;;;;;;;;;;-1:-1:-1;19989:464:74;;;;;:::i;:::-;;:::i;21149:174::-;21226:90;21240:7;21273:11;-1:-1:-1;;;;;21257:29:74;21249:38;;21289:1;21300:3;21306:9;;;;;;;;;;;;21226:13;:90::i;:::-;21149:174;;:::o;23482:633::-;23645:19;23678:9;:32;23688:21;:12;;:19;:21::i;:::-;23678:32;;;;;;;;;;;;;-1:-1:-1;23678:32:74;;;;-1:-1:-1;;;;;23678:32:74;;-1:-1:-1;;23754:36:74;23781:8;23754:26;:36::i;:::-;23721:69;;;;;23801:20;23824:74;;;;;;;;23831:21;:12;;:19;:21::i;:::-;23824:74;;;;;;23854:21;:12;;:19;:21::i;:::-;23824:74;;;;23877:20;:12;;:18;:20::i;:::-;23824:74;;;;23801:97;-1:-1:-1;;;;;;23908:18:74;;;:200;;;;;;;23801:97;23986:26;:12;;:24;:26::i;:::-;24026:19;:12;;:17;:19::i;:::-;24089:9;;;;;;;;-1:-1:-1;24089:9:74;;23908:200;;;;;;;;;;;;;;;24059:16;;23908:200;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23635:480;;;;23482:633;;;;:::o;1997:3163:135:-;2048:13;:11;:13::i;:::-;2086:11;;2071:55;;2086:11;;;2071:14;:55::i;:::-;1088:1;2159:18;;:9;:18;;;;2137:11;:41;;;;-1:-1:-1;;;;;2159:18:135;;;2137:41;;;;;2159:18;2311:79;2384:4;;2311:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2296:12:135;:94;;;;;-1:-1:-1;;;;;2296:94:135;;;;;;;-1:-1:-1;;2459:18:135;:9;:18;;;;;2415:79;2459:18;;;2488:4;;2415:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2400:12:135;:94;;;;-1:-1:-1;;;;;2400:94:135;;;;;;1128:1;-1:-1:-1;2563:18:135;:9;:18;;;;;2519:79;2563:18;;;2592:4;;2519:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2504:12:135;:94;;;;-1:-1:-1;;;;;2504:94:135;;;;;;;;;;2688:11;;-1:-1:-1;;2688:11:135;;2674:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2674:26:135;-1:-1:-1;2733:12:135;;2710;;2645:55;;-1:-1:-1;;;;;;2733:12:135;;2645:55;;2733:12;;2710;;;;:::i;:::-;-1:-1:-1;;;;;2710:36:135;;;:12;;;;;;;;;:36;2779:12;;2756;;2779;;;;;;;;2756:9;;2779:12;;2756;;;;;;:::i;:::-;-1:-1:-1;;;;;2756:36:135;;;:12;;;;;;;;;:36;2825:12;;2802;;2825;;;2802:9;;2812:1;;2802:12;;;;;;:::i;:::-;-1:-1:-1;;;;;2802:36:135;;;:12;;;;;;;;;;;:36;2848:25;;;;;:4;;:14;;:25;;2863:9;;2848:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3029:12;;;;;;;;;-1:-1:-1;;;;;3029:12:135;2983:60;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2971:9:135;:72;;;;-1:-1:-1;;;;;2971:72:135;;;;;;;;;1088:1;-1:-1:-1;3115:18:135;:9;:18;;;;;3068:82;2971:72;;3115:18;;3144:4;;3068:82;;;:::i;:::-;-1:-1:-1;;;;;30755:15:139;;;30737:34;;30807:15;;;30802:2;30787:18;;30780:43;30859:15;;;30854:2;30839:18;;30832:43;30664:2;30649:18;3068:82:135;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3053:12:135;:97;;;;-1:-1:-1;;;;;3053:97:135;;;;;;;;;3213:9;;3233:12;;3183:87;;3213:9;;;;3053:97;3233:12;;;;;3053:97;3183:87;;;:::i;:::-;-1:-1:-1;;;;;30755:15:139;;;30737:34;;30807:15;;;30802:2;30787:18;;30780:43;30859:15;;;30854:2;30839:18;;30832:43;30664:2;30649:18;3183:87:135;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3160:20:135;:110;;;;-1:-1:-1;;;;;3160:110:135;;;;;;-1:-1:-1;;3426:18:135;:9;:18;;;;;3382:79;3426:18;;;3455:4;;3382:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3367:12:135;:94;;;;-1:-1:-1;;;;;3367:94:135;;;;;;1128:1;-1:-1:-1;3530:18:135;:9;:18;;;;;3486:79;3530:18;;;3559:4;;3486:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3471:12:135;:94;;;;-1:-1:-1;;;;;3471:94:135;;;;;;;;;;3619:11;;-1:-1:-1;;3619:11:135;;3605:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3605:26:135;-1:-1:-1;3664:12:135;;3641;;3576:55;;-1:-1:-1;;;;;;3664:12:135;;3576:55;;3664:12;;3641;;;;:::i;:::-;-1:-1:-1;;;;;3641:36:135;;;:12;;;;;;;;;:36;3710:12;;3687;;3710;;;3687:9;;3710:12;;3687;;;;;;:::i;:::-;-1:-1:-1;;;;;3687:36:135;;;:12;;;;;;;;;:36;3756:12;;3733;;3756;;;3733:9;;3743:1;;3733:12;;;;;;:::i;:::-;-1:-1:-1;;;;;3733:36:135;;;:12;;;;;;;;;;;:36;3779:25;;;;;:4;;:14;;:25;;3794:9;;3779:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3832:12:135;;3815:48;;;;;;3832:12;;;;-1:-1:-1;;;;;3832:12:135;3815:48;;;32870:74:139;32960:18;;;32953:30;33019:2;32999:18;;;32992:30;33058:15;33038:18;;;33031:43;336:42:88;;-1:-1:-1;3815:8:135;;-1:-1:-1;33091:19:139;;3815:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3890:12:135;;3873:48;;;;;;-1:-1:-1;;;;;3890:12:135;;;3873:48;;;33333:74:139;33423:18;;;33416:30;33482:2;33462:18;;;33455:30;33521:15;33501:18;;;33494:43;336:42:88;;-1:-1:-1;3873:8:135;;-1:-1:-1;33554:19:139;;3873:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3948:12:135;;3931:48;;;;;;-1:-1:-1;;;;;3948:12:135;;;3931:48;;;33796:74:139;33886:18;;;33879:30;33945:2;33925:18;;;33918:30;33984:15;33964:18;;;33957:43;336:42:88;;-1:-1:-1;3931:8:135;;-1:-1:-1;34017:19:139;;3931:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4007:12:135;;3990:55;;;;;;-1:-1:-1;;;;;4007:12:135;;;3990:55;;;34259:74:139;34349:18;;;34342:30;34408:2;34388:18;;;34381:30;34447:22;34427:18;;;34420:50;336:42:88;;-1:-1:-1;3990:8:135;;-1:-1:-1;34487:19:139;;3990:55:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4072:12:135;;4055:48;;;;;;-1:-1:-1;;;;;4072:12:135;;;4055:48;;;34729:74:139;34819:18;;;34812:30;34878:2;34858:18;;;34851:30;34917:15;34897:18;;;34890:43;336:42:88;;-1:-1:-1;4055:8:135;;-1:-1:-1;34950:19:139;;4055:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4130:12:135;;4113:48;;;;;;-1:-1:-1;;;;;4130:12:135;;;4113:48;;;35192:74:139;35282:18;;;35275:30;35341:2;35321:18;;;35314:30;35380:15;35360:18;;;35353:43;336:42:88;;-1:-1:-1;4113:8:135;;-1:-1:-1;35413:19:139;;4113:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4189:9:135;;4172:42;;;;;;-1:-1:-1;;;;;4189:9:135;;;4172:42;;;35655:74:139;35745:18;;;35738:30;35804:2;35784:18;;;35777:30;35843:12;35823:18;;;35816:40;336:42:88;;-1:-1:-1;4172:8:135;;-1:-1:-1;35873:19:139;;4172:42:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4241:20:135;;4224:65;;;;;;-1:-1:-1;;;;;4241:20:135;;;4224:65;;;36115:74:139;36205:18;;;36198:30;36264:2;36244:18;;;36237:30;36303:24;36283:18;;;36276:52;336:42:88;;-1:-1:-1;4224:8:135;;-1:-1:-1;36345:19:139;;4224:65:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4305:11:135;;4300:34;;-1:-1:-1;;;;;;4305:11:135;;-1:-1:-1;1806:9:135;4300:4;:34::i;:::-;4349:11;;4344:34;;-1:-1:-1;;;;;4349:11:135;1806:9;4344:4;:34::i;:::-;4436:28;;;4462:1;4436:28;;;;;;;;;4389:44;;4436:28;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;4436:28:135;;;;;;;;;;;;;;;4389:75;;4495:82;;;;;;;;1128:1;4495:82;;;;;;4540:1;4495:82;;;;;;4552:22;4495:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4474:15;4490:1;4474:18;;;;;;;;:::i;:::-;;;;;;:103;;;;4608:82;;;;;;;;1088:1;4608:82;;;;;;4653:1;4608:82;;;;;;4665:22;4608:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4587:15;4603:1;4587:18;;;;;;;;:::i;:::-;;;;;;:103;;;;4721:82;;;;;;;;1048:1;4721:82;;;;;;4766:1;4721:82;;;;;;4778:22;4721:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4700:15;4716:1;4700:18;;;;;;;;:::i;:::-;;;;;;;;;;:103;4814:12;;:48;;;;;:12;;;;-1:-1:-1;;;;;4814:12:135;;:31;;:48;;4846:15;;4814:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4872:12:135;;:48;;;;;-1:-1:-1;;;;;4872:12:135;;;;-1:-1:-1;4872:31:135;;-1:-1:-1;4872:48:135;;4904:15;;4872:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4930:12:135;;:48;;;;;-1:-1:-1;;;;;4930:12:135;;;;-1:-1:-1;4930:31:135;;-1:-1:-1;4930:48:135;;4962:15;;4930:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4989:12:135;;:48;;;;;-1:-1:-1;;;;;4989:12:135;;;;-1:-1:-1;4989:31:135;;-1:-1:-1;4989:48:135;;5021:15;;4989:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5047:12:135;;:48;;;;;-1:-1:-1;;;;;5047:12:135;;;;-1:-1:-1;5047:31:135;;-1:-1:-1;5047:48:135;;5079:15;;5047:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5105:12:135;;:48;;;;;-1:-1:-1;;;;;5105:12:135;;;;-1:-1:-1;5105:31:135;;-1:-1:-1;5105:48:135;;5137:15;;5105:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:3122;;;1997:3163::o;1653:104::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5226:166:74:-;5313:72;5329:12;5343;5371;5357:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5357:27:74;;5313:15;:72::i;2907:134:94:-;2954:33;3018:16;2999:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2999:35:94;;;;;;;;;;;;;;;;;;;;;;;2907:134;:::o;16845:490:74:-;16976:22;17032:8;17018:23;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17018:23:74;-1:-1:-1;17010:31:74;-1:-1:-1;17068:9:74;17051:234;17085:20;17097:8;17085:9;:20;:::i;:::-;17079:26;;:3;:26;;;17051:234;;;17193:14;;;17128:12;17193:14;;;:9;:14;;;;;;;;;17174:56;;-1:-1:-1;;;;;17193:14:74;;;17174:56;;;38645:34:139;;;;17218:4:74;38695:18:139;;;38688:43;17193:14:74;38747:18:139;;;38740:50;17143:88:74;;17155:17;;38557:18:139;;17174:56:74;;;;;;;;;;;;17143:11;:88::i;:::-;17128:103;-1:-1:-1;17128:103:74;17245:5;17251:15;17257:9;17251:3;:15;:::i;:::-;17245:22;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17245:29:74;;;:22;;;;;;;;;;;:29;-1:-1:-1;17107:5:74;;17051:234;;;;17312:16;17322:5;17312:9;:16::i;:::-;16845:490;;;;;:::o;3823:151:94:-;3872:42;3948:19;3926:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3926:41:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3823:151;:::o;25280:469:74:-;25524:18;;;25491:19;25524:18;;;:9;:18;;;;;;-1:-1:-1;;;;;25524:18:74;;25491:19;;25598:39;25628:8;25598:29;:39::i;:::-;25553:84;;;;;;25647:8;-1:-1:-1;;;;;25647:18:74;;25674:5;25686:3;25647:95;25692:5;25699:3;25704:5;25711;25718:12;;25732:9;;;;;;;;;;;;25647:95;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25481:268;;;;25280:469;;;;;;;:::o;3684:133:94:-;3730:33;3794:16;3775:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3775:35:94;;;;;;;;;;;;;;;;;;;;;;3684:133;:::o;3385:141::-;3433:35;3501:18;3480:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3480:39:94;;;;;;;;;;;;;;;;;;;;;;3385:141;:::o;5976:204:73:-;6068:12;6082:11;6095:13;6127:46;6165:7;;6127:37;:46::i;:::-;6120:53;;;;;;5976:204;;;;;:::o;30440:228:74:-;30592:21;;;30525:9;30592:21;;;:12;:21;;;;;;;:34;;;;;;;;30525:9;30643:14;30592:34;5464:12:132;;;;;5451:10;;;;;;:25;;;;5443:34;;5326:168;30643:14:74;:18;30636:25;;;30440:228;;;;;:::o;26061:4058::-;26164:13;26180:21;:12;;:19;:21::i;:::-;26244:17;;;26211:19;26244:17;;;:9;:17;;;;;;26164:37;;-1:-1:-1;;;;;;26244:17:74;;;;;26297:26;26324;:12;;:24;:26::i;:::-;26352:21;:12;;:19;:21::i;:::-;26297:77;;;;;;;;;;-1:-1:-1;;;;;39934:55:139;;;26297:77:74;;;39916:74:139;26297:77:74;40026:23:139;40006:18;;;39999:51;39889:18;;26297:77:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26272:102;;;26384:25;26412:21;:12;;:19;:21::i;:::-;26384:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26465:33:74;;;;;;;;26384:49;;-1:-1:-1;26384:49:74;;-1:-1:-1;;;;;26465:31:74;;;-1:-1:-1;26465:31:74;;-1:-1:-1;26465:33:74;;;;;-1:-1:-1;26465:33:74;;;;;;;:31;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26444:54;;;;26512:5;:10;;26521:1;26512:10;26508:3605;;26613:10;26576:20;-1:-1:-1;;;;;26660:16:74;;;26677:21;:12;;:19;:21::i;:::-;26700:26;:12;;:24;:26::i;:::-;26660:70;;;;;;;;;;;41660:15:139;;;;26660:70:74;;;41642:34:139;-1:-1:-1;;;;;41712:55:139;41692:18;;;41685:83;26728:1:74;41784:18:139;;;41777:43;41586:18;;26660:70:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26660:70:74;;;;;;;;;;;;:::i;:::-;26638:92;;26763:7;26788:6;26777:31;;;;;;;;;;;;:::i;:::-;:44;;;26822:1;26777:47;;;;;;;;:::i;:::-;;;;;;;26763:62;;26840:19;26872:22;:12;;:20;:22::i;:::-;26862:33;;;;;;;:::i;:::-;;;;;;;;26840:55;;26930:23;26967:27;27037:29;;;27084:12;27114:11;27143:3;26997:163;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26997:163:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;27207:16:74;;;27224:6;27240;26997:163;27265:22;:15;27283:4;27265:22;:::i;:::-;27207:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27192:96;;27319:10;27324:4;27319;:10::i;:::-;27388:21;;;27407:1;27388:21;;;;;;;;;27306:23;;-1:-1:-1;27357:28:74;;-1:-1:-1;27388:21:74;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27388:21:74;;;;;;;;;;;;;;;27357:52;;27435:89;;;;;;;;27448:6;27435:89;;;;;;27464:6;-1:-1:-1;;;;;27435:89:74;;;;;27473:14;27435:89;;;;27489:15;27507:4;27489:22;;;;:::i;:::-;27435:89;;;;27513:10;27435:89;;;27423:6;27430:1;27423:9;;;;;;;;:::i;:::-;;;;;;;;;;:101;27538:19;;;;;-1:-1:-1;;;;;27538:11:74;;;;;:19;;27550:6;;27538:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27607:21;27671:41;;;27730:12;27760:11;27631:154;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;27631:154:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;27832:16:74;;;27849:6;27865;27631:154;27884:22;:15;27902:4;27884:22;:::i;:::-;27832:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27817:90;;27938:10;27943:4;27938;:10::i;:::-;27925:23;;27799:164;27988:83;;;;;;;;28001:6;27988:83;;;;;;28017:6;-1:-1:-1;;;;;27988:83:74;;;;;28026:8;27988:83;;;;28036:15;28054:4;28036:22;;;;:::i;:::-;27988:83;;;;28060:10;27988:83;;;27976:6;27983:1;27976:9;;;;;;;;:::i;:::-;;;;;;;;;;:95;28085:19;;;;;-1:-1:-1;;;;;28085:11:74;;;;;:19;;28097:6;;28085:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26524:1591;;;;;;;;26508:3605;;;28125:5;:11;;28134:2;28125:11;28121:1992;;28193:10;28152:18;-1:-1:-1;;;;;28241:16:74;;;28258:21;:12;;:19;:21::i;:::-;28281:26;:12;;:24;:26::i;:::-;28241:70;;;;;;;;;;;41660:15:139;;;;28241:70:74;;;41642:34:139;-1:-1:-1;;;;;41712:55:139;41692:18;;;41685:83;28309:1:74;41784:18:139;;;41777:43;41586:18;;28241:70:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28241:70:74;;;;;;;;;;;;:::i;:::-;28219:92;;28355:7;28380:6;28369:35;;;;;;;;;;;;:::i;:::-;:48;;;28418:1;28369:51;;;;;;;;:::i;:::-;;;;;;;28355:66;;28436:19;28468:22;:12;;:20;:22::i;:::-;28458:33;;;;;;;:::i;:::-;;;;;;;;28436:55;;28505:27;28562:19;:12;;:17;:19::i;:::-;28583:16;28545:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28535:66;;;;;;28505:96;;28615:23;28671:27;28745;;;28794:12;28828:11;28861:19;28701:197;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;28701:197:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;28937:16:74;;;28954:6;28970;28701:197;28995:22;:15;29013:4;28995:22;:::i;:::-;28937:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28916:102;;29049:16;29054:10;29049:4;:16::i;:::-;29114:21;;;29133:1;29114:21;;;;;;;;;29036:29;;-1:-1:-1;29083:28:74;;29114:21;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29114:21:74;;;;;;;;;;;;;;;29083:52;;29165:89;;;;;;;;29178:6;29165:89;;;;;;29194:6;-1:-1:-1;;;;;29165:89:74;;;;;29203:14;29165:89;;;;29219:15;29237:4;29219:22;;;;:::i;:::-;29165:89;;;;29243:10;29165:89;;;29153:6;29160:1;29153:9;;;;;;;;:::i;:::-;;;;;;;;;;:101;29272:19;;;;;-1:-1:-1;;;;;29272:11:74;;;;;:19;;29284:6;;29272:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28653:653;;;29373:21;29441:39;;;29502:12;29536:11;29569:19;29397:209;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;29397:209:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;29645:16:74;;;29662:6;29678;29397:209;29697:22;:15;29715:4;29697:22;:::i;:::-;29645:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29624:96;;29751:16;29756:10;29751:4;:16::i;:::-;29816:21;;;29835:1;29816:21;;;;;;;;;29738:29;;-1:-1:-1;29785:28:74;;29816:21;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29816:21:74;;;;;;;;;;;;;;;29785:52;;29867:83;;;;;;;;29880:6;29867:83;;;;;;29896:6;-1:-1:-1;;;;;29867:83:74;;;;;29905:8;29867:83;;;;29915:15;29933:4;29915:22;;;;:::i;:::-;29867:83;;;;29939:10;29867:83;;;29855:6;29862:1;29855:9;;;;;;;;:::i;:::-;;;;;;;;;;:95;29968:19;;;;;-1:-1:-1;;;;;29968:11:74;;;;;:19;;29980:6;;29968:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29355:647;;;28138:1874;;;;;;28121:1992;;;30032:70;;;;;-1:-1:-1;;;;;30032:56:74;;;;;:70;;30089:12;;;;30032:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28121:1992;26154:3965;;;;;26061:4058;;;:::o;18447:360::-;18542:9;18537:264;18561:5;:12;18557:1;:16;18537:264;;;18594:29;18646:5;18652:1;18646:8;;;;;;;;:::i;:::-;;;;;;;18594:61;;18674:9;18669:122;18693:8;:15;18689:1;:19;18669:122;;;18733:9;-1:-1:-1;;;;;18733:24:74;;18758:8;18767:1;18758:11;;;;;;;;:::i;:::-;;;;;;;;;;;18733:43;;;;;;;;;;;50505:23:139;;;18733:43:74;;;50487:42:139;18771:4:74;50545:18:139;;;50538:50;50460:18;;18733:43:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18710:3:74;;;;;-1:-1:-1;18669:122:74;;-1:-1:-1;18669:122:74;;-1:-1:-1;;18575:3:74;;18537:264;;;;18447:360;;:::o;3193:186:94:-;3249:56;3346:26;3317:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5349:249:73;5464:16;5482:21;;5505:14;5538:53;5573:8;;5583:7;5538:34;:53::i;:::-;5531:60;;;;;;;;5349:249;;;;;;;:::o;17605:528:74:-;17680:12;;17665;17702:425;17726:4;17722:1;:8;17702:425;;;17751:22;17789:5;17795:1;17789:8;;;;;;;;:::i;:::-;;;;;;;17751:47;;17817:9;17812:305;17836:4;17832:1;:8;17812:305;;;17865:20;;;17877:8;17865:20;17903:23;17942:5;17948:1;17942:8;;;;;;;;:::i;:::-;;;;;;;17903:48;;17969:16;17989:10;-1:-1:-1;;;;;17989:19:74;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17988:27:74;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17969:48;;18035:9;-1:-1:-1;;;;;18035:17:74;;18053:9;18064:37;18089:10;-1:-1:-1;;;;;31116:23:74;;31018:129;18064:37;18035:67;;;;;;;;;;;51328:23:139;;;;18035:67:74;;;51310:42:139;51368:18;;;51361:34;51283:18;;18035:67:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17847:270;;17812:305;17842:3;;17812:305;;;-1:-1:-1;;17732:3:74;;17702:425;;30674:338;30845:21;;;30799:43;30845:21;;;:12;:21;;;;;;;:34;;;;;;;;30763:24;;30893:14;30845:34;5464:12:132;;;;;5451:10;;;;;;:25;;;;5443:34;;5326:168;30893:14:74;:18;30889:117;;;30927:12;30942;:5;:10;:12::i;:::-;30982:13;;;;:7;:13;;;;;30968:27;;30927;;-1:-1:-1;30982:13:74;30968:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30913:93;30889:117;30789:223;30674:338;;;;:::o;21518:1958::-;21722:18;;;21752:1;21722:18;;;:9;:18;;;;;;-1:-1:-1;;;;;21722:18:74;21714:72;;;;;;;51608:2:139;21714:72:74;;;51590:21:139;51647:2;51627:18;;;51620:30;51686:29;51666:18;;;51659:57;51733:18;;21714:72:74;;;;;;;;;21843:21;;;21797:43;21843:21;;;:12;:21;;;;;;;:34;;;;;;;;;21916:14;21843:34;5464:12:132;;;;;5451:10;;;;;;:25;;;;5443:34;;5326:168;21916:14:74;21887:43;;21940:23;21977:13;21994:1;21977:18;21973:201;;-1:-1:-1;5464:12:132;;;;;;5451:10;;;;;;:25;;;;5443:34;21973:201:74;;;22113:13;22092:18;:34;:71;;22145:18;22092:71;;;22129:13;22092:71;22074:89;;21973:201;22190:19;;22183:1287;;22225:17;;;;:::i;:::-;;;;22290:12;22305:15;:5;:13;:15::i;:::-;22334:24;22361:13;;;:7;:13;;;;;22334:40;;22290:30;;-1:-1:-1;22334:24:74;;:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22388:34:74;;;;;22334:40;;-1:-1:-1;22388:4:74;;:15;;-1:-1:-1;22388:34:74;;-1:-1:-1;22334:40:74;;-1:-1:-1;22417:4:74;;22388:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22436:50:74;;;;;:4;;-1:-1:-1;22436:19:74;;-1:-1:-1;22436:50:74;;22456:11;;22469:16;;22436:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22501:20:74;22524:19;;;:13;:19;;;;;22501:42;;:20;;-1:-1:-1;22524:19:74;22501:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22561:71;22583:7;363:1:13;22561:21:74;:71::i;:::-;22557:369;;;22653:14;22669:16;22689:39;22720:7;22689:30;:39::i;:::-;22828:28;;22652:76;;-1:-1:-1;22652:76:74;-1:-1:-1;22652:76:74;;22746:10;;-1:-1:-1;;;;;22828:7:74;;;22652:76;;22746:10;22828:28;22746:10;22828:28;22652:76;22828:7;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22812:44;;;22882:4;22874:37;;;;;;;52757:2:139;22874:37:74;;;52739:21:139;52796:2;52776:18;;;52769:30;52835:22;52815:18;;;52808:50;52875:18;;22874:37:74;52555:344:139;22874:37:74;22634:292;;;;22557:369;22943:69;22965:7;306:1:13;22943:21:74;:69::i;:::-;22939:144;;;23032:36;;;;;:4;;:14;;:36;;23047:11;;23060:7;;23032:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22939:144;23100:66;23122:7;533:1:13;23100:21:74;:66::i;:::-;23096:163;;;23186:58;;;;;:4;;:18;;:58;;23205:11;;23218:7;;23227:16;;23186:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23096:163;-1:-1:-1;;;;;23276:23:74;;;;;;:96;;;23303:69;23325:7;418:1:13;23303:21:74;:69::i;:::-;23272:188;;;23392:53;;;;;:4;;:14;;:53;;23407:11;;23420:7;;23429:4;;23435:9;;23392:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23272:188;22211:1259;;;22183:1287;;3047:140:94;3095:34;3162:18;3141:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3532:146;3580:40;3653:18;3632:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3632:39:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6186:197:73;6275:11;6288;6301:13;6333:43;6368:7;;6333:34;:43::i;30125:187:74:-;30211:18;30232;:11;;:16;:18::i;:::-;30211:39;;30282:4;30268:10;:18;30260:45;;;;;;;54223:2:139;30260:45:74;;;54205:21:139;54262:2;54242:18;;;54235:30;54301:16;54281:18;;;54274:44;54335:18;;30260:45:74;54021:338:139;30260:45:74;30201:111;30125:187;;;:::o;24702:376::-;24872:4;:14;24900:21;:12;;:19;:21::i;:::-;24935:26;:12;;:24;:26::i;:::-;24975:8;24997:5;25016:9;25039:22;:12;;:20;:22::i;:::-;24872:199;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24702:376;;;;;:::o;30318:116::-;30418:8;30382:9;:25;30392:8;-1:-1:-1;;;;;30392:12:74;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30382:25;;;;;;;;;;;;;-1:-1:-1;30382:25:74;:45;;;;-1:-1:-1;;;;;30382:45:74;;;;;;;;;;-1:-1:-1;30318:116:74:o;2754:147:94:-;2803:40;2876:18;2855:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2855:39:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2459:141;2508:34;2575:18;2554:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20814:147:74;20891:63;20905:7;20914:11;20927:1;20938:3;20944:9;;;;;;;;;;;;20891:13;:63::i;5786:184:73:-;5865:14;5881:16;5916:47;5955:7;;5916:38;:47::i;:::-;5909:54;;;;5786:184;;;;;;:::o;1243:204:89:-;1302:7;;1282:4;;1302:7;;1298:143;;;-1:-1:-1;1332:7:89;;;;;1243:204::o;1298:143::-;1377:39;;;;;:7;:39;;;55329:74:139;;;1398:17:89;55419:18:139;;;55412:34;1428:1:89;;1377:7;;55302:18:139;;1377:39:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;1370:60;;1243:204;:::o;5621:10886:74:-;5824:12;5807:30;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5807:30:74;-1:-1:-1;5778:59:74;;;;:13;;:59;;;;;;:::i;:::-;;5884:12;5871:26;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5871:26:74;-1:-1:-1;5847:50:74;;;;:21;;:50;;;;;;:::i;:::-;;5946:12;5932:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5932:27:74;-1:-1:-1;5907:52:74;;;;:22;;:52;;;;;;:::i;:::-;;6011:12;5997:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5997:27:74;-1:-1:-1;5969:55:74;;;;:25;;:55;;;;;;:::i;:::-;;6073:12;6059:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6059:27:74;-1:-1:-1;6034:52:74;;;;:22;;:52;;;;;;:::i;:::-;-1:-1:-1;6120:16:74;;;6134:1;6120:16;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6096:40:74;;;;:21;;-1:-1:-1;6096:40:74;;;;:::i;:::-;-1:-1:-1;6173:10:74;;;;;6181:1;6173:10;;;4392:25:139;336:42:88;;6173:7:74;;4365:18:139;;6173:10:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6146:21;:24;;6168:1;;6146:24;;;;:::i;:::-;;;;;;;;;:37;;;;-1:-1:-1;;;;;6146:37:74;;;;;;;;;;;6240:552;6262:12;6258:16;;:1;:16;;;6240:552;;;6299:10;6312:5;:1;6316;6312:5;:::i;:::-;6299:18;;;;6335:19;6357:20;6378:1;6357:23;;;;;;;;;;:::i;:::-;;;;;;;6335:45;;6425:3;6398:13;:21;;6420:1;6398:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;6473:1;-1:-1:-1;;;;;6450:25:74;:11;-1:-1:-1;;;;;6450:25:74;;6446:267;;6546:3;6559:4;6531:34;;;;;:::i;:::-;56105:10:139;56093:23;;;56075:42;;-1:-1:-1;;;;;56153:55:139;56148:2;56133:18;;56126:83;56063:2;56048:18;6531:34:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6499:13:74;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;:66;;;;;-1:-1:-1;;;;;6499:66:74;;;;;-1:-1:-1;;;;;6499:66:74;;;;;;6446:267;;;6662:3;6675:4;6682:11;6644:50;;;;;:::i;:::-;56450:10:139;56438:23;;;56420:42;;-1:-1:-1;;;;;56559:15:139;;;56554:2;56539:18;;56532:43;56611:15;56606:2;56591:18;;56584:43;56408:2;56393:18;6644:50:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6612:13:74;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;:82;;;;;-1:-1:-1;;;;;6612:82:74;;;;;-1:-1:-1;;;;;6612:82:74;;;;;;6446:267;6730:47;6747:13;:26;;6774:1;6747:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6747:29:74;6730:16;:47::i;:::-;-1:-1:-1;;6276:3:74;;6240:552;;;;6918:4;6896:28;;;;;:::i;:::-;-1:-1:-1;;;;;854:55:139;;;836:74;;824:2;809:18;6896:28:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6870:23:74;:54;;;;-1:-1:-1;;;;;6870:54:74;;;;;;;;;;-1:-1:-1;6935:8866:74;6957:12;6953:16;;:1;:16;;;6935:8866;;;7010:26;6994:12;:42;;;;;;;;:::i;:::-;;6990:8801;;7056:20;7087:13;:26;;7114:1;7087:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7087:29:74;7056:61;;7199:4;7226:12;4147:13;4217:6;7155:185;;;;;:::i;:::-;-1:-1:-1;;;;;57153:15:139;;;57135:34;;57205:15;;;;57200:2;57185:18;;57178:43;57252:2;57237:18;;57230:34;57295:2;57280:18;;57273:34;57061:3;57046:19;7155:185:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7136:8:74;:204;;;;-1:-1:-1;;;;;7136:204:74;;;;;;;;;;7380:31;;7398:12;;7380:31;;;:::i;:::-;-1:-1:-1;;;;;854:55:139;;;836:74;;824:2;809:18;7380:31:74;;;;;;;;;;;;;;;;;;;;;;;7358:8;:19;;;:53;;;;;-1:-1:-1;;;;;7358:53:74;;;;;-1:-1:-1;;;;;7358:53:74;;;;;;7493:4;7520:12;4147:13;4217:6;7448:186;;;;;:::i;:::-;-1:-1:-1;;;;;57153:15:139;;;57135:34;;57205:15;;;;57200:2;57185:18;;57178:43;57252:2;57237:18;;57230:34;57295:2;57280:18;;57273:34;57061:3;57046:19;7448:186:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7429:16:74;:205;;;;-1:-1:-1;;;;;7429:205:74;;;;;;;;;;7652:13;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;7706:8;:16;7652:72;;;;;-1:-1:-1;;;;;7706:16:74;;;7652:72;;;836:74:139;7652:29:74;;;:45;;809:18:139;;7652:72:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7742:13;:26;;7769:1;7742:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;7796:19;;7742:75;;;;;-1:-1:-1;;;;;7796:19:74;;;7742:75;;;836:74:139;7742:29:74;;;:45;;809:18:139;;7742:75:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7835:13;:26;;7862:1;7835:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;7889:16;;7835:72;;;;;-1:-1:-1;;;;;7889:16:74;;;7835:72;;;836:74:139;7835:29:74;;;:45;;809:18:139;;7835:72:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7961:8:74;:16;7925:22;:25;;-1:-1:-1;;;;;7961:16:74;;;;-1:-1:-1;7925:22:74;-1:-1:-1;7925:25:74;;;;;;;;;;:::i;:::-;;;;;;;;;;:53;;;;-1:-1:-1;;;;;7925:53:74;;;;;;8035:19;;7996:25;:28;;8035:19;;;;;7996:25;:28;;;;;;;;;;:::i;:::-;;;;;;;;;;:59;;;;-1:-1:-1;;;;;7996:59:74;;;;;;8109:16;;8073:22;:25;;8109:16;;;;;8073:22;:25;;;;;;;;;;:::i;:::-;;;;;;;;;:53;;-1:-1:-1;;;;;8073:53:74;;;;;;;;;;;;;;;8193:16;;;-1:-1:-1;8193:16:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8193:16:74;8167:42;;8251:4;8231:6;8238:1;8231:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8231:25:74;;;;:9;;;;;;;;;;:25;8310:16;;;8324:1;8310:16;;;;;;;;;8279:28;;8310:16;;8324:1;8310:16;;;;;;;-1:-1:-1;;8373:8:74;:16;8348:14;;;;-1:-1:-1;;;;;;8373:16:74;;8348:14;;-1:-1:-1;8373:16:74;;8348:14;;;;:::i;:::-;-1:-1:-1;;;;;8348:42:74;;;:14;;;;;;;;;:42;8437:19;;8412:14;;8437:19;;;8412:11;;8437:19;;8412:14;;;;;;:::i;:::-;-1:-1:-1;;;;;8412:45:74;;;:14;;;;;;;;;:45;8504:16;;8479:14;;8504:16;;;8479:11;;8504:16;;8479:14;;;;;;:::i;:::-;-1:-1:-1;;;;;8479:42:74;;;:14;;;;;;;;;:42;8723:23;;8564:276;;8602:12;;8648:3;;8678:11;;8723:23;;;8781:4;;8812:6;;8564:276;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8544:17:74;:296;;;;-1:-1:-1;;;;;8544:296:74;;;;;;;;;;8905:21;:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;8886:44;;;;;:::i;:::-;4223:10:139;4211:23;;;4193:42;;4181:2;4166:18;8886:44:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8863:20:74;:67;;;;-1:-1:-1;;;;;8863:67:74;;;;;;;;;8952:17;;:64;;;;;;;;836:74:139;;;;8952:17:74;;;;:33;;809:18:139;;8952:64:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9087:13;:21;;9109:1;9087:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;9137:5;:1;9141;9137:5;:::i;:::-;9213:23;;9054:311;;9168:11;;-1:-1:-1;;;;;9213:23:74;;9263:21;;9213:23;;9337:6;;9054:311;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9039:12:74;:326;;;;-1:-1:-1;;;;;9039:326:74;;;;;;;;;;9419:21;:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;9445:4;9405:45;;;;;:::i;:::-;51340:10:139;51328:23;;;51310:42;;51383:2;51368:18;;51361:34;51298:2;51283:18;9405:45:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9387:15:74;:63;;;;-1:-1:-1;;;;;9387:63:74;;;;;;;;;9472:96;;;;;4343:4;9472:96;;;60268:34:139;;;60318:18;;;60311:43;4461:5:74;60370:18:139;;;60363:47;9472:26:74;;60190:18:139;;9472:96:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9590:12:74;;9627:15;;9590:54;;;;;-1:-1:-1;;;;;9627:15:74;;;9590:12;:54;;836:74:139;9590:12:74;;;-1:-1:-1;9590:28:74;;-1:-1:-1;809:18:139;;9590:54:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8145:1518;;9681:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;9681:32:74;9798:16;:12;9813:1;9798:16;:::i;:::-;9767:48;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9767:48:74;;;;;;;;;;;;;;-1:-1:-1;9731:84:74;;9890:16;:12;9905:1;9890:16;:::i;:::-;9864:43;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9864:43:74;;;;;;;;;;;;;;-1:-1:-1;9833:28:74;;;:74;10004:16;:12;10019:1;10004:16;:::i;:::-;9962:59;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;9962:59:74;;;;;;;;;;;;;;;-1:-1:-1;9925:34:74;;;;:96;;;;10071:16;;10085:1;10071:16;;;;;;;;;10040:28;;10071:16;;;;;;;;;-1:-1:-1;;10137:16:74;;;10105:29;10137:16;;;;;;;;;10196:12;;10171:14;;10040:47;;-1:-1:-1;10137:16:74;;-1:-1:-1;;;;;10196:12:74;;;;-1:-1:-1;10040:47:74;;10105:29;10171:14;;;;:::i;:::-;;;;;;:38;-1:-1:-1;;;;;10171:38:74;;;-1:-1:-1;;;;;10171:38:74;;;;;10233:7;10228:2850;10250:12;10246:16;;:1;:16;;;10228:2850;;;10300:1;10295:6;;:1;:6;;;10291:20;10303:8;10291:20;10333:13;10349:5;:1;10353;10349:5;:::i;:::-;10423:33;;;10454:1;10423:33;;;;;;;;;10333:21;;;;;;-1:-1:-1;10377:43:74;;10423:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10377:79;;10478:26;10507:265;;;;;;;;10542:3;10507:265;;;;;;10577:11;:18;10507:265;;;;;;10628:12;:19;10507:265;;;;;;10674:1;10507:265;;;;;;10701:11;10507:265;;;;10738:12;10507:265;;;10478:294;;10836:43;;;;;;;;10861:6;10836:43;;;;;;10869:9;10836:43;;;10821:9;10831:1;10821:12;;;;;;;;:::i;:::-;;;;;;;;;;:58;10905:8;:16;:48;;;;;-1:-1:-1;;;;;10905:16:74;;;;:37;;:48;;10943:9;;10905:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10979:19:74;;:51;;;;;-1:-1:-1;;;;;10979:19:74;;;;-1:-1:-1;10979:40:74;;-1:-1:-1;10979:51:74;;11020:9;;10979:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11101:49:74;;-1:-1:-1;11189:1:74;;-1:-1:-1;11153:38:74;;-1:-1:-1;11153:38:74;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;11252:49:74;;;;;;;;11267:5;11252:49;;11282:17;;-1:-1:-1;;;;;11282:17:74;11252:49;;;;;;;;11343;;;;;;;;11252;11343;;;;;;;;;11327:13;;11101:90;;-1:-1:-1;11252:49:74;11101:90;;11217:32;;11327:13;;;;:::i;:::-;;;;;;;;;;:65;11418:8;:16;:54;;;;;-1:-1:-1;;;;;11418:16:74;;;;:42;;:54;;11461:10;;11418:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11595:329:74;;;;;;;;;;;;;11704:4;11595:329;;;;;;;;;;;;;11797:5;11595:329;;;;11844:4;11595:329;;;;11885:16;;11595:329;11885:16;11595:329;;;;11556:33;;:36;;11595:329;;-1:-1:-1;11556:33:74;-1:-1:-1;11556:36:74;;;;-1:-1:-1;11556:36:74;;;-1:-1:-1;11556:36:74;;;;:::i;:::-;;;;;;:368;;;;12015:210;;;;;;;;12069:6;12015:210;;;;;;12106:4;12015:210;;;;;;12151:5;12015:210;;;;;;12198:4;12015:210;;;;;11981:12;:28;;;12010:1;11981:31;;;;;;;;;;:::i;:::-;;;;;;:244;;;;12330:175;;;;;;;;12403:6;12330:175;;;;;;4523:1;12330:175;;;12290:12;:34;;;12325:1;12290:37;;;;;;;;;;:::i;:::-;;;;;;:215;;;;12528:19;12550:13;:23;;;;;;;;;;-1:-1:-1;;;;;12550:23:74;-1:-1:-1;;;;;12550:48:74;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12672:40;;;12710:1;12672:40;;;;;;;;;12528:72;;-1:-1:-1;12622:47:74;;12672:40;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12672:40:74;;;;;;;;;;;;;;;;12622:90;;12746:159;;;;;;;;12803:6;12746:159;;;;;;12835:48;;;;;;;;12865:11;12861:1;:15;;;;:::i;:::-;12835:48;;;;12878:1;12835:48;;;;;;;;;;;12746:159;;12734:9;;:6;;-1:-1:-1;;12734:9:74;;;;:::i;:::-;;;;;;;;;;:171;12927:23;;:40;;;;;-1:-1:-1;;;;;12927:23:74;;;;:32;;:40;;12960:6;;12927:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12989:23:74;;:70;;;;;4278:4;12989:70;;;6989:66:139;-1:-1:-1;;;;;12989:23:74;;;;-1:-1:-1;12989:46:74;;-1:-1:-1;6962:18:139;;12989:70:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10269:2809;;;;;10228:2850;10264:3;;10228:2850;;;-1:-1:-1;13234:37:74;;;13269:1;13234:37;;;;;;;;;13180:51;;13234:37;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;13334:320:74;;;;;;;;13385:17;;-1:-1:-1;;;;;13385:17:74;13334:320;;13439:18;;13334:320;;;;;;;;;;;;13494:19;;13334:320;;;;;;;-1:-1:-1;13334:320:74;;;;;;;;;;;;;;;;;;13699:63;;;;;;;;4574:5;13699:63;;;;;;;;13680:16;;;;-1:-1:-1;13334:320:74;;13680:16;;-1:-1:-1;13680:16:74;;;;:::i;:::-;;;;;;;;;;:82;13788:16;;:56;;;;;-1:-1:-1;;;;;13788:16:74;;;;:41;;:56;;13830:13;;13788:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13154:713;;13965:375;;;;;;;;14028:13;:21;;14050:1;14028:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;13965:375;;14100:4;13965:375;;;;;;;;;;14201:5;13965:375;;;;14252:4;13965:375;;;;14297:16;;13965:375;14297:16;13965:375;;;;;13915:33;;:47;;;;;;;;;;;;:::i;:::-;;;;;;:425;;;;14412:248;;;;;;;;14470:13;:21;;14492:1;14470:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;14412:248;;14529:4;14412:248;;;;14578:5;14412:248;;;;14629:4;14412:248;;;;;;;;14367:28;;;:42;;;;;;;;;;;;:::i;:::-;;;;;;:293;;;;14738:205;;;;;;;;14815:13;:21;;14837:1;14815:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;14738:205;;4523:1;14738:205;;;14687:34;;;;:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:256;15002:17;;15033:33;;15002:65;;;;;-1:-1:-1;;;;;15002:17:74;;;;:30;;:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15085:12:74;;15111:28;;;;15085:55;;;;;-1:-1:-1;;;;;15085:12:74;;;;-1:-1:-1;15085:25:74;;-1:-1:-1;15085:55:74;;:12;:55;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15158:15:74;;15195:34;;;;;15158:72;;;;;-1:-1:-1;;;;;15158:15:74;;;;-1:-1:-1;15158:36:74;;-1:-1:-1;15158:72:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7038:8207;;;;6990:8801;;;15271:28;15255:12;:44;;;;;;;;:::i;:::-;;15251:540;;15319:31;15407:4;15442:13;:26;;15469:1;15442:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;15353:137;;-1:-1:-1;;;;;15442:29:74;;;;15353:137;;;:::i;:::-;-1:-1:-1;;;;;71359:15:139;;;71341:34;;71411:15;;71406:2;71391:18;;71384:43;71268:2;71253:18;15353:137:74;;;;;;;;;;;;;;;;;;;;;;;15319:171;;15508:13;:26;;15535:1;15508:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;:66;;;;;-1:-1:-1;;;;;854:55:139;;;15508:66:74;;;836:74:139;15508:29:74;;;;:45;;809:18:139;;15508:66:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15628:10;15592:13;:22;;15615:1;15592:25;;;;;;;;;;:::i;:::-;;;;;;;;;:47;;;;;-1:-1:-1;;;;;15592:47:74;;;;;-1:-1:-1;;;;;15592:47:74;;;;;;15696:10;15657:13;:25;;15683:1;15657:28;;;;;;;;;;:::i;:::-;;;;;;;;;:50;;;;;-1:-1:-1;;;;;15657:50:74;;;;;-1:-1:-1;;;;;15657:50:74;;;;;;15301:421;15251:540;;;15746:30;;;;;71640:2:139;15746:30:74;;;71622:21:139;71679:2;71659:18;;;71652:30;71718:22;71698:18;;;71691:50;71758:18;;15746:30:74;71438:344:139;15251:540:74;6971:3;;6935:8866;;;;15837:7;15832:669;15854:12;15850:16;;:1;:16;;;15832:669;;;15887:19;15909:13;:26;;15936:1;15909:29;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;15909:29:74;;-1:-1:-1;15956:12:74;:42;;;;;;;;:::i;:::-;;15952:259;;16018:8;-1:-1:-1;;;;;16018:30:74;;4574:5;16069:13;:22;;16092:1;16069:25;;;;;;;;;;:::i;:::-;;;;;;;;;;;16018:77;;;;;;;;;;56105:10:139;56093:23;;;16018:77:74;;;56075:42:139;-1:-1:-1;;;;;16069:25:74;56133:18:139;;;56126:83;56048:18;;16018:77:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16113:8;-1:-1:-1;;;;;16113:33:74;;4574:5;16167:13;:22;;16190:1;16167:25;;;;;;;;;;:::i;:::-;;;;;;;;;;16113:83;;;;;;;;;;72025:10:139;72013:23;;;16113:83:74;;;71995:42:139;-1:-1:-1;;;;;16167:25:74;72053:18:139;;;72046:83;72145:18;;;72138:34;71968:18;;16113:83:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15952:259;16229:7;16224:267;16246:12;16242:16;;:1;:16;;;16224:267;;;16292:1;16287:6;;:1;:6;;;16283:20;16295:8;16283:20;-1:-1:-1;;;;;16321:30:74;;;16352:5;:1;16356;16352:5;:::i;:::-;16359:22;:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;16321:64;;;;;;;;;;72384:4:139;72372:17;;;16321:64:74;;;72354:36:139;-1:-1:-1;;;;;16359:25:74;72406:18:139;;;72399:83;72327:18;;16321:64:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16403:8;-1:-1:-1;;;;;16403:33:74;;16437:1;16441;16437:5;;;;:::i;:::-;16444:25;:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16403:73;;;;;;;;;;72730:4:139;72718:17;;;16403:73:74;;;72700:36:139;-1:-1:-1;;;;;16444:28:74;72752:18:139;;;72745:83;72844:18;;;72837:34;72673:18;;16403:73:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16224:267;16260:3;;16224:267;;;-1:-1:-1;;15868:3:74;;15832:669;;2606:142:94;2655:35;2723:18;2702:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2702:39:94;;;;;;;;;;;;;;;;;;;;;;2606:142;:::o;24121:575:74:-;24219:19;24252:9;:32;24262:21;:12;;:19;:21::i;:::-;24252:32;;;;;;;;;;;;;-1:-1:-1;24252:32:74;;;;-1:-1:-1;;;;;24252:32:74;;-1:-1:-1;;24326:39:74;24356:8;24326:29;:39::i;:::-;24295:70;;;;24376:20;24399:74;;;;;;;;24406:21;:12;;:19;:21::i;:::-;24399:74;;;;;;24429:21;:12;;:19;:21::i;:::-;24399:74;;;;24452:20;:12;;:18;:20::i;:::-;24399:74;;;;24376:97;-1:-1:-1;;;;;;24483:18:74;;;24522:3;24510:5;24376:97;24561:26;:12;;:24;:26::i;:::-;24601:19;:12;;:17;:19::i;:::-;24634:22;:12;;:20;:22::i;:::-;24670:9;;;;;;;;;;;;24483:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24209:487;;;;24121:575;;;:::o;5604:176:73:-;5682:11;5695:13;5727:46;5765:7;;5727:37;:46::i;19989:464:74:-;20084:13;20100:21;:12;;:19;:21::i;:::-;20084:37;;20131:18;20152:23;:12;;:21;:23::i;:::-;20231:20;;;20185:43;20231:20;;;:12;:20;;;;;;;:32;;;;;;;;20131:44;;-1:-1:-1;20318:19:74;:12;;:17;:19::i;:::-;20303:34;-1:-1:-1;20347:21:74;:5;20303:34;20347:15;:21::i;:::-;20378:13;;;;:7;:13;;;;;:28;20394:12;;20378:13;:28;:::i;:::-;-1:-1:-1;20416:19:74;;;;:13;:19;;;;;:30;20438:8;;20416:19;:30;:::i;2671:150:50:-;2734:6;2773:39;706:2;655;2773:7;;:39;:::i;:::-;2766:47;;;:::i;:::-;2759:55;;;2671:150;-1:-1:-1;;;2671:150:50:o;2148:414:73:-;2244:11;2257;2270:13;2296:10;2308:19;2331:110;2375:8;533:1:13;2331:30:73;:110::i;:::-;2295:146;;;;2459:5;2451:56;;;;;;;76619:2:139;2451:56:73;;;76601:21:139;76658:2;76638:18;;;76631:30;76697:34;76677:18;;;76670:62;76768:8;76748:18;;;76741:36;76794:19;;2451:56:73;76417:402:139;2451:56:73;2524:31;;;;;:4;;:23;;:31;;2548:6;;2524:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2517:38;;;;;;;;2148:414;;;;;:::o;2230:148:50:-;2293:6;2332:37;605:2;557:1;2332:7;;:37;:::i;2384:142::-;2447:7;2481:37;655:2;605;2481:7;;:37;:::i;:::-;2473:46;;;:::i;2078:146::-;2140:6;2179:36;557:1;493;2179:7;;:36;:::i;:::-;2172:44;;;:::i;:::-;2165:52;;;2078:146;-1:-1:-1;;;2078:146:50:o;2976:130::-;3044:7;3070:29;:17;3079:7;;3070:8;:17::i;:::-;1210:15:42;1084:151;3112:138:50;3173:7;3207:35;862:3;785:2;3207:7;;:35;:::i;4800:67:74:-;4842:18;:16;:18::i;:::-;4800:67::o;27055:91:91:-;27122:17;;;;;-1:-1:-1;;;;;55347:55:139;;27122:17:91;;;55329:74:139;55419:18;;;55412:34;;;27122:7:91;;;;55302:18:139;;27122:17:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27055:91;;:::o;19244:399:74:-;19342:12;19366:21;19420:13;19403:31;;;;;;;;:::i;:::-;;;;-1:-1:-1;;19403:31:74;;;;;;;;;;19390:63;;19436:16;;19403:31;19390:63;;:::i;:::-;;;;;;;;;;;;;19366:87;;19531:8;19525:15;19518:4;19508:8;19504:19;19501:1;19494:47;19486:55;;19576:4;19564:17;19554:73;;19611:1;19608;19601:12;1715:427:73;1814:12;1828:11;1841:13;1867:10;1879:19;1902:113;1946:8;418:1:13;1902:30:73;:113::i;:::-;1866:149;;;;2033:5;2025:59;;;;;;;79333:2:139;2025:59:73;;;79315:21:139;79372:2;79352:18;;;79345:30;79411:34;79391:18;;;79384:62;79482:11;79462:18;;;79455:39;79511:19;;2025:59:73;79131:405:139;2025:59:73;2101:34;;;;;:4;;:26;;:34;;2128:6;;2101:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2094:41;;;;;;;-1:-1:-1;2094:41:73;;;-1:-1:-1;1715:427:73;-1:-1:-1;;;;1715:427:73:o;2697:371:13:-;2789:12;;;2863:2;2845:20;;;;;:44;;-1:-1:-1;2887:2:13;2869:20;;;2845:44;2841:90;;;2898:33;;;;;;;;;;;;;;2841:90;2949:16;:7;;2963:1;2949:13;:16::i;:::-;2941:24;-1:-1:-1;2981:17:13;:7;;2996:1;2981:14;:17::i;:::-;2975:23;-1:-1:-1;3034:2:13;3016:20;;:45;;3060:1;3016:45;;;3039:18;:7;;3054:2;3039:14;:18::i;:::-;3008:53;;2697:371;;;;;:::o;1788:125:50:-;1851:14;;1884:22;785:2;1851:14;1884:7;;:22;:::i;3397:132::-;3461:14;;3500:21;:7;785:2;3500:7;;:21;:::i;25755:300:74:-;25871:58;;80305:66:139;25871:58:74;;;80293:79:139;80388:12;;;80381:28;;;25806:12:74;;25830:28;;80425:12:139;;25871:58:74;;;-1:-1:-1;;25871:58:74;;;;;;;;;;25861:69;;25871:58;25861:69;;;;25974:32;;;25982:1;25974:32;;;80630:25:139;80671:18;;;80664:34;;;25861:69:74;-1:-1:-1;25941:7:74;;;;;;336:42:88;;25974:7:74;;80603:18:139;;25974:32:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26023:25;;;;;;81264:19:139;;;;81299:12;;;81292:28;;;;81358:3;81354:16;;;;81372:66;81350:89;81336:12;;;81329:111;26023:25:74;;;;;;;;;81456:12:139;;;;26023:25:74;;;;25755:300;-1:-1:-1;;;;;;25755:300:74:o;3256:135:50:-;3320:14;;3359:24;:7;862:3;3359:7;;:24;:::i;1357:742:13:-;1472:16;1490:21;1472:16;1612:1;1602:11;;1472:16;1674:22;:8;;1602:11;1674:14;:22::i;:::-;1720:1;1710:11;;;;;1660:36;-1:-1:-1;1781:21:13;:8;;1710:11;1781:13;:21::i;:::-;1768:34;-1:-1:-1;1932:1:13;1923:10;;1987:13;;;;;2023:31;1987:13;1923:10;2023:8;;:31;:::i;:::-;1357:742;;2014:40;;-1:-1:-1;2014:40:13;;-1:-1:-1;;;2068:14:13;;;;-1:-1:-1;;;1357:742:13:o;4032:231:132:-;4097:13;4126:12;4132:5;5667:12;5653:10;;;5667:12;5653:10;;;5667:12;;5653:26;;5564:122;4126:12;4122:56;;;4140:38;1413:4:124;4140:11:132;:38::i;:::-;-1:-1:-1;4231:10:132;;:14;:10;;;;;;;:14;4219:27;;;;;:11;;;;:27;;;;;;;4032:231::o;2119:386::-;2251:10;;2182:13;;2251:10;;;;;;;2292:12;2279:25;;2275:65;;2306:34;1315:4:124;2306:11:132;:34::i;:::-;2354:11;;2387:22;;;;;;;;2354:11;2387;;:22;;;;;;;2423:29;;;2466:22;;;;;;;;;;;;;-1:-1:-1;2387:22:132;2119:386::o;2568:228:73:-;2694:10;2728:61;2759:8;2769:19;2728:30;:61::i;:::-;-1:-1:-1;2716:73:73;2568:228;-1:-1:-1;;;2568:228:73:o;1271:438::-;1371:14;1387:16;1416:10;1428:19;1451:115;1495:8;363:1:13;1451:30:73;:115::i;:::-;1415:151;;;;1584:5;1576:60;;;;;;;81681:2:139;1576:60:73;;;81663:21:139;81720:2;81700:18;;;81693:30;81759:34;81739:18;;;81732:62;81830:12;81810:18;;;81803:40;81860:19;;1576:60:73;81479:406:139;1576:60:73;1667:35;;;;;:4;;:27;;:35;;1695:6;;1667:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1646:56;;;;;;;-1:-1:-1;1271:438:73;-1:-1:-1;;;;1271:438:73:o;3074:380:13:-;3163:11;;;3244:2;3226:20;;;;;:44;;-1:-1:-1;3268:2:13;3250:20;;;3226:44;3222:87;;;3279:30;;;;;;;;;;;;;;3222:87;3325:17;:7;;3340:1;3325:14;:17::i;:::-;3319:23;-1:-1:-1;3367:17:13;:7;;3381:2;3367:13;:17::i;:::-;3352:32;-1:-1:-1;3420:2:13;3402:20;;:45;;3446:1;3402:45;;;3425:18;:7;;3440:2;3425:14;:18::i;2420:271::-;2499:14;;2565:2;2547:20;;2543:67;;2576:34;;;;;;;;;;;;;;2543:67;2629:17;:7;;2644:1;2629:14;:17::i;:::-;2620:26;-1:-1:-1;2667:17:13;:7;;2681:2;2667:13;:17::i;:::-;2656:28;;2420:271;;;;;:::o;858:407:73:-;943:11;956:13;982:10;994:19;1017:113;1061:8;306:1:13;1017:30:73;:113::i;:::-;981:149;;;;1148:5;1140:59;;;;;;;82409:2:139;1140:59:73;;;82391:21:139;82448:2;82428:18;;;82421:30;82487:34;82467:18;;;82460:62;82558:11;82538:18;;;82531:39;82587:19;;1140:59:73;82207:405:139;1140:59:73;1224:34;;;;;:4;;:26;;:34;;1251:6;;1224:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1209:49;;;;;;;;-1:-1:-1;858:407:73;-1:-1:-1;;;;858:407:73:o;2105:309:13:-;2183:11;;2243:2;2225:20;;;;;:44;;-1:-1:-1;2267:2:13;2249:20;;;2225:44;2221:90;;;2278:33;;;;;;;;;;;;;;2221:90;2327:17;:7;;2342:1;2327:14;:17::i;:::-;2321:23;-1:-1:-1;2380:2:13;2362:20;;:45;;2406:1;2362:45;;;2385:18;:7;;2400:2;2385:14;:18::i;2827:143:50:-;2892:7;2926:36;785:2;706;2926:7;;:36;:::i;2658:320:132:-;2784:12;;;;;;:16;;;2832:10;;;;;2818:24;;;;2814:63;;2844:33;1536:4:124;2844:11:132;:33::i;:::-;2891:23;;;;;;:11;;;:23;;;;;:31;;;;2936:25;;;;;;;2658:320::o;2802:2541:73:-;3012:10;;:27;;;;;2937:10;;2949:19;;2937:10;;3012;;;-1:-1:-1;;;;;3012:10:73;;:17;;:27;;3030:8;;3012:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3012:27:73;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3306:12:73;;;3050:14;3306:12;;;;;;;;;2980:59;;-1:-1:-1;3050:14:73;;;;;;;3329:1893;3345:12;:19;3336:6;:28;3329:1893;;;3438:45;;;;;3381:16;;;;;;3438:4;;:23;;:45;;3462:12;;3476:6;;3438:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3438:45:73;;;;;;;;;;;;:::i;:::-;3380:103;;;;;;3606:19;3592:33;;:10;:33;;;3588:1591;;3645:11;;;;;3802:51;;;;;3798:1367;;3892:30;;;;;:4;;:26;;:30;;3919:2;;3892:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3877:45;;-1:-1:-1;3877:45:73;-1:-1:-1;3944:18:73;3877:45;3944:18;;:::i;:::-;;-1:-1:-1;3984:22:73;4001:5;3984:22;;:::i;:::-;;;4055:11;4068:13;4038:44;;;;;;;;84852:3:139;84848:16;;;84757:66;84844:25;;;84832:38;;84904:16;;;;84900:25;84895:2;84886:12;;84879:47;84951:2;84942:12;;84590:370;4038:44:73;;;;;;;;;;;;;4028:54;;3798:1367;;;4111:53;;;;;4107:1058;;4311:31;;;;;:4;;:27;;:31;;4339:2;;4311:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4291:51;;-1:-1:-1;4291:51:73;-1:-1:-1;4364:22:73;4291:51;4364:22;;:::i;:::-;4418:41;;85156:66:139;85142:3;85138:16;;;85134:89;4418:41:73;;;85122:102:139;85240:12;;;85233:28;;;4364:22:73;;-1:-1:-1;85277:12:139;;4418:41:73;84965:330:139;4107:1058:73;4488:51;;;;;4484:681;;4585:30;;;;;:4;;:26;;:30;;4612:2;;4585:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4563:52;;-1:-1:-1;4563:52:73;-1:-1:-1;4563:52:73;-1:-1:-1;4637:18:73;4563:52;4637:18;;:::i;:::-;;-1:-1:-1;4677:22:73;4694:5;4677:22;;:::i;:::-;4731:51;;85517:66:139;85503:3;85499:16;;;85495:89;4731:51:73;;;85483:102:139;85604:66;85707:3;85703:16;;;85699:25;;85686:11;;;85679:46;85759:16;;;85755:25;85741:12;;;85734:47;4677:22:73;;-1:-1:-1;85797:12:139;;4731:51:73;85300:515:139;4484:681:73;4811:48;;;;;4807:358;;4904:27;;;;;:4;;:23;;:27;;4928:2;;4904:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4883:48;;-1:-1:-1;4883:48:73;;-1:-1:-1;4883:48:73;-1:-1:-1;4953:22:73;4883:48;4953:22;;:::i;:::-;;-1:-1:-1;4997:18:73;5012:3;4997:18;;:::i;:::-;;-1:-1:-1;5037:20:73;5053:4;5037:20;;:::i;:::-;5089:57;;86190:66:139;86285:3;86281:16;;;86277:25;;5089:57:73;;;86265:38:139;86355:66;86341:3;86337:16;;;86333:89;86319:12;;;86312:111;86457:16;;;86453:25;86439:12;;;86432:47;5037:20:73;;-1:-1:-1;86495:12:139;;5089:57:73;;;;;;;;;;;;5079:67;;4807:358;3627:1552;;;;;3588:1591;5201:10;-1:-1:-1;3329:1893:73;;-1:-1:-1;;3329:1893:73;;5236:7;:14;5254:1;5236:19;5232:73;;5279:5;;-1:-1:-1;5286:7:73;-1:-1:-1;5271:23:73;;-1:-1:-1;;;;;5271:23:73;5232:73;5322:4;;5328:7;;-1:-1:-1;2802:2541:73;-1:-1:-1;;;;;;;;2802:2541:73:o;765:87::-;825:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;812:10;;:33;;;;;-1:-1:-1;;;;;812:33:73;;;;;-1:-1:-1;;;;;812:33:73;;;;;;765:87::o;229:215:43:-;306:6;371:1;362:10;;407:18;362:10;:6;407;;:18;:::i;:::-;400:26;;;:::i;:::-;393:34;;;229:215;-1:-1:-1;;;;;229:215:43:o;892:220::-;970:7;1036:2;1027:11;;1075:18;1027:11;:6;1075;;:18;:::i;:::-;1067:27;;;:::i;:::-;1059:36;;;892:220;-1:-1:-1;;;;;892:220:43:o;95:128::-;171:5;201:6;;208;201:14;;;;;;;:::i;:::-;;;;;;;;;95:128;-1:-1:-1;;;;;95:128:43:o;1776:194:124:-;1881:10;1875:4;1868:24;1918:4;1912;1905:18;1949:4;1943;1936:18;450:215:43;527:6;592:1;583:10;;628:18;583:10;:6;628;;:18;:::i;:::-;621:26;;;:::i;:::-;614:34;;;450:215;-1:-1:-1;;;;;450:215:43:o;1570:210::-;1647:7;1713:2;1704:11;;1744:18;1704:11;:6;1744;;:18;:::i;:::-;1736:27;;;:::i;:::-;1729:34;1570:210;-1:-1:-1;;;;;1570:210:43:o;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:121:139;99:10;92:5;88:22;81:5;78:33;68:61;;125:1;122;115:12;68:61;14:121;:::o;140:154::-;-1:-1:-1;;;;;219:5:139;215:54;208:5;205:65;195:93;;284:1;281;274:12;299:386;366:6;374;427:2;415:9;406:7;402:23;398:32;395:52;;;443:1;440;433:12;395:52;482:9;469:23;501:30;525:5;501:30;:::i;:::-;550:5;-1:-1:-1;607:2:139;592:18;;579:32;620:33;579:32;620:33;:::i;:::-;672:7;662:17;;;299:386;;;;;:::o;921:347::-;972:8;982:6;1036:3;1029:4;1021:6;1017:17;1013:27;1003:55;;1054:1;1051;1044:12;1003:55;-1:-1:-1;1077:20:139;;1120:18;1109:30;;1106:50;;;1152:1;1149;1142:12;1106:50;1189:4;1181:6;1177:17;1165:29;;1241:3;1234:4;1225:6;1217;1213:19;1209:30;1206:39;1203:59;;;1258:1;1255;1248:12;1273:184;1325:77;1322:1;1315:88;1422:4;1419:1;1412:15;1446:4;1443:1;1436:15;1462:254;1535:2;1529:9;1577:4;1565:17;;1612:18;1597:34;;1633:22;;;1594:62;1591:88;;;1659:18;;:::i;:::-;1695:2;1688:22;1462:254;:::o;1721:334::-;1792:2;1786:9;1848:2;1838:13;;-1:-1:-1;;1834:86:139;1822:99;;1951:18;1936:34;;1972:22;;;1933:62;1930:88;;;1998:18;;:::i;:::-;2034:2;2027:22;1721:334;;-1:-1:-1;1721:334:139:o;2060:245::-;2108:4;2141:18;2133:6;2130:30;2127:56;;;2163:18;;:::i;:::-;-1:-1:-1;2220:2:139;2208:15;-1:-1:-1;;2204:88:139;2294:4;2200:99;;2060:245::o;2310:462::-;2352:5;2405:3;2398:4;2390:6;2386:17;2382:27;2372:55;;2423:1;2420;2413:12;2372:55;2459:6;2446:20;2490:48;2506:31;2534:2;2506:31;:::i;:::-;2490:48;:::i;:::-;2563:2;2554:7;2547:19;2609:3;2602:4;2597:2;2589:6;2585:15;2581:26;2578:35;2575:55;;;2626:1;2623;2616:12;2575:55;2691:2;2684:4;2676:6;2672:17;2665:4;2656:7;2652:18;2639:55;2739:1;2714:16;;;2732:4;2710:27;2703:38;;;;2718:7;2310:462;-1:-1:-1;;;2310:462:139:o;2777:826::-;2883:6;2891;2899;2907;2960:2;2948:9;2939:7;2935:23;2931:32;2928:52;;;2976:1;2973;2966:12;2928:52;3016:9;3003:23;3045:18;3086:2;3078:6;3075:14;3072:34;;;3102:1;3099;3092:12;3072:34;3141:58;3191:7;3182:6;3171:9;3167:22;3141:58;:::i;:::-;3218:8;;-1:-1:-1;3115:84:139;-1:-1:-1;3306:2:139;3291:18;;3278:32;;-1:-1:-1;3322:16:139;;;3319:36;;;3351:1;3348;3341:12;3319:36;3374:51;3417:7;3406:8;3395:9;3391:24;3374:51;:::i;:::-;3364:61;;3478:2;3467:9;3463:18;3450:32;3434:48;;3507:2;3497:8;3494:16;3491:36;;;3523:1;3520;3513:12;3491:36;;3546:51;3589:7;3578:8;3567:9;3563:24;3546:51;:::i;:::-;3536:61;;;2777:826;;;;;;;:::o;4649:250::-;4734:1;4744:113;4758:6;4755:1;4752:13;4744:113;;;4834:11;;;4828:18;4815:11;;;4808:39;4780:2;4773:10;4744:113;;;-1:-1:-1;;4891:1:139;4873:16;;4866:27;4649:250::o;4904:329::-;4945:3;4983:5;4977:12;5010:6;5005:3;4998:19;5026:76;5095:6;5088:4;5083:3;5079:14;5072:4;5065:5;5061:16;5026:76;:::i;:::-;5147:2;5135:15;-1:-1:-1;;5131:88:139;5122:98;;;;5222:4;5118:109;;4904:329;-1:-1:-1;;4904:329:139:o;5238:217::-;5385:2;5374:9;5367:21;5348:4;5405:44;5445:2;5434:9;5430:18;5422:6;5405:44;:::i;5460:114::-;5544:4;5537:5;5533:16;5526:5;5523:27;5513:55;;5564:1;5561;5554:12;5579:152;5656:20;;5705:1;5695:12;;5685:40;;5721:1;5718;5711:12;5685:40;5579:152;;;:::o;5736:343::-;5819:6;5827;5880:2;5868:9;5859:7;5855:23;5851:32;5848:52;;;5896:1;5893;5886:12;5848:52;5935:9;5922:23;5954:29;5977:5;5954:29;:::i;:::-;6002:5;-1:-1:-1;6026:47:139;6069:2;6054:18;;6026:47;:::i;6084:488::-;6137:3;6175:5;6169:12;6202:6;6197:3;6190:19;6228:4;6257;6252:3;6248:14;6241:21;;6296:4;6289:5;6285:16;6319:1;6329:218;6343:6;6340:1;6337:13;6329:218;;;6408:13;;-1:-1:-1;;;;;6404:62:139;6392:75;;6487:12;;;;6522:15;;;;6365:1;6358:9;6329:218;;;-1:-1:-1;6563:3:139;;6084:488;-1:-1:-1;;;;;6084:488:139:o;6577:261::-;6756:2;6745:9;6738:21;6719:4;6776:56;6828:2;6817:9;6813:18;6805:6;6776:56;:::i;7066:588::-;7148:6;7156;7164;7217:2;7205:9;7196:7;7192:23;7188:32;7185:52;;;7233:1;7230;7223:12;7185:52;7273:9;7260:23;7306:18;7298:6;7295:30;7292:50;;;7338:1;7335;7328:12;7292:50;7361:49;7402:7;7393:6;7382:9;7378:22;7361:49;:::i;:::-;7351:59;;;7460:2;7449:9;7445:18;7432:32;7473:29;7496:5;7473:29;:::i;:::-;7521:5;-1:-1:-1;7578:2:139;7563:18;;7550:32;7591:31;7550:32;7591:31;:::i;:::-;7641:7;7631:17;;;7066:588;;;;;:::o;7659:656::-;7711:3;7742;7774:5;7768:12;7801:6;7796:3;7789:19;7827:4;7856;7851:3;7847:14;7840:21;;7914:4;7904:6;7901:1;7897:14;7890:5;7886:26;7882:37;7953:4;7946:5;7942:16;7976:1;7986:303;8000:6;7997:1;7994:13;7986:303;;;-1:-1:-1;;8075:5:139;8069:4;8065:16;8061:89;8056:3;8049:102;8172:37;8204:4;8195:6;8189:13;8172:37;:::i;:::-;8267:12;;;;8164:45;-1:-1:-1;8232:15:139;;;;8022:1;8015:9;7986:303;;;-1:-1:-1;8305:4:139;;7659:656;-1:-1:-1;;;;;;;7659:656:139:o;8320:1159::-;8526:4;8555:2;8595;8584:9;8580:18;8625:2;8614:9;8607:21;8648:6;8683;8677:13;8714:6;8706;8699:22;8740:2;8730:12;;8773:2;8762:9;8758:18;8751:25;;8835:2;8825:6;8822:1;8818:14;8807:9;8803:30;8799:39;8873:2;8865:6;8861:15;8894:1;8904:546;8918:6;8915:1;8912:13;8904:546;;;8983:22;;;9007:66;8979:95;8967:108;;9098:13;;9143:9;;-1:-1:-1;;;;;9139:58:139;9124:74;;9237:11;;9231:18;9269:15;;;9262:27;;;9312:58;9354:15;;;9231:18;9312:58;:::i;:::-;9428:12;;;;9302:68;-1:-1:-1;;9393:15:139;;;;8940:1;8933:9;8904:546;;;-1:-1:-1;9467:6:139;;8320:1159;-1:-1:-1;;;;;;;;8320:1159:139:o;9739:1114::-;9862:6;9870;9878;9886;9894;9902;9910;9963:3;9951:9;9942:7;9938:23;9934:33;9931:53;;;9980:1;9977;9970:12;9931:53;10019:9;10006:23;10038:30;10062:5;10038:30;:::i;:::-;10087:5;-1:-1:-1;10144:2:139;10129:18;;10116:32;10157:33;10116:32;10157:33;:::i;:::-;10209:7;-1:-1:-1;10267:2:139;10252:18;;10239:32;10290:18;10320:14;;;10317:34;;;10347:1;10344;10337:12;10317:34;10370:49;10411:7;10402:6;10391:9;10387:22;10370:49;:::i;:::-;10360:59;;10466:2;10455:9;10451:18;10438:32;10428:42;;10522:3;10511:9;10507:19;10494:33;10479:48;;10536:33;10561:7;10536:33;:::i;:::-;10588:7;;-1:-1:-1;10648:3:139;10633:19;;10620:33;;10665:16;;;10662:36;;;10694:1;10691;10684:12;10662:36;;10733:60;10785:7;10774:8;10763:9;10759:24;10733:60;:::i;:::-;9739:1114;;;;-1:-1:-1;9739:1114:139;;-1:-1:-1;9739:1114:139;;;;10707:86;;-1:-1:-1;;;9739:1114:139:o;10858:409::-;10928:6;10936;10989:2;10977:9;10968:7;10964:23;10960:32;10957:52;;;11005:1;11002;10995:12;10957:52;11045:9;11032:23;11078:18;11070:6;11067:30;11064:50;;;11110:1;11107;11100:12;11064:50;11149:58;11199:7;11190:6;11179:9;11175:22;11149:58;:::i;:::-;11226:8;;11123:84;;-1:-1:-1;10858:409:139;-1:-1:-1;;;;10858:409:139:o;11678:117::-;11763:6;11756:5;11752:18;11745:5;11742:29;11732:57;;11785:1;11782;11775:12;11800:313;11867:6;11875;11928:2;11916:9;11907:7;11903:23;11899:32;11896:52;;;11944:1;11941;11934:12;11896:52;11983:9;11970:23;12002:30;12026:5;12002:30;:::i;:::-;12051:5;12103:2;12088:18;;;;12075:32;;-1:-1:-1;;;11800:313:139:o;12310:628::-;12398:6;12406;12414;12467:2;12455:9;12446:7;12442:23;12438:32;12435:52;;;12483:1;12480;12473:12;12435:52;12523:9;12510:23;12552:18;12593:2;12585:6;12582:14;12579:34;;;12609:1;12606;12599:12;12579:34;12648:58;12698:7;12689:6;12678:9;12674:22;12648:58;:::i;:::-;12725:8;;-1:-1:-1;12622:84:139;-1:-1:-1;12813:2:139;12798:18;;12785:32;;-1:-1:-1;12829:16:139;;;12826:36;;;12858:1;12855;12848:12;12826:36;;12881:51;12924:7;12913:8;12902:9;12898:24;12881:51;:::i;:::-;12871:61;;;12310:628;;;;;:::o;12943:183::-;13003:4;13036:18;13028:6;13025:30;13022:56;;;13058:18;;:::i;:::-;-1:-1:-1;13103:1:139;13099:14;13115:4;13095:25;;12943:183::o;13131:743::-;13185:5;13238:3;13231:4;13223:6;13219:17;13215:27;13205:55;;13256:1;13253;13246:12;13205:55;13292:6;13279:20;13318:4;13342:60;13358:43;13398:2;13358:43;:::i;13342:60::-;13424:3;13448:2;13443:3;13436:15;13476:4;13471:3;13467:14;13460:21;;13533:4;13527:2;13524:1;13520:10;13512:6;13508:23;13504:34;13490:48;;13561:3;13553:6;13550:15;13547:35;;;13578:1;13575;13568:12;13547:35;13614:4;13606:6;13602:17;13628:217;13644:6;13639:3;13636:15;13628:217;;;13724:3;13711:17;13741:31;13766:5;13741:31;:::i;:::-;13785:18;;13823:12;;;;13661;;13628:217;;;-1:-1:-1;13863:5:139;13131:743;-1:-1:-1;;;;;;13131:743:139:o;13879:1211::-;13996:6;14004;14057:2;14045:9;14036:7;14032:23;14028:32;14025:52;;;14073:1;14070;14063:12;14025:52;14113:9;14100:23;14142:18;14183:2;14175:6;14172:14;14169:34;;;14199:1;14196;14189:12;14169:34;14222:61;14275:7;14266:6;14255:9;14251:22;14222:61;:::i;:::-;14212:71;;14302:2;14292:12;;14357:2;14346:9;14342:18;14329:32;14386:2;14376:8;14373:16;14370:36;;;14402:1;14399;14392:12;14370:36;14425:24;;;-1:-1:-1;14480:4:139;14472:13;;14468:27;-1:-1:-1;14458:55:139;;14509:1;14506;14499:12;14458:55;14545:2;14532:16;14568:60;14584:43;14624:2;14584:43;:::i;14568:60::-;14662:15;;;14744:1;14740:10;;;;14732:19;;14728:28;;;14693:12;;;;14768:19;;;14765:39;;;14800:1;14797;14790:12;14765:39;14824:11;;;;14844:216;14860:6;14855:3;14852:15;14844:216;;;14940:3;14927:17;14957:30;14981:5;14957:30;:::i;:::-;15000:18;;14877:12;;;;15038;;;;14844:216;;;15079:5;15069:15;;;;;;;13879:1211;;;;;:::o;15095:511::-;15147:3;15185:5;15179:12;15212:6;15207:3;15200:19;15238:4;15267;15262:3;15258:14;15251:21;;15306:4;15299:5;15295:16;15329:1;15339:242;15353:6;15350:1;15347:13;15339:242;;;15418:13;;15433:66;15414:86;15402:99;;15521:12;;;;15556:15;;;;15375:1;15368:9;15339:242;;15611:1245;15831:4;15860:2;15900;15889:9;15885:18;15930:2;15919:9;15912:21;15953:6;15988;15982:13;16019:6;16011;16004:22;16045:2;16035:12;;16078:2;16067:9;16063:18;16056:25;;16140:2;16130:6;16127:1;16123:14;16112:9;16108:30;16104:39;16178:2;16170:6;16166:15;16199:1;16209:618;16223:6;16220:1;16217:13;16209:618;;;16312:66;16300:9;16292:6;16288:22;16284:95;16279:3;16272:108;16409:6;16403:13;16455:2;16449:9;16486:2;16478:6;16471:18;16516:47;16559:2;16551:6;16547:15;16533:12;16516:47;:::i;:::-;16604:11;;;16598:18;16653:19;;;16636:15;;;16629:44;16598:18;16502:61;-1:-1:-1;16696:51:139;16502:61;16598:18;16696:51;:::i;:::-;16805:12;;;;16686:61;-1:-1:-1;;;16770:15:139;;;;16245:1;16238:9;16209:618;;16861:477;16940:6;16948;16956;17009:2;16997:9;16988:7;16984:23;16980:32;16977:52;;;17025:1;17022;17015:12;16977:52;17065:9;17052:23;17098:18;17090:6;17087:30;17084:50;;;17130:1;17127;17120:12;17084:50;17169:58;17219:7;17210:6;17199:9;17195:22;17169:58;:::i;:::-;17246:8;;17143:84;;-1:-1:-1;17328:2:139;17313:18;;;;17300:32;;16861:477;-1:-1:-1;;;;16861:477:139:o;17343:325::-;17431:6;17426:3;17419:19;17483:6;17476:5;17469:4;17464:3;17460:14;17447:43;;17535:1;17528:4;17519:6;17514:3;17510:16;17506:27;17499:38;17401:3;17657:4;-1:-1:-1;;17582:2:139;17574:6;17570:15;17566:88;17561:3;17557:98;17553:109;17546:116;;17343:325;;;;:::o;17673:393::-;17894:4;17886:6;17882:17;17871:9;17864:36;17936:2;17931;17920:9;17916:18;17909:30;17845:4;17956:61;18013:2;18002:9;17998:18;17990:6;17982;17956:61;:::i;:::-;17948:69;;18053:6;18048:2;18037:9;18033:18;18026:34;17673:393;;;;;;;:::o;18071:348::-;18155:6;18208:2;18196:9;18187:7;18183:23;18179:32;18176:52;;;18224:1;18221;18214:12;18176:52;18264:9;18251:23;18297:18;18289:6;18286:30;18283:50;;;18329:1;18326;18319:12;18283:50;18352:61;18405:7;18396:6;18385:9;18381:22;18352:61;:::i;:::-;18342:71;18071:348;-1:-1:-1;;;;18071:348:139:o;18674:732::-;18777:6;18785;18793;18801;18809;18862:3;18850:9;18841:7;18837:23;18833:33;18830:53;;;18879:1;18876;18869:12;18830:53;18918:9;18905:23;18937:30;18961:5;18937:30;:::i;:::-;18986:5;-1:-1:-1;19038:2:139;19023:18;;19010:32;;-1:-1:-1;19089:2:139;19074:18;;19061:32;;-1:-1:-1;19145:2:139;19130:18;;19117:32;19158:33;19117:32;19158:33;:::i;:::-;19210:7;-1:-1:-1;19268:3:139;19253:19;;19240:33;19296:18;19285:30;;19282:50;;;19328:1;19325;19318:12;19282:50;19351:49;19392:7;19383:6;19372:9;19368:22;19351:49;:::i;:::-;19341:59;;;18674:732;;;;;;;;:::o;19411:280::-;19610:2;19599:9;19592:21;19573:4;19630:55;19681:2;19670:9;19666:18;19658:6;19630:55;:::i;19960:1157::-;20164:4;20193:2;20233;20222:9;20218:18;20263:2;20252:9;20245:21;20286:6;20321;20315:13;20352:6;20344;20337:22;20378:2;20368:12;;20411:2;20400:9;20396:18;20389:25;;20473:2;20463:6;20460:1;20456:14;20445:9;20441:30;20437:39;20511:2;20503:6;20499:15;20532:1;20542:546;20556:6;20553:1;20550:13;20542:546;;;20621:22;;;20645:66;20617:95;20605:108;;20736:13;;20781:9;;-1:-1:-1;;;;;20777:58:139;20762:74;;20875:11;;20869:18;20907:15;;;20900:27;;;20950:58;20992:15;;;20869:18;20950:58;:::i;:::-;21066:12;;;;20940:68;-1:-1:-1;;21031:15:139;;;;20578:1;20571:9;20542:546;;22014:832;22120:6;22128;22136;22144;22152;22205:3;22193:9;22184:7;22180:23;22176:33;22173:53;;;22222:1;22219;22212:12;22173:53;22262:9;22249:23;22291:18;22332:2;22324:6;22321:14;22318:34;;;22348:1;22345;22338:12;22318:34;22387:58;22437:7;22428:6;22417:9;22413:22;22387:58;:::i;:::-;22464:8;;-1:-1:-1;22361:84:139;-1:-1:-1;22552:2:139;22537:18;;22524:32;;-1:-1:-1;22568:16:139;;;22565:36;;;22597:1;22594;22587:12;22565:36;;22620:51;22663:7;22652:8;22641:9;22637:24;22620:51;:::i;:::-;22610:61;;;22718:2;22707:9;22703:18;22690:32;22680:42;;22772:2;22761:9;22757:18;22744:32;22785:31;22810:5;22785:31;:::i;:::-;22835:5;22825:15;;;22014:832;;;;;;;;:::o;22851:271::-;22934:6;22987:2;22975:9;22966:7;22962:23;22958:32;22955:52;;;23003:1;23000;22993:12;22955:52;23042:9;23029:23;23061:31;23086:5;23061:31;:::i;23127:313::-;23194:6;23202;23255:2;23243:9;23234:7;23230:23;23226:32;23223:52;;;23271:1;23268;23261:12;23223:52;23310:9;23297:23;23329:30;23353:5;23329:30;:::i;23739:579::-;23856:6;23864;23872;23925:2;23913:9;23904:7;23900:23;23896:32;23893:52;;;23941:1;23938;23931:12;23893:52;23980:9;23967:23;23999:29;24022:5;23999:29;:::i;:::-;24047:5;-1:-1:-1;24071:47:139;24114:2;24099:18;;24071:47;:::i;:::-;24061:57;;24169:2;24158:9;24154:18;24141:32;24196:18;24188:6;24185:30;24182:50;;;24228:1;24225;24218:12;24182:50;24251:61;24304:7;24295:6;24284:9;24280:22;24251:61;:::i;24323:146::-;24409:34;24402:5;24398:46;24391:5;24388:57;24378:85;;24459:1;24456;24449:12;24474:247;24533:6;24586:2;24574:9;24565:7;24561:23;24557:32;24554:52;;;24602:1;24599;24592:12;24554:52;24641:9;24628:23;24660:31;24685:5;24660:31;:::i;25050:717::-;25140:6;25148;25156;25164;25217:2;25205:9;25196:7;25192:23;25188:32;25185:52;;;25233:1;25230;25223:12;25185:52;25273:9;25260:23;25302:18;25343:2;25335:6;25332:14;25329:34;;;25359:1;25356;25349:12;25329:34;25398:58;25448:7;25439:6;25428:9;25424:22;25398:58;:::i;:::-;25475:8;;-1:-1:-1;25372:84:139;-1:-1:-1;25563:2:139;25548:18;;25535:32;;-1:-1:-1;25579:16:139;;;25576:36;;;25608:1;25605;25598:12;25576:36;;25647:60;25699:7;25688:8;25677:9;25673:24;25647:60;:::i;:::-;25050:717;;;;-1:-1:-1;25726:8:139;-1:-1:-1;;;;25050:717:139:o;26129:710::-;25955:12;;25969:10;25951:29;25939:42;;26030:4;26019:16;;;26013:23;25997:14;;;25990:47;26090:4;26079:16;;;26073:23;26098:18;26069:48;26053:14;;;26046:72;-1:-1:-1;;;;;26519:6:139;26515:55;26510:2;26499:9;26495:18;26488:83;26608:6;26602:3;26591:9;26587:19;26580:35;26652:3;26646;26635:9;26631:19;26624:32;26417:4;26679:45;26719:3;26708:9;26704:19;26696:6;26679:45;:::i;:::-;26773:9;26765:6;26761:22;26755:3;26744:9;26740:19;26733:51;26801:32;26826:6;26818;26801:32;:::i;:::-;26793:40;26129:710;-1:-1:-1;;;;;;;;26129:710:139:o;27005:720::-;27364:3;27353:9;27346:22;27327:4;27391:50;27436:3;27425:9;27421:19;26921:1;26909:14;;26955:10;26948:4;26939:14;;26932:34;26991:2;26982:12;;26844:156;27391:50;27489:9;27481:6;27477:22;27472:2;27461:9;27457:18;27450:50;27517:37;27547:6;26921:1;26909:14;;26955:10;26948:4;26939:14;;26932:34;26991:2;26982:12;;26844:156;27517:37;27509:45;;;-1:-1:-1;;;;;27663:2:139;27655:6;27651:15;27646:2;27635:9;27631:18;27624:43;27715:2;27707:6;27703:15;27698:2;27687:9;27683:18;27676:43;;27005:720;;;;;:::o;27891:::-;28250:3;28239:9;28232:22;28213:4;28277:50;28322:3;28311:9;28307:19;27807:1;27795:14;;27841:10;27834:4;27825:14;;27818:34;27877:2;27868:12;;27730:156;28277:50;28375:9;28367:6;28363:22;28358:2;28347:9;28343:18;28336:50;28403:37;28433:6;27807:1;27795:14;;27841:10;27834:4;27825:14;;27818:34;27877:2;27868:12;;27730:156;28777:720;29136:3;29125:9;29118:22;29099:4;29163:50;29208:3;29197:9;29193:19;28693:1;28681:14;;28727:10;28720:4;28711:14;;28704:34;28763:2;28754:12;;28616:156;29163:50;29261:9;29253:6;29249:22;29244:2;29233:9;29229:18;29222:50;29289:37;29319:6;28693:1;28681:14;;28727:10;28720:4;28711:14;;28704:34;28763:2;28754:12;;28616:156;29502:184;29554:77;29551:1;29544:88;29651:4;29648:1;29641:15;29675:4;29672:1;29665:15;29852:617;30183:2;30172:9;30165:21;30146:4;30209:49;30254:2;30243:9;30239:18;29768:1;29756:14;;29802:10;29795:4;29786:14;;29779:34;29838:2;29829:12;;29691:156;30209:49;30306:9;30298:6;30294:22;30289:2;30278:9;30274:18;30267:50;30334:37;30364:6;29768:1;29756:14;;29802:10;29795:4;29786:14;;29779:34;29838:2;29829:12;;29691:156;30334:37;30326:45;;;-1:-1:-1;;;;;30411:6:139;30407:55;30402:2;30391:9;30387:18;30380:83;29852:617;;;;:::o;31047:720::-;31406:3;31395:9;31388:22;31369:4;31433:50;31478:3;31467:9;31463:19;30963:1;30951:14;;30997:10;30990:4;30981:14;;30974:34;31033:2;31024:12;;30886:156;31433:50;31531:9;31523:6;31519:22;31514:2;31503:9;31499:18;31492:50;31559:37;31589:6;30963:1;30951:14;;30997:10;30990:4;30981:14;;30974:34;31033:2;31024:12;;30886:156;31933:720;32292:3;32281:9;32274:22;32255:4;32319:50;32364:3;32353:9;32349:19;31849:1;31837:14;;31883:10;31876:4;31867:14;;31860:34;31919:2;31910:12;;31772:156;32319:50;32417:9;32409:6;32405:22;32400:2;32389:9;32385:18;32378:50;32445:37;32475:6;31849:1;31837:14;;31883:10;31876:4;31867:14;;31860:34;31919:2;31910:12;;31772:156;36375:437;36454:1;36450:12;;;;36497;;;36518:61;;36572:4;36564:6;36560:17;36550:27;;36518:61;36625:2;36617:6;36614:14;36594:18;36591:38;36588:218;;36662:77;36659:1;36652:88;36763:4;36760:1;36753:15;36791:4;36788:1;36781:15;36588:218;;36375:437;;;:::o;36817:1224::-;37035:4;37064:2;37104;37093:9;37089:18;37134:2;37123:9;37116:21;37157:6;37192;37186:13;37223:6;37215;37208:22;37249:2;37239:12;;37282:2;37271:9;37267:18;37260:25;;37344:2;37334:6;37331:1;37327:14;37316:9;37312:30;37308:39;37382:2;37374:6;37370:15;37403:1;37413:599;37427:6;37424:1;37421:13;37413:599;;;37492:22;;;37516:66;37488:95;37476:108;;37607:13;;37679:9;;37690:10;37675:26;37660:42;;37749:11;;;37743:18;37763:6;37739:31;37722:15;;;37715:56;37810:11;;37804:18;37643:4;37842:15;;;37835:27;;;37885:47;37916:15;;;37804:18;37885:47;:::i;:::-;37990:12;;;;37875:57;-1:-1:-1;;;37955:15:139;;;;37449:1;37442:9;37413:599;;38046:184;38098:77;38095:1;38088:88;38195:4;38192:1;38185:15;38219:4;38216:1;38209:15;38235:148;38323:4;38302:12;;;38316;;;38298:31;;38341:13;;38338:39;;;38357:18;;:::i;38801:151::-;38891:4;38884:12;;;38870;;;38866:31;;38909:14;;38906:40;;;38926:18;;:::i;38957:782::-;39233:4;-1:-1:-1;;;;;39343:2:139;39335:6;39331:15;39320:9;39313:34;39395:2;39387:6;39383:15;39378:2;39367:9;39363:18;39356:43;;39435:6;39430:2;39419:9;39415:18;39408:34;39490:6;39482;39478:19;39473:2;39462:9;39458:18;39451:47;39535:3;39529;39518:9;39514:19;39507:32;39562:62;39619:3;39608:9;39604:19;39596:6;39588;39562:62;:::i;:::-;39673:9;39665:6;39661:22;39655:3;39644:9;39640:19;39633:51;39701:32;39726:6;39718;39701:32;:::i;:::-;39693:40;38957:782;-1:-1:-1;;;;;;;;;;38957:782:139:o;40061:138::-;40140:13;;40162:31;40140:13;40162:31;:::i;40204:413::-;40280:6;40288;40341:2;40329:9;40320:7;40316:23;40312:32;40309:52;;;40357:1;40354;40347:12;40309:52;40389:9;40383:16;40408:31;40433:5;40408:31;:::i;:::-;40508:2;40493:18;;40487:25;40458:5;;-1:-1:-1;40550:15:139;;40543:23;40531:36;;40521:64;;40581:1;40578;40571:12;40622:175;40700:13;;40753:18;40742:30;;40732:41;;40722:69;;40787:1;40784;40777:12;40802:134;40879:13;;40901:29;40879:13;40901:29;:::i;40941:460::-;41024:6;41032;41040;41093:2;41081:9;41072:7;41068:23;41064:32;41061:52;;;41109:1;41106;41099:12;41061:52;41132:39;41161:9;41132:39;:::i;:::-;41122:49;;41214:2;41203:9;41199:18;41193:25;41227:29;41250:5;41227:29;:::i;:::-;41325:2;41310:18;;41304:25;41275:5;;-1:-1:-1;41338:31:139;41304:25;41338:31;:::i;41831:441::-;41884:5;41937:3;41930:4;41922:6;41918:17;41914:27;41904:55;;41955:1;41952;41945:12;41904:55;41984:6;41978:13;42015:48;42031:31;42059:2;42031:31;:::i;42015:48::-;42088:2;42079:7;42072:19;42134:3;42127:4;42122:2;42114:6;42110:15;42106:26;42103:35;42100:55;;;42151:1;42148;42141:12;42100:55;42164:77;42238:2;42231:4;42222:7;42218:18;42211:4;42203:6;42199:17;42164:77;:::i;42277:335::-;42356:6;42409:2;42397:9;42388:7;42384:23;42380:32;42377:52;;;42425:1;42422;42415:12;42377:52;42458:9;42452:16;42491:18;42483:6;42480:30;42477:50;;;42523:1;42520;42513:12;42477:50;42546:60;42598:7;42589:6;42578:9;42574:22;42546:60;:::i;42617:740::-;42682:5;42735:3;42728:4;42720:6;42716:17;42712:27;42702:55;;42753:1;42750;42743:12;42702:55;42782:6;42776:13;42808:4;42832:60;42848:43;42888:2;42848:43;:::i;42832:60::-;42914:3;42938:2;42933:3;42926:15;42966:4;42961:3;42957:14;42950:21;;43023:4;43017:2;43014:1;43010:10;43002:6;42998:23;42994:34;42980:48;;43051:3;43043:6;43040:15;43037:35;;;43068:1;43065;43058:12;43037:35;43104:4;43096:6;43092:17;43118:210;43134:6;43129:3;43126:15;43118:210;;;43207:3;43201:10;43224:31;43249:5;43224:31;:::i;:::-;43268:18;;43306:12;;;;43151;;43118:210;;43362:1116;43459:6;43512:2;43500:9;43491:7;43487:23;43483:32;43480:52;;;43528:1;43525;43518:12;43480:52;43561:9;43555:16;43590:18;43631:2;43623:6;43620:14;43617:34;;;43647:1;43644;43637:12;43617:34;43670:22;;;;43726:4;43708:16;;;43704:27;43701:47;;;43744:1;43741;43734:12;43701:47;43770:23;;:::i;:::-;43816:32;43845:2;43816:32;:::i;:::-;43809:5;43802:47;43881:40;43917:2;43913;43909:11;43881:40;:::i;:::-;43876:2;43869:5;43865:14;43858:64;43954:40;43990:2;43986;43982:11;43954:40;:::i;:::-;43949:2;43942:5;43938:14;43931:64;44027:40;44063:2;44059;44055:11;44027:40;:::i;:::-;44022:2;44015:5;44011:14;44004:64;44107:3;44103:2;44099:12;44093:19;44137:2;44127:8;44124:16;44121:36;;;44153:1;44150;44143:12;44121:36;44190:67;44249:7;44238:8;44234:2;44230:17;44190:67;:::i;:::-;44184:3;44177:5;44173:15;44166:92;;44297:3;44293:2;44289:12;44283:19;44327:2;44317:8;44314:16;44311:36;;;44343:1;44340;44333:12;44311:36;44380:67;44439:7;44428:8;44424:2;44420:17;44380:67;:::i;:::-;44374:3;44363:15;;44356:92;-1:-1:-1;44367:5:139;43362:1116;-1:-1:-1;;;;;43362:1116:139:o;44483:271::-;44666:6;44658;44653:3;44640:33;44622:3;44692:16;;44717:13;;;44692:16;44483:271;-1:-1:-1;44483:271:139:o;44759:378::-;44970:2;44959:9;44952:21;44933:4;44990:44;45030:2;45019:9;45015:18;45007:6;44990:44;:::i;:::-;44982:52;;45070:6;45065:2;45054:9;45050:18;45043:34;45125:4;45117:6;45113:17;45108:2;45097:9;45093:18;45086:45;44759:378;;;;;;:::o;45142:125::-;45207:9;;;45228:10;;;45225:36;;;45241:18;;:::i;45272:496::-;45513:10;45505:6;45501:23;45490:9;45483:42;-1:-1:-1;;;;;45565:6:139;45561:55;45556:2;45545:9;45541:18;45534:83;45653:3;45648:2;45637:9;45633:18;45626:31;45464:4;45674:45;45714:3;45703:9;45699:19;45691:6;45674:45;:::i;:::-;45666:53;;45755:6;45750:2;45739:9;45735:18;45728:34;45272:496;;;;;;;:::o;45773:184::-;45843:6;45896:2;45884:9;45875:7;45871:23;45867:32;45864:52;;;45912:1;45909;45902:12;45864:52;-1:-1:-1;45935:16:139;;45773:184;-1:-1:-1;45773:184:139:o;45962:1533::-;46166:4;46195:2;46235;46224:9;46220:18;46265:2;46254:9;46247:21;46288:6;46323;46317:13;46354:6;46346;46339:22;46380:2;46370:12;;46413:2;46402:9;46398:18;46391:25;;46475:2;46465:6;46462:1;46458:14;46447:9;46443:30;46439:39;46513:2;46505:6;46501:15;46534:1;46544:922;46558:6;46555:1;46552:13;46544:922;;;46647:66;46635:9;46627:6;46623:22;46619:95;46614:3;46607:108;46744:6;46738:13;46774:4;46821:10;46816:2;46810:9;46806:26;46798:6;46791:42;-1:-1:-1;;;;;46888:2:139;46884;46880:11;46874:18;46870:67;46865:2;46857:6;46853:15;46846:92;46985:2;46981;46977:11;46971:18;47026:2;47021;47013:6;47009:15;47002:27;47056:47;47099:2;47091:6;47087:15;47073:12;47056:47;:::i;:::-;47042:61;;;47126:4;47181:2;47177;47173:11;47167:18;47162:2;47154:6;47150:15;47143:43;;47209:4;47262:2;47258;47254:11;47248:18;47226:40;;47315:6;47307;47303:19;47298:2;47290:6;47286:15;47279:44;;47346:40;47379:6;47363:14;47346:40;:::i;:::-;47444:12;;;;47336:50;-1:-1:-1;;;47409:15:139;;;;46580:1;46573:9;46544:922;;47500:288;47675:2;47664:9;47657:21;47638:4;47695:44;47735:2;47724:9;47720:18;47712:6;47695:44;:::i;:::-;47687:52;;47775:6;47770:2;47759:9;47755:18;47748:34;47500:288;;;;;:::o;48218:1121::-;48319:6;48372:2;48360:9;48351:7;48347:23;48343:32;48340:52;;;48388:1;48385;48378:12;48340:52;48421:9;48415:16;48450:18;48491:2;48483:6;48480:14;48477:34;;;48507:1;48504;48497:12;48477:34;48530:22;;;;48586:4;48568:16;;;48564:27;48561:47;;;48604:1;48601;48594:12;48561:47;48630:23;;:::i;:::-;48676:33;48706:2;48676:33;:::i;49344:359::-;49531:6;49526:3;49519:19;49501:3;49567:6;49561:13;49583:73;49649:6;49644:2;49639:3;49635:12;49630:2;49622:6;49618:15;49583:73;:::i;:::-;49676:16;;;;49694:2;49672:25;;49344:359;-1:-1:-1;;;49344:359:139:o;49708:::-;49911:2;49900:9;49893:21;49874:4;49931:44;49971:2;49960:9;49956:18;49948:6;49931:44;:::i;:::-;50006:2;49991:18;;49984:34;;;;-1:-1:-1;50049:2:139;50034:18;50027:34;49923:52;49708:359;-1:-1:-1;49708:359:139:o;50072:244::-;50229:2;50218:9;50211:21;50192:4;50249:61;50306:2;50295:9;50291:18;50283:6;50275;50249:61;:::i;50599:280::-;50698:6;50751:2;50739:9;50730:7;50726:23;50722:32;50719:52;;;50767:1;50764;50757:12;50719:52;50799:9;50793:16;50818:31;50843:5;50818:31;:::i;50884:249::-;50953:6;51006:2;50994:9;50985:7;50981:23;50977:32;50974:52;;;51022:1;51019;51012:12;50974:52;51054:9;51048:16;51073:30;51097:5;51073:30;:::i;51762:196::-;51801:3;51829:5;51819:39;;51838:18;;:::i;:::-;-1:-1:-1;51885:66:139;51874:78;;51762:196::o;51963:377::-;52156:2;52145:9;52138:21;52119:4;52182:44;52222:2;52211:9;52207:18;52199:6;52182:44;:::i;:::-;52274:9;52266:6;52262:22;52257:2;52246:9;52242:18;52235:50;52302:32;52327:6;52319;52302:32;:::i;52904:537::-;53143:2;53132:9;53125:21;53106:4;53169:44;53209:2;53198:9;53194:18;53186:6;53169:44;:::i;:::-;53261:9;53253:6;53249:22;53244:2;53233:9;53229:18;53222:50;53295:32;53320:6;53312;53295:32;:::i;:::-;53281:46;;53375:9;53367:6;53363:22;53358:2;53347:9;53343:18;53336:50;53403:32;53428:6;53420;53403:32;:::i;:::-;53395:40;52904:537;-1:-1:-1;;;;;;52904:537:139:o;53446:570::-;53695:3;53684:9;53677:22;53658:4;53722:45;53762:3;53751:9;53747:19;53739:6;53722:45;:::i;:::-;53815:9;53807:6;53803:22;53798:2;53787:9;53783:18;53776:50;53843:32;53868:6;53860;53843:32;:::i;:::-;53835:40;;;53911:6;53906:2;53895:9;53891:18;53884:34;-1:-1:-1;;;;;53958:6:139;53954:55;53949:2;53938:9;53934:18;53927:83;53446:570;;;;;;;:::o;54364:786::-;54689:10;54681:6;54677:23;54666:9;54659:42;54640:4;-1:-1:-1;;;;;54810:2:139;54802:6;54798:15;54793:2;54782:9;54778:18;54771:43;54850:3;54845:2;54834:9;54830:18;54823:31;54877:45;54917:3;54906:9;54902:19;54894:6;54877:45;:::i;:::-;54958:6;54953:2;54942:9;54938:18;54931:34;55014:2;55006:6;55002:15;54996:3;54985:9;54981:19;54974:44;55067:9;55059:6;55055:22;55049:3;55038:9;55034:19;55027:51;55095:49;55137:6;55129;55121;55095:49;:::i;:::-;55087:57;54364:786;-1:-1:-1;;;;;;;;;;;54364:786:139:o;56638:184::-;56690:77;56687:1;56680:88;56787:4;56784:1;56777:15;56811:4;56808:1;56801:15;57318:850;57650:4;-1:-1:-1;;;;;57760:2:139;57752:6;57748:15;57737:9;57730:34;57812:2;57804:6;57800:15;57795:2;57784:9;57780:18;57773:43;57852:3;57847:2;57836:9;57832:18;57825:31;57879:57;57931:3;57920:9;57916:19;57908:6;57879:57;:::i;:::-;57984:2;57976:6;57972:15;57967:2;57956:9;57952:18;57945:43;58037:2;58029:6;58025:15;58019:3;58008:9;58004:19;57997:44;58090:9;58082:6;58078:22;58072:3;58061:9;58057:19;58050:51;58118:44;58155:6;58147;58118:44;:::i;58310:1408::-;58768:10;58760:6;58756:23;58745:9;58738:42;58719:4;58799:2;58849:4;58841:6;58837:17;58832:2;58821:9;58817:18;58810:45;58891:3;58886:2;58875:9;58871:18;58864:31;58918:57;58970:3;58959:9;58955:19;58947:6;58918:57;:::i;:::-;-1:-1:-1;;;;;59072:15:139;;;59067:2;59052:18;;59045:43;59125:22;;;59119:3;59104:19;;59097:51;59197:13;;59219:22;;;-1:-1:-1;59281:17:139;;;59269:2;59321:16;;;;59257:15;;59197:13;59365:177;59379:6;59376:1;59373:13;59365:177;;;59444:13;;59440:22;;59428:35;;59530:1;59518:14;;;;59483:12;;;;59394:9;59365:177;;;-1:-1:-1;;25848:18:139;25837:30;;59592:3;59577:19;;25825:43;59643:9;59638:3;59634:19;59628:3;59617:9;59613:19;59606:48;59671:41;59708:3;59700:6;59671:41;:::i;:::-;59663:49;58310:1408;-1:-1:-1;;;;;;;;;;;;;58310:1408:139:o;60925:2095::-;61151:4;61180:2;61220;61209:9;61205:18;61250:2;61239:9;61232:21;61273:6;61308;61302:13;61339:6;61331;61324:22;61365:2;61355:12;;61398:2;61387:9;61383:18;61376:25;;61460:2;61450:6;61447:1;61443:14;61432:9;61428:30;61424:39;61498:2;61490:6;61486:15;61519:1;61529:1462;61543:6;61540:1;61537:13;61529:1462;;;61602:66;61697:22;;;61693:31;;61681:44;;61748:13;;61793:9;;61804:10;61789:26;61774:42;;61855:11;;61849:18;61887:15;;;61880:27;;;61948:19;;61969:18;61944:44;61927:15;;;61920:69;62030:21;;;62024:28;62100:4;62141:23;;;62075:2;62124:15;;;62117:48;;;;62206:21;;;62200:28;62291:23;;62251:3;62274:15;;;62267:48;;;;62356:21;;;62350:28;62441:23;;;62401:3;62424:15;;;62417:48;;;;62506:21;;;62500:28;62551:4;62575:15;;;62568:27;62500:28;62622:73;62690:3;62678:16;;62500:28;62622:73;:::i;:::-;62736:21;;62730:28;62800:19;;;62796:28;;62790:3;62778:16;;62771:54;62730:28;62608:87;-1:-1:-1;62848:63:139;62608:87;62730:28;62848:63;:::i;:::-;62969:12;;;;62838:73;-1:-1:-1;;;62934:15:139;;;;-1:-1:-1;61565:1:139;61558:9;61529:1462;;63025:1049;63290:2;63342:21;;;63412:13;;63315:18;;;63434:22;;;63261:4;;63290:2;63475;;63493:18;;;;63534:15;;;63261:4;63577:471;63591:6;63588:1;63585:13;63577:471;;;63650:13;;63725:9;;63686:10;63721:18;;;63709:31;;63779:11;;;63773:18;63829:19;;63825:28;;;63811:12;;;63804:50;63898:21;;63892:28;-1:-1:-1;;;;;63888:77:139;63874:12;;;63867:99;63995:4;63986:14;;;;64023:15;;;;63613:1;63606:9;63577:471;;;-1:-1:-1;64065:3:139;;63025:1049;-1:-1:-1;;;;;;;63025:1049:139:o;64079:251::-;64149:6;64202:2;64190:9;64181:7;64177:23;64173:32;64170:52;;;64218:1;64215;64208:12;64170:52;64250:9;64244:16;64269:31;64294:5;64269:31;:::i;64335:274::-;64407:34;64473:10;;;64485;;;64469:27;64516:20;;;;64407:34;64555:24;;;64545:58;;64583:18;;:::i;:::-;64545:58;;64335:274;;;;:::o;64614:1093::-;64843:2;64895:21;;;64965:13;;64868:18;;;64987:22;;;64814:4;;64843:2;65028;;65046:18;;;;65087:15;;;64814:4;65130:551;65144:6;65141:1;65138:13;65130:551;;;65203:13;;65278:9;;65239:10;65274:18;;;65262:31;;65332:11;;;65326:18;65382:19;;65403:34;65378:60;65364:12;;;65357:82;65483:21;;;65477:28;65507:18;65473:53;65459:12;;;65452:75;65571:21;;65565:28;65561:37;65556:2;65547:12;;65540:59;65628:4;65619:14;;;;65656:15;;;;65166:1;65159:9;65130:551;;65712:2127;65946:4;65975:2;66015;66004:9;66000:18;66045:2;66034:9;66027:21;66068:6;66103;66097:13;66134:6;66126;66119:22;66160:2;66150:12;;66193:2;66182:9;66178:18;66171:25;;66255:2;66245:6;66242:1;66238:14;66227:9;66223:30;66219:39;66293:2;66285:6;66281:15;66314:1;66324:1486;66338:6;66335:1;66332:13;66324:1486;;;66397:66;66492:22;;;66488:31;;66476:44;;66543:13;;66588:9;;66599:10;66584:26;66569:42;;66650:11;;66644:18;66682:15;;;66675:27;;;66743:19;;-1:-1:-1;;;;;66739:68:139;66722:15;;;66715:93;66849:21;;;66843:28;66919:4;66960:23;;;66894:2;66943:15;;;66936:48;;;;67025:21;;;67019:28;67110:23;;67070:3;67093:15;;;67086:48;;;;67175:21;;;67169:28;67260:23;;;67220:3;67243:15;;;67236:48;;;;67325:21;;;67319:28;67370:4;67394:15;;;67387:27;67319:28;67441:73;67509:3;67497:16;;67319:28;67441:73;:::i;:::-;67555:21;;67549:28;67619:19;;;67615:28;;67609:3;67597:16;;67590:54;67549:28;67427:87;-1:-1:-1;67667:63:139;67427:87;67549:28;67667:63;:::i;:::-;67788:12;;;;67657:73;-1:-1:-1;;;67753:15:139;;;;-1:-1:-1;66360:1:139;66353:9;66324:1486;;67844:1355;68079:2;68131:21;;;68201:13;;68104:18;;;68223:22;;;68050:4;;68079:2;68264;;68282:18;;;;68323:15;;;68050:4;68366:807;68380:6;68377:1;68374:13;68366:807;;;68439:13;;68481:9;;68492:10;68477:26;68465:39;;68543:11;;;68537:18;68578;68630:21;;;68616:12;;;68609:43;68696:11;;;68690:18;68686:27;68672:12;;;68665:49;68737:4;68785:11;;;68779:18;68799:6;68775:31;68761:12;;;68754:53;68830:4;68875:11;;;68869:18;68910:34;68978:23;;;68964:12;;;68957:45;;;;69025:4;69073:11;;;69067:18;69063:27;69049:12;;;69042:49;69120:4;69111:14;;;;69148:15;;;;68402:1;68395:9;68366:807;;69204:1033;69439:2;69491:21;;;69561:13;;69464:18;;;69583:22;;;69410:4;;69439:2;69624;;69642:18;;;;69683:15;;;69410:4;69726:485;69740:6;69737:1;69734:13;69726:485;;;69799:13;;69841:9;;69852:10;69837:26;69825:39;;69908:11;;;69902:18;69922;69898:43;69884:12;;;69877:65;69986:11;;;69980:18;70000:6;69976:31;69962:12;;;69955:53;70031:4;70079:11;;;70073:18;70093:34;70069:59;70055:12;;;70048:81;70158:4;70149:14;;;;70186:15;;;;69762:1;69755:9;69726:485;;70242:843;70501:2;70553:21;;;70623:13;;70526:18;;;70645:22;;;70472:4;;70501:2;70686;;70704:18;;;;70745:15;;;70472:4;70788:271;70802:6;70799:1;70796:13;70788:271;;;70861:13;;70903:9;;70914:10;70899:26;70887:39;;70966:11;;70960:18;70946:12;;;70939:40;70999:12;;;;71034:15;;;;70824:1;70817:9;70788:271;;72882:737;25955:12;;25969:10;25951:29;25939:42;;26030:4;26019:16;;;26013:23;25997:14;;;25990:47;26090:4;26079:16;;;26073:23;26098:18;26069:48;26053:14;;;26046:72;-1:-1:-1;;;;;73282:6:139;73278:55;73273:2;73262:9;73258:18;73251:83;73371:6;73365:3;73354:9;73350:19;73343:35;73415:3;73409;73398:9;73394:19;73387:32;73180:4;73442:62;73499:3;73488:9;73484:19;73476:6;73468;73442:62;:::i;:::-;73553:9;73545:6;73541:22;73535:3;73524:9;73520:19;73513:51;73581:32;73606:6;73598;73581:32;:::i;:::-;73573:40;72882:737;-1:-1:-1;;;;;;;;;72882:737:139:o;73624:517::-;73725:2;73720:3;73717:11;73714:421;;;73761:5;73758:1;73751:16;73805:4;73802:1;73792:18;73875:2;73863:10;73859:19;73856:1;73852:27;73846:4;73842:38;73911:4;73899:10;73896:20;73893:47;;;-1:-1:-1;73934:4:139;73893:47;73989:2;73984:3;73980:12;73977:1;73973:20;73967:4;73963:31;73953:41;;74044:81;74062:2;74055:5;74052:13;74044:81;;;74121:1;74107:16;;74088:1;74077:13;74044:81;;;74048:3;;73624:517;;;:::o;74377:1325::-;74499:18;74494:3;74491:27;74488:53;;;74521:18;;:::i;:::-;74550:93;74639:3;74599:38;74631:4;74625:11;74599:38;:::i;:::-;74593:4;74550:93;:::i;:::-;74669:1;74694:2;74689:3;74686:11;74711:1;74706:738;;;;75488:1;75505:3;75502:93;;;-1:-1:-1;75561:19:139;;;75548:33;75502:93;74283:66;74274:1;74270:11;;;74266:84;74262:89;74252:100;74358:1;74354:11;;;74249:117;75608:78;;74679:1017;;74706:738;58257:1;58250:14;;;58294:4;58281:18;;-1:-1:-1;;74742:76:139;;;74927:229;74941:7;74938:1;74935:14;74927:229;;;75030:19;;;75017:33;75002:49;;75137:4;75122:20;;;;75090:1;75078:14;;;;74957:12;74927:229;;;74931:3;75184;75175:7;75172:16;75169:219;;;75304:66;75298:3;75292;75289:1;75285:11;75281:21;75277:94;75273:99;75260:9;75255:3;75251:19;75238:33;75234:139;75226:6;75219:155;75169:219;;;75431:1;75425:3;75422:1;75418:11;75414:19;75408:4;75401:33;74679:1017;;74377:1325;;;:::o;75707:331::-;75812:9;75823;75865:8;75853:10;75850:24;75847:44;;;75887:1;75884;75877:12;75847:44;75916:6;75906:8;75903:20;75900:40;;;75936:1;75933;75926:12;75900:40;-1:-1:-1;;75962:23:139;;;76007:25;;;;;-1:-1:-1;75707:331:139:o;76043:369::-;76201:66;76163:19;;76285:11;;;;76316:1;76308:10;;76305:101;;;76377:1;76373:11;;;;76370:1;76366:19;76362:28;;;76354:37;76350:46;;;;76043:369;-1:-1:-1;;76043:369:139:o;76824:517::-;76911:6;76919;76927;76980:2;76968:9;76959:7;76955:23;76951:32;76948:52;;;76996:1;76993;76986:12;76948:52;77028:9;77022:16;77047:31;77072:5;77047:31;:::i;:::-;77147:2;77132:18;;77126:25;77097:5;;-1:-1:-1;77160:32:139;77126:25;77160:32;:::i;:::-;77263:2;77248:18;;77242:25;77211:7;;-1:-1:-1;77276:33:139;77242:25;77276:33;:::i;77346:315::-;77466:19;;77505:2;77497:11;;77494:161;;;77577:66;77566:2;77562:12;;;77559:1;77555:20;77551:93;77540:105;77346:315;;;;:::o;77666:369::-;77824:66;77786:19;;77908:11;;;;77939:1;77931:10;;77928:101;;;78000:1;77996:11;;;;77993:1;77989:19;77985:28;;;77977:37;77973:46;;;;77666:369;-1:-1:-1;;77666:369:139:o;78342:287::-;78471:3;78509:6;78503:13;78525:66;78584:6;78579:3;78572:4;78564:6;78560:17;78525:66;:::i;:::-;78607:16;;;;;78342:287;-1:-1:-1;;78342:287:139:o;78634:492::-;78809:3;78847:6;78841:13;78863:66;78922:6;78917:3;78910:4;78902:6;78898:17;78863:66;:::i;:::-;78992:13;;78951:16;;;;79014:70;78992:13;78951:16;79061:4;79049:17;;79014:70;:::i;:::-;79100:20;;78634:492;-1:-1:-1;;;;78634:492:139:o;79541:517::-;79628:6;79636;79644;79697:2;79685:9;79676:7;79672:23;79668:32;79665:52;;;79713:1;79710;79703:12;79665:52;79745:9;79739:16;79764:30;79788:5;79764:30;:::i;:::-;79863:2;79848:18;;79842:25;79813:5;;-1:-1:-1;79876:33:139;79842:25;79876:33;:::i;80709:369::-;80795:6;80803;80811;80864:2;80852:9;80843:7;80839:23;80835:32;80832:52;;;80880:1;80877;80870:12;80832:52;80912:9;80906:16;80931:29;80954:5;80931:29;:::i;:::-;81024:2;81009:18;;81003:25;81068:2;81053:18;;;81047:25;80979:5;;81003:25;;-1:-1:-1;81047:25:139;80709:369;-1:-1:-1;;;80709:369:139:o;81890:312::-;81969:6;81977;82030:2;82018:9;82009:7;82005:23;82001:32;81998:52;;;82046:1;82043;82036:12;81998:52;82078:9;82072:16;82097:31;82122:5;82097:31;:::i;:::-;82192:2;82177:18;;;;82171:25;82147:5;;82171:25;;-1:-1:-1;;;81890:312:139:o;82617:385::-;82696:6;82704;82757:2;82745:9;82736:7;82732:23;82728:32;82725:52;;;82773:1;82770;82763:12;82725:52;82805:9;82799:16;82824:31;82849:5;82824:31;:::i;:::-;82924:2;82909:18;;82903:25;82874:5;;-1:-1:-1;82937:33:139;82903:25;82937:33;:::i;83007:558::-;83104:6;83112;83165:2;83153:9;83144:7;83140:23;83136:32;83133:52;;;83181:1;83178;83171:12;83133:52;83214:9;83208:16;83243:18;83284:2;83276:6;83273:14;83270:34;;;83300:1;83297;83290:12;83270:34;83323:60;83375:7;83366:6;83355:9;83351:22;83323:60;:::i;:::-;83313:70;;83429:2;83418:9;83414:18;83408:25;83392:41;;83458:2;83448:8;83445:16;83442:36;;;83474:1;83471;83464:12;83442:36;;83497:62;83551:7;83540:8;83529:9;83525:24;83497:62;:::i;:::-;83487:72;;;83007:558;;;;;:::o;83863:520::-;83958:6;83966;83974;84027:2;84015:9;84006:7;84002:23;83998:32;83995:52;;;84043:1;84040;84033:12;83995:52;84075:9;84069:16;84094:29;84117:5;84094:29;:::i;:::-;84191:2;84176:18;;84170:25;84142:5;;-1:-1:-1;84218:18:139;84207:30;;84204:50;;;84250:1;84247;84240:12;84204:50;84273:60;84325:7;84316:6;84305:9;84301:22;84273:60;:::i;:::-;84263:70;;;84373:2;84362:9;84358:18;84352:25;84342:35;;83863:520;;;;;:::o;84388:197::-;84456:34;84510:10;;;84522;;;84506:27;;84545:11;;;84542:37;;;84559:18;;:::i;85820:172::-;85887:10;85917;;;85929;;;85913:27;;85952:11;;;85949:37;;;85966:18;;:::i;86518:369::-;86676:66;86638:19;;86760:11;;;;86791:1;86783:10;;86780:101;;;86852:1;86848:11;;;;86845:1;86841:19;86837:28;;;86829:37;86825:46;;;;86518:369;-1:-1:-1;;86518:369:139:o;86892:372::-;87051:66;87013:19;;87135:11;;;;87166:2;87158:11;;87155:103;;;87228:2;87224:12;;;;87221:1;87217:20;87213:29;;;87205:38;87201:47;;;;86892:372;-1:-1:-1;;86892:372:139:o",
+ "linkReferences": {}
+ },
+ "methodIdentifiers": {
+ "ARB_EID()": "5e42c9b2",
+ "BAD_EID()": "0fcaecfe",
+ "DEFAULT_CHANNEL_ID()": "51aa318b",
+ "ETH_EID()": "25996dae",
+ "EVM_COMPUTE_MAP_BPS()": "0afba868",
+ "EVM_COMPUTE_REDUCE_FEE_USD()": "82411c77",
+ "EVM_REQUEST_FEE_USD()": "1766f5a4",
+ "INITIAL_BALANCE()": "14525bce",
+ "IS_TEST()": "fa7626d4",
+ "MAP_REDUCE_COMPUTE_TYPES()": "b76bada5",
+ "NATIVE_TOKEN_PRICE_USD()": "699cbade",
+ "OPTIONS_LZRECEIVE_100k()": "178928d3",
+ "POL_EID()": "1f3280c5",
+ "TOKENS_TO_SEND()": "8c5e9f74",
+ "TREASURY_GAS_CAP()": "baead19c",
+ "TREASURY_GAS_FOR_FEE_CAP()": "b1dcf5c8",
+ "VaultComposerSyncArb()": "90a606f5",
+ "arbEndpoint()": "09c885c9",
+ "arbExecutor()": "677d4175",
+ "assertGuid(bytes,bytes32)": "997cff1b",
+ "assetOFT_arb()": "0c003ff7",
+ "assetOFT_eth()": "536e8d3a",
+ "assetOFT_pol()": "67d53a00",
+ "createEndpoints(uint8,uint8,address[])": "d6d62497",
+ "decodeLzComposeOption(bytes)": "518e8ab0",
+ "decodeLzReadOption(bytes)": "9751ca86",
+ "decodeLzReceiveOption(bytes)": "f93e1d61",
+ "decodeNativeDropOption(bytes)": "b954fdf6",
+ "excludeArtifacts()": "b5508aa9",
+ "excludeContracts()": "e20c9f71",
+ "excludeSelectors()": "b0464fdc",
+ "excludeSenders()": "1ed7831c",
+ "executorValueCap()": "2113ce62",
+ "failed()": "ba414fa6",
+ "getNextInflightPacket(uint16,bytes32)": "7982cf42",
+ "hasPendingPackets(uint16,bytes32)": "5ea0fefe",
+ "lzCompose(bytes,bytes,bytes32,address)": "a29c8984",
+ "lzCompose(uint32,address,bytes,bytes32,address,bytes)": "3bbd6a94",
+ "lzReadReceive(bytes,bytes,bytes)": "0a69faa9",
+ "lzReceive(bytes,bytes)": "ec53eaa0",
+ "msgValueToFail()": "556257df",
+ "msgValueToPass()": "f5e4efb5",
+ "nextExecutorOption(bytes,uint256)": "6e1775e3",
+ "registerEndpoint(address)": "ae6ce400",
+ "schedulePacket(bytes,bytes)": "faed6c58",
+ "setExecutorValueCap(uint128)": "defd9da6",
+ "setUp()": "0a9254e4",
+ "setUpEndpoints(uint8,uint8)": "1cc46525",
+ "setupOApps(bytes,uint8,uint8)": "2a35d250",
+ "shareOFT_arb()": "375591d7",
+ "shareOFT_eth()": "7f2e5936",
+ "shareOFT_pol()": "3cae7b8a",
+ "targetArtifactSelectors()": "66d9a9a0",
+ "targetArtifacts()": "85226c81",
+ "targetContracts()": "3f7286f4",
+ "targetInterfaces()": "2ade3880",
+ "targetSelectors()": "916a17c6",
+ "targetSenders()": "3e5e3c23",
+ "userA()": "deb22e9a",
+ "userB()": "cb1a295f",
+ "validatePacket(bytes,bytes)": "60197889",
+ "vault_arb()": "7a8b5d98",
+ "verifyPackets(uint32,address)": "090852b6",
+ "verifyPackets(uint32,bytes32)": "b752b72a",
+ "verifyPackets(uint32,bytes32,uint256,address,bytes)": "834bd159",
+ "wireOApps(address[])": "703ca254",
+ "wireReadOApps(address[],uint32[])": "65449eb0"
+ },
+ "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Executor_InvalidLzComposeOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReadOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReceiveOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidNativeDropOption\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"optionType\",\"type\":\"uint16\"}],\"name\":\"InvalidOptionType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ARB_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BAD_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_CHANNEL_ID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_COMPUTE_MAP_BPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_COMPUTE_REDUCE_FEE_USD\",\"outputs\":[{\"internalType\":\"uint120\",\"name\":\"\",\"type\":\"uint120\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_REQUEST_FEE_USD\",\"outputs\":[{\"internalType\":\"uint120\",\"name\":\"\",\"type\":\"uint120\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BALANCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAP_REDUCE_COMPUTE_TYPES\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_TOKEN_PRICE_USD\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIONS_LZRECEIVE_100k\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POL_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKENS_TO_SEND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREASURY_GAS_CAP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREASURY_GAS_FOR_FEE_CAP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VaultComposerSyncArb\",\"outputs\":[{\"internalType\":\"contract VaultComposerSync\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbEndpoint\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbExecutor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"}],\"name\":\"assertGuid\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assetOFT_arb\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assetOFT_eth\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assetOFT_pol\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_endpointNum\",\"type\":\"uint8\"},{\"internalType\":\"enum TestHelperOz5.LibraryType\",\"name\":\"_libraryType\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"nativeTokenAddresses\",\"type\":\"address[]\"}],\"name\":\"createEndpoints\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzComposeOption\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzReadOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"size\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzReceiveOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeNativeDropOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executorValueCap\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"getNextInflightPacket\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"packetBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"hasPendingPackets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_composerMsg\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_composer\",\"type\":\"address\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"lzReadReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgValueToFail\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgValueToPass\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_cursor\",\"type\":\"uint256\"}],\"name\":\"nextExecutorOption\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"optionType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"option\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract EndpointV2Mock\",\"name\":\"endpoint\",\"type\":\"address\"}],\"name\":\"registerEndpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"schedulePacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_valueCap\",\"type\":\"uint128\"}],\"name\":\"setExecutorValueCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_endpointNum\",\"type\":\"uint8\"},{\"internalType\":\"enum TestHelperOz5.LibraryType\",\"name\":\"_libraryType\",\"type\":\"uint8\"}],\"name\":\"setUpEndpoints\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_oappCreationCode\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"_startEid\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"_oappNum\",\"type\":\"uint8\"}],\"name\":\"setupOApps\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shareOFT_arb\",\"outputs\":[{\"internalType\":\"contract MockOFTAdapter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shareOFT_eth\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shareOFT_pol\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"userA\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"userB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"validatePacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault_arb\",\"outputs\":[{\"internalType\":\"contract MockVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_dstAddress\",\"type\":\"address\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_packetAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_composer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"}],\"name\":\"wireOApps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"channels\",\"type\":\"uint32[]\"}],\"name\":\"wireReadOApps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{\"createEndpoints(uint8,uint8,address[])\":{\"params\":{\"_endpointNum\":\"The number of endpoints to create.\",\"_libraryType\":\"The type of message library to use (UltraLightNode or SimpleMessageLib).\"}},\"schedulePacket(bytes,bytes)\":{\"details\":\"Adds the packet to the front of the queue and stores its options for later retrieval.\",\"params\":{\"_options\":\"The options associated with the packet, used during delivery.\",\"_packetBytes\":\"The packet data to be scheduled.\"}},\"setExecutorValueCap(uint128)\":{\"details\":\"set executorValueCap if more than 0.1 ether is necessarythis must be called prior to setUpEndpoints() if the value is to be used\",\"params\":{\"_valueCap\":\"amount executor can pass as msg.value to lzReceive()\"}},\"setUp()\":{\"details\":\"Initializes test environment setup, to be overridden by specific tests.\"},\"setupOApps(bytes,uint8,uint8)\":{\"params\":{\"_oappCreationCode\":\"The bytecode for creating OApp contracts.\",\"_oappNum\":\"The number of OApps to set up.\",\"_startEid\":\"The starting endpoint ID for OApp setup.\"},\"returns\":{\"oapps\":\"An array of addresses for the deployed OApps.\"}},\"verifyPackets(uint32,address)\":{\"details\":\"verify packets to destination chain's OApp address.\",\"params\":{\"_dstAddress\":\"The destination address.\",\"_dstEid\":\"The destination endpoint ID.\"}},\"verifyPackets(uint32,bytes32)\":{\"details\":\"Calls an overloaded version of verifyPackets with default values for packet amount and composer address.\",\"params\":{\"_dstAddress\":\"The destination address in bytes32 format.\",\"_dstEid\":\"The destination chain's endpoint ID.\"}},\"verifyPackets(uint32,bytes32,uint256,address,bytes)\":{\"details\":\"dst UA receive/execute packetswill NOT work calling this directly with composer IF the composed payload is different from the lzReceive msg payload\"},\"wireOApps(address[])\":{\"details\":\"Sets each OApp as a peer to every other OApp in the provided array, except itself.\",\"params\":{\"oapps\":\"An array of addresses representing the deployed OApp instances.\"}},\"wireReadOApps(address[],uint32[])\":{\"details\":\"Sets each OApp to read from the provided channels.\",\"params\":{\"channels\":\"An array of channel IDs to set as read channels.\",\"oapps\":\"An array of addresses representing the deployed OApp instances.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"createEndpoints(uint8,uint8,address[])\":{\"notice\":\"Sets up endpoints for testing.\"},\"schedulePacket(bytes,bytes)\":{\"notice\":\"Schedules a packet for delivery, storing it in the packets queue.\"},\"setupOApps(bytes,uint8,uint8)\":{\"notice\":\"Sets up mock OApp contracts for testing.\"},\"verifyPackets(uint32,bytes32)\":{\"notice\":\"Verifies and processes packets destined for a specific chain and user address.\"},\"wireOApps(address[])\":{\"notice\":\"Configures the peers between multiple OApp instances.\"},\"wireReadOApps(address[],uint32[])\":{\"notice\":\"Configures the read channels for multiple OApp instances.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/vault-sync/VaultComposerSync_Base.t.sol\":\"VaultComposerSyncBaseTest\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/\"]},\"sources\":{\"contracts/VaultComposerSync.sol\":{\"keccak256\":\"0xbbba257858c39e33201067897be32e7e2dac636726498e4f394115c2bc3bf93b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ff9ce61a8cd70dfea73b632241c852a040c0ae2c9470c7add66571cc32e0246\",\"dweb:/ipfs/QmauMyGN1mGiv9pLEtnZbXjpd8J49AzV6W8bSLQ9Uf2LEH\"]},\"contracts/interfaces/IVaultComposerSync.sol\":{\"keccak256\":\"0x86597121d142cdd98d7399abfe1109ab4052d570056758f71193b8a614c289cd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bcfb48d7d685e5e4d46dc16e3a74d18341c489ea4efcab2e593ec3b3f3cca48\",\"dweb:/ipfs/QmQG5PGYqVDrxBeGy7vcYKkk3jjqt3mLJ9kJpjwcRQzWZu\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":{\"keccak256\":\"0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2\",\"dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol\":{\"keccak256\":\"0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497\",\"dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":{\"keccak256\":\"0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79\",\"dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol\":{\"keccak256\":\"0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2\",\"dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":{\"keccak256\":\"0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc\",\"dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":{\"keccak256\":\"0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc\",\"dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":{\"keccak256\":\"0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899\",\"dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol\":{\"keccak256\":\"0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8\",\"dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":{\"keccak256\":\"0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691\",\"dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol\":{\"keccak256\":\"0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda\",\"dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol\":{\"keccak256\":\"0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d\",\"dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol\":{\"keccak256\":\"0xd40d91e8173cdb5bb821b4594f806b99344d5fd605bc6f2cf0fb21d5ab2500e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1278c26c077e3b1ee6a5f25385a3c00eaecc0efd7b622facac5569d1e47ac42e\",\"dweb:/ipfs/QmQZyrJV7UoUfdY1KYNJ2ru27Khtg4Z8v8XE9KNHFtsvA4\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol\":{\"keccak256\":\"0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7\",\"dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFTAdapter.sol\":{\"keccak256\":\"0xd65041c093c19792b66369a04b4aea5c988c32e2cf4ab952a442315426407fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1cc68778a40a45397f1ffcdba25920523a75d321da8852f7688f50885bbd08\",\"dweb:/ipfs/QmRUL7Q6dNxbc1Mz1hXgUz7eyCZDpt9eJD8BK1EMaJ9Yoz\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol\":{\"keccak256\":\"0xdda89798c66928bba9e0fa44b3edf4710ff15cf46edadcf3e15c92d78fcc9ca8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef0cf33304a4ae343e83e9c11bafb2516f2b256c290cba3e096455ff237fa78c\",\"dweb:/ipfs/QmQph8KfKf9o7JNoas4BmNQ9qL9whZsrchouPiUp7o4YFm\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0xc60c7b4374b3d89f33b8de982f463c92374a8548800c816fe776f0ec76351fb0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9e2ae9efc2a93373e822b148b3a3b50e3562c8c317f2e71d73cf4a11dede9d15\",\"dweb:/ipfs/QmahCbqvqEcWLJpqE6EbHHTuSbnGWyo35ZBVqoyKv18BSF\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":{\"keccak256\":\"0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973\",\"dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":{\"keccak256\":\"0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f\",\"dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol\":{\"keccak256\":\"0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688\",\"dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol\":{\"keccak256\":\"0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab\",\"dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol\":{\"keccak256\":\"0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b\",\"dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":{\"keccak256\":\"0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045\",\"dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol\":{\"keccak256\":\"0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff\",\"dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol\":{\"keccak256\":\"0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73\",\"dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol\":{\"keccak256\":\"0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f\",\"dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol\":{\"keccak256\":\"0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec\",\"dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol\":{\"keccak256\":\"0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0\",\"dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol\":{\"keccak256\":\"0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4\",\"dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol\":{\"keccak256\":\"0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574\",\"dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol\":{\"keccak256\":\"0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991\",\"dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":{\"keccak256\":\"0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1\",\"dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x399d0b11c8e4e902b6c95c21c187968e62e1bd2a86b8f6dad882c399a05404c1\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://82618dd9135c30870716bb9561f238b68b0c46cff6c7311a3d4b1c35a541c633\",\"dweb:/ipfs/QmSw3gEwXthgoDAqE3gemC5JfQnBnRBTFGEJaDNBj7JwxH\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]},\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09\",\"dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol\":{\"keccak256\":\"0x51aabf26e9682335ecf33b708cbcdf26e42bdc2f0a2e6fc09d6640219a0e00f6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9423a1603d9145e142d50aa0f9a31199731733535501a7d3918d36b1deed78f2\",\"dweb:/ipfs/QmQAArNnrZVfKrbY3vGer2G6775HozDmGrsovtz5NFqGrP\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol\":{\"keccak256\":\"0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb\",\"dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3\"]},\"test/mocks/MockOFT.sol\":{\"keccak256\":\"0x6c2143557accb95c3be9a0942cb8bca877ef94d3ec34f51112fe744a72dad047\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://437d64f216e278082bd978ccbb9fc64a27707c564678a08a827df0741ec63d44\",\"dweb:/ipfs/QmagfMbuJuJV7LLXrxAoftExfETeFcszkSZFvYJ1T2u9kJ\"]},\"test/mocks/MockVault.sol\":{\"keccak256\":\"0xd4a6b9e7c49512a7ed3548781d45d9082b3ecd25dd635873926c39184d485790\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://70acbb9b707cc17ee6cd36d71e21c7a8ab793a700c152c77a9babf2a1836aeca\",\"dweb:/ipfs/Qmef5Fs6DD5we9Qr3SQnYJUpne726JdpkGUqrq9BFbJgpn\"]},\"test/vault-sync/VaultComposerSync_Base.t.sol\":{\"keccak256\":\"0x31b5b3e30e1869648bb806871a9713d85ced6233448dfc9c0e6f59a31140d536\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6b43dc68a03a7305c8f5049b1080dd1387edbd99ea0de6e9e009471516aaa982\",\"dweb:/ipfs/QmVj6GGCCe2QvFf33dwYxHNWqLAdXh4aVnyacHBT8v4gRW\"]}},\"version\":1}",
+ "metadata": {
+ "compiler": { "version": "0.8.22+commit.4fc1097e" },
+ "language": "Solidity",
+ "output": {
+ "abi": [
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidLzComposeOption"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidLzReadOption"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidLzReceiveOption"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidNativeDropOption"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint16", "name": "optionType", "type": "uint16" }
+ ],
+ "type": "error",
+ "name": "InvalidOptionType"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint8", "name": "bits", "type": "uint8" },
+ { "internalType": "uint256", "name": "value", "type": "uint256" }
+ ],
+ "type": "error",
+ "name": "SafeCastOverflowedUintDowncast"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_address",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "int256[]",
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "val",
+ "type": "address[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_bytes",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_bytes32",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "int256",
+ "name": "",
+ "type": "int256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_int",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "address",
+ "name": "val",
+ "type": "address",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_address",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "int256[]",
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "address[]",
+ "name": "val",
+ "type": "address[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "bytes",
+ "name": "val",
+ "type": "bytes",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_bytes",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "bytes32",
+ "name": "val",
+ "type": "bytes32",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_bytes32",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "int256",
+ "name": "val",
+ "type": "int256",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_decimal_int",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "val",
+ "type": "uint256",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_decimal_uint",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "int256",
+ "name": "val",
+ "type": "int256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_int",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "string",
+ "name": "val",
+ "type": "string",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_string",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "val",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_uint",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_string",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_uint",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "logs",
+ "anonymous": false
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "ARB_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "BAD_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "DEFAULT_CHANNEL_ID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "ETH_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "EVM_COMPUTE_MAP_BPS",
+ "outputs": [
+ { "internalType": "uint16", "name": "", "type": "uint16" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "EVM_COMPUTE_REDUCE_FEE_USD",
+ "outputs": [
+ { "internalType": "uint120", "name": "", "type": "uint120" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "EVM_REQUEST_FEE_USD",
+ "outputs": [
+ { "internalType": "uint120", "name": "", "type": "uint120" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "INITIAL_BALANCE",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "IS_TEST",
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "MAP_REDUCE_COMPUTE_TYPES",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "NATIVE_TOKEN_PRICE_USD",
+ "outputs": [
+ { "internalType": "uint128", "name": "", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "OPTIONS_LZRECEIVE_100k",
+ "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "POL_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "TOKENS_TO_SEND",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "TREASURY_GAS_CAP",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "TREASURY_GAS_FOR_FEE_CAP",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "VaultComposerSyncArb",
+ "outputs": [
+ {
+ "internalType": "contract VaultComposerSync",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "arbEndpoint",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "arbExecutor",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "packetBytes", "type": "bytes" },
+ { "internalType": "bytes32", "name": "guid", "type": "bytes32" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "assertGuid"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "assetOFT_arb",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "assetOFT_eth",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "assetOFT_pol",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint8",
+ "name": "_endpointNum",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum TestHelperOz5.LibraryType",
+ "name": "_libraryType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address[]",
+ "name": "nativeTokenAddresses",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "createEndpoints"
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeLzComposeOption",
+ "outputs": [
+ { "internalType": "uint16", "name": "index", "type": "uint16" },
+ { "internalType": "uint128", "name": "gas", "type": "uint128" },
+ { "internalType": "uint128", "name": "value", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeLzReadOption",
+ "outputs": [
+ { "internalType": "uint128", "name": "gas", "type": "uint128" },
+ { "internalType": "uint32", "name": "size", "type": "uint32" },
+ { "internalType": "uint128", "name": "value", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeLzReceiveOption",
+ "outputs": [
+ { "internalType": "uint128", "name": "gas", "type": "uint128" },
+ { "internalType": "uint128", "name": "value", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeNativeDropOption",
+ "outputs": [
+ { "internalType": "uint128", "name": "amount", "type": "uint128" },
+ { "internalType": "bytes32", "name": "receiver", "type": "bytes32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeArtifacts",
+ "outputs": [
+ {
+ "internalType": "string[]",
+ "name": "excludedArtifacts_",
+ "type": "string[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeContracts",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "excludedContracts_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeSelectors",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "name": "excludedSelectors_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeSenders",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "excludedSenders_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "executorValueCap",
+ "outputs": [
+ { "internalType": "uint128", "name": "", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "failed",
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint16", "name": "_dstEid", "type": "uint16" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "getNextInflightPacket",
+ "outputs": [
+ { "internalType": "bytes", "name": "packetBytes", "type": "bytes" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint16", "name": "_dstEid", "type": "uint16" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "hasPendingPackets",
+ "outputs": [
+ { "internalType": "bool", "name": "flag", "type": "bool" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ { "internalType": "address", "name": "_from", "type": "address" },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ { "internalType": "bytes32", "name": "_guid", "type": "bytes32" },
+ { "internalType": "address", "name": "_to", "type": "address" },
+ { "internalType": "bytes", "name": "_composerMsg", "type": "bytes" }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzCompose"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ { "internalType": "bytes32", "name": "_guid", "type": "bytes32" },
+ {
+ "internalType": "address",
+ "name": "_composer",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzCompose"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ {
+ "internalType": "bytes",
+ "name": "_resolvedPayload",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzReadReceive"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzReceive"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "msgValueToFail",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "msgValueToPass",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ { "internalType": "uint256", "name": "_cursor", "type": "uint256" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "nextExecutorOption",
+ "outputs": [
+ { "internalType": "uint8", "name": "optionType", "type": "uint8" },
+ { "internalType": "bytes", "name": "option", "type": "bytes" },
+ { "internalType": "uint256", "name": "cursor", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract EndpointV2Mock",
+ "name": "endpoint",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "registerEndpoint"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "schedulePacket"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint128",
+ "name": "_valueCap",
+ "type": "uint128"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setExecutorValueCap"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setUp"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint8",
+ "name": "_endpointNum",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum TestHelperOz5.LibraryType",
+ "name": "_libraryType",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setUpEndpoints"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_oappCreationCode",
+ "type": "bytes"
+ },
+ { "internalType": "uint8", "name": "_startEid", "type": "uint8" },
+ { "internalType": "uint8", "name": "_oappNum", "type": "uint8" }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setupOApps",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "oapps",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "shareOFT_arb",
+ "outputs": [
+ {
+ "internalType": "contract MockOFTAdapter",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "shareOFT_eth",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "shareOFT_pol",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetArtifactSelectors",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzArtifactSelector[]",
+ "name": "targetedArtifactSelectors_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "string",
+ "name": "artifact",
+ "type": "string"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetArtifacts",
+ "outputs": [
+ {
+ "internalType": "string[]",
+ "name": "targetedArtifacts_",
+ "type": "string[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetContracts",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "targetedContracts_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetInterfaces",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzInterface[]",
+ "name": "targetedInterfaces_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "string[]",
+ "name": "artifacts",
+ "type": "string[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetSelectors",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "name": "targetedSelectors_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetSenders",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "targetedSenders_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "userA",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "userB",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_resolvedPayload",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "validatePacket"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "vault_arb",
+ "outputs": [
+ {
+ "internalType": "contract MockVault",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ {
+ "internalType": "address",
+ "name": "_dstAddress",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "verifyPackets"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_packetAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_composer",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_resolvedPayload",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "verifyPackets"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "verifyPackets"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "oapps",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "wireOApps"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "oapps",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint32[]",
+ "name": "channels",
+ "type": "uint32[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "wireReadOApps"
+ },
+ { "inputs": [], "stateMutability": "payable", "type": "receive" }
+ ],
+ "devdoc": {
+ "kind": "dev",
+ "methods": {
+ "createEndpoints(uint8,uint8,address[])": {
+ "params": {
+ "_endpointNum": "The number of endpoints to create.",
+ "_libraryType": "The type of message library to use (UltraLightNode or SimpleMessageLib)."
+ }
+ },
+ "schedulePacket(bytes,bytes)": {
+ "details": "Adds the packet to the front of the queue and stores its options for later retrieval.",
+ "params": {
+ "_options": "The options associated with the packet, used during delivery.",
+ "_packetBytes": "The packet data to be scheduled."
+ }
+ },
+ "setExecutorValueCap(uint128)": {
+ "details": "set executorValueCap if more than 0.1 ether is necessarythis must be called prior to setUpEndpoints() if the value is to be used",
+ "params": {
+ "_valueCap": "amount executor can pass as msg.value to lzReceive()"
+ }
+ },
+ "setUp()": {
+ "details": "Initializes test environment setup, to be overridden by specific tests."
+ },
+ "setupOApps(bytes,uint8,uint8)": {
+ "params": {
+ "_oappCreationCode": "The bytecode for creating OApp contracts.",
+ "_oappNum": "The number of OApps to set up.",
+ "_startEid": "The starting endpoint ID for OApp setup."
+ },
+ "returns": {
+ "oapps": "An array of addresses for the deployed OApps."
+ }
+ },
+ "verifyPackets(uint32,address)": {
+ "details": "verify packets to destination chain's OApp address.",
+ "params": {
+ "_dstAddress": "The destination address.",
+ "_dstEid": "The destination endpoint ID."
+ }
+ },
+ "verifyPackets(uint32,bytes32)": {
+ "details": "Calls an overloaded version of verifyPackets with default values for packet amount and composer address.",
+ "params": {
+ "_dstAddress": "The destination address in bytes32 format.",
+ "_dstEid": "The destination chain's endpoint ID."
+ }
+ },
+ "verifyPackets(uint32,bytes32,uint256,address,bytes)": {
+ "details": "dst UA receive/execute packetswill NOT work calling this directly with composer IF the composed payload is different from the lzReceive msg payload"
+ },
+ "wireOApps(address[])": {
+ "details": "Sets each OApp as a peer to every other OApp in the provided array, except itself.",
+ "params": {
+ "oapps": "An array of addresses representing the deployed OApp instances."
+ }
+ },
+ "wireReadOApps(address[],uint32[])": {
+ "details": "Sets each OApp to read from the provided channels.",
+ "params": {
+ "channels": "An array of channel IDs to set as read channels.",
+ "oapps": "An array of addresses representing the deployed OApp instances."
+ }
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {
+ "createEndpoints(uint8,uint8,address[])": {
+ "notice": "Sets up endpoints for testing."
+ },
+ "schedulePacket(bytes,bytes)": {
+ "notice": "Schedules a packet for delivery, storing it in the packets queue."
+ },
+ "setupOApps(bytes,uint8,uint8)": {
+ "notice": "Sets up mock OApp contracts for testing."
+ },
+ "verifyPackets(uint32,bytes32)": {
+ "notice": "Verifies and processes packets destined for a specific chain and user address."
+ },
+ "wireOApps(address[])": {
+ "notice": "Configures the peers between multiple OApp instances."
+ },
+ "wireReadOApps(address[],uint32[])": {
+ "notice": "Configures the read channels for multiple OApp instances."
+ }
+ },
+ "version": 1
+ }
+ },
+ "settings": {
+ "remappings": [
+ "@layerzerolabs/=node_modules/@layerzerolabs/",
+ "@openzeppelin/=node_modules/@openzeppelin/",
+ "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/",
+ "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/",
+ "solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/"
+ ],
+ "optimizer": { "enabled": true, "runs": 20000 },
+ "metadata": { "bytecodeHash": "ipfs" },
+ "compilationTarget": {
+ "test/vault-sync/VaultComposerSync_Base.t.sol": "VaultComposerSyncBaseTest"
+ },
+ "evmVersion": "shanghai",
+ "libraries": {}
+ },
+ "sources": {
+ "contracts/VaultComposerSync.sol": {
+ "keccak256": "0xbbba257858c39e33201067897be32e7e2dac636726498e4f394115c2bc3bf93b",
+ "urls": [
+ "bzz-raw://7ff9ce61a8cd70dfea73b632241c852a040c0ae2c9470c7add66571cc32e0246",
+ "dweb:/ipfs/QmauMyGN1mGiv9pLEtnZbXjpd8J49AzV6W8bSLQ9Uf2LEH"
+ ],
+ "license": "MIT"
+ },
+ "contracts/interfaces/IVaultComposerSync.sol": {
+ "keccak256": "0x86597121d142cdd98d7399abfe1109ab4052d570056758f71193b8a614c289cd",
+ "urls": [
+ "bzz-raw://0bcfb48d7d685e5e4d46dc16e3a74d18341c489ea4efcab2e593ec3b3f3cca48",
+ "dweb:/ipfs/QmQG5PGYqVDrxBeGy7vcYKkk3jjqt3mLJ9kJpjwcRQzWZu"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": {
+ "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1",
+ "urls": [
+ "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9",
+ "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": {
+ "keccak256": "0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9",
+ "urls": [
+ "bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2",
+ "dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": {
+ "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1",
+ "urls": [
+ "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4",
+ "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": {
+ "keccak256": "0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e",
+ "urls": [
+ "bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497",
+ "dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": {
+ "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af",
+ "urls": [
+ "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696",
+ "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": {
+ "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc",
+ "urls": [
+ "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d",
+ "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": {
+ "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347",
+ "urls": [
+ "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4",
+ "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": {
+ "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc",
+ "urls": [
+ "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8",
+ "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": {
+ "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657",
+ "urls": [
+ "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab",
+ "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": {
+ "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345",
+ "urls": [
+ "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5",
+ "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": {
+ "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1",
+ "urls": [
+ "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534",
+ "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": {
+ "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c",
+ "urls": [
+ "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb",
+ "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": {
+ "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d",
+ "urls": [
+ "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89",
+ "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh"
+ ],
+ "license": "MIT OR Apache-2.0"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": {
+ "keccak256": "0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44",
+ "urls": [
+ "bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79",
+ "dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": {
+ "keccak256": "0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5",
+ "urls": [
+ "bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2",
+ "dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": {
+ "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3",
+ "urls": [
+ "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4",
+ "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": {
+ "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284",
+ "urls": [
+ "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c",
+ "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": {
+ "keccak256": "0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9",
+ "urls": [
+ "bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc",
+ "dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": {
+ "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b",
+ "urls": [
+ "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3",
+ "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": {
+ "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8",
+ "urls": [
+ "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5",
+ "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": {
+ "keccak256": "0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91",
+ "urls": [
+ "bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc",
+ "dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": {
+ "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35",
+ "urls": [
+ "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141",
+ "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": {
+ "keccak256": "0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda",
+ "urls": [
+ "bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899",
+ "dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": {
+ "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a",
+ "urls": [
+ "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9",
+ "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": {
+ "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27",
+ "urls": [
+ "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850",
+ "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": {
+ "keccak256": "0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3",
+ "urls": [
+ "bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8",
+ "dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": {
+ "keccak256": "0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f",
+ "urls": [
+ "bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691",
+ "dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": {
+ "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a",
+ "urls": [
+ "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241",
+ "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": {
+ "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73",
+ "urls": [
+ "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c",
+ "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": {
+ "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1",
+ "urls": [
+ "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a",
+ "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": {
+ "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420",
+ "urls": [
+ "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54",
+ "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": {
+ "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49",
+ "urls": [
+ "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf",
+ "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": {
+ "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3",
+ "urls": [
+ "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083",
+ "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": {
+ "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0",
+ "urls": [
+ "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933",
+ "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": {
+ "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c",
+ "urls": [
+ "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0",
+ "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": {
+ "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc",
+ "urls": [
+ "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b",
+ "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": {
+ "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972",
+ "urls": [
+ "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927",
+ "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": {
+ "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901",
+ "urls": [
+ "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d",
+ "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": {
+ "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e",
+ "urls": [
+ "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6",
+ "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": {
+ "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625",
+ "urls": [
+ "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97",
+ "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": {
+ "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb",
+ "urls": [
+ "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1",
+ "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": {
+ "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875",
+ "urls": [
+ "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d",
+ "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": {
+ "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7",
+ "urls": [
+ "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24",
+ "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": {
+ "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5",
+ "urls": [
+ "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b",
+ "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": {
+ "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a",
+ "urls": [
+ "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0",
+ "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": {
+ "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9",
+ "urls": [
+ "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f",
+ "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": {
+ "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9",
+ "urls": [
+ "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f",
+ "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": {
+ "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28",
+ "urls": [
+ "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2",
+ "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": {
+ "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680",
+ "urls": [
+ "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09",
+ "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": {
+ "keccak256": "0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22",
+ "urls": [
+ "bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda",
+ "dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa"
+ ],
+ "license": "BUSL-1.1"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": {
+ "keccak256": "0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5",
+ "urls": [
+ "bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28",
+ "dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": {
+ "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc",
+ "urls": [
+ "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0",
+ "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": {
+ "keccak256": "0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b",
+ "urls": [
+ "bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075",
+ "dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": {
+ "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20",
+ "urls": [
+ "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2",
+ "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol": {
+ "keccak256": "0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae",
+ "urls": [
+ "bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d",
+ "dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": {
+ "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58",
+ "urls": [
+ "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd",
+ "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": {
+ "keccak256": "0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c",
+ "urls": [
+ "bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e",
+ "dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": {
+ "keccak256": "0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461",
+ "urls": [
+ "bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc",
+ "dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": {
+ "keccak256": "0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d",
+ "urls": [
+ "bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2",
+ "dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": {
+ "keccak256": "0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01",
+ "urls": [
+ "bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af",
+ "dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol": {
+ "keccak256": "0xd40d91e8173cdb5bb821b4594f806b99344d5fd605bc6f2cf0fb21d5ab2500e3",
+ "urls": [
+ "bzz-raw://1278c26c077e3b1ee6a5f25385a3c00eaecc0efd7b622facac5569d1e47ac42e",
+ "dweb:/ipfs/QmQZyrJV7UoUfdY1KYNJ2ru27Khtg4Z8v8XE9KNHFtsvA4"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": {
+ "keccak256": "0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750",
+ "urls": [
+ "bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82",
+ "dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": {
+ "keccak256": "0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2",
+ "urls": [
+ "bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a",
+ "dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": {
+ "keccak256": "0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84",
+ "urls": [
+ "bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e",
+ "dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": {
+ "keccak256": "0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6",
+ "urls": [
+ "bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc",
+ "dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol": {
+ "keccak256": "0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a",
+ "urls": [
+ "bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7",
+ "dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/OFTAdapter.sol": {
+ "keccak256": "0xd65041c093c19792b66369a04b4aea5c988c32e2cf4ab952a442315426407fd0",
+ "urls": [
+ "bzz-raw://1f1cc68778a40a45397f1ffcdba25920523a75d321da8852f7688f50885bbd08",
+ "dweb:/ipfs/QmRUL7Q6dNxbc1Mz1hXgUz7eyCZDpt9eJD8BK1EMaJ9Yoz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol": {
+ "keccak256": "0xdda89798c66928bba9e0fa44b3edf4710ff15cf46edadcf3e15c92d78fcc9ca8",
+ "urls": [
+ "bzz-raw://ef0cf33304a4ae343e83e9c11bafb2516f2b256c290cba3e096455ff237fa78c",
+ "dweb:/ipfs/QmQph8KfKf9o7JNoas4BmNQ9qL9whZsrchouPiUp7o4YFm"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": {
+ "keccak256": "0xc60c7b4374b3d89f33b8de982f463c92374a8548800c816fe776f0ec76351fb0",
+ "urls": [
+ "bzz-raw://9e2ae9efc2a93373e822b148b3a3b50e3562c8c317f2e71d73cf4a11dede9d15",
+ "dweb:/ipfs/QmahCbqvqEcWLJpqE6EbHHTuSbnGWyo35ZBVqoyKv18BSF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": {
+ "keccak256": "0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5",
+ "urls": [
+ "bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e",
+ "dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": {
+ "keccak256": "0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b",
+ "urls": [
+ "bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258",
+ "dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": {
+ "keccak256": "0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0",
+ "urls": [
+ "bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973",
+ "dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q"
+ ],
+ "license": "UNLICENSED"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": {
+ "keccak256": "0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63",
+ "urls": [
+ "bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f",
+ "dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq"
+ ],
+ "license": "UNLICENSED"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": {
+ "keccak256": "0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1",
+ "urls": [
+ "bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688",
+ "dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol": {
+ "keccak256": "0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f",
+ "urls": [
+ "bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab",
+ "dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": {
+ "keccak256": "0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9",
+ "urls": [
+ "bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b",
+ "dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": {
+ "keccak256": "0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff",
+ "urls": [
+ "bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045",
+ "dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": {
+ "keccak256": "0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01",
+ "urls": [
+ "bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff",
+ "dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": {
+ "keccak256": "0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f",
+ "urls": [
+ "bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73",
+ "dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": {
+ "keccak256": "0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830",
+ "urls": [
+ "bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f",
+ "dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": {
+ "keccak256": "0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44",
+ "urls": [
+ "bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec",
+ "dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol": {
+ "keccak256": "0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc",
+ "urls": [
+ "bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0",
+ "dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": {
+ "keccak256": "0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121",
+ "urls": [
+ "bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4",
+ "dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol": {
+ "keccak256": "0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348",
+ "urls": [
+ "bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574",
+ "dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol": {
+ "keccak256": "0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9",
+ "urls": [
+ "bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991",
+ "dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": {
+ "keccak256": "0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97",
+ "urls": [
+ "bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1",
+ "dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": {
+ "keccak256": "0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd",
+ "urls": [
+ "bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d",
+ "dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": {
+ "keccak256": "0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270",
+ "urls": [
+ "bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe",
+ "dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": {
+ "keccak256": "0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e",
+ "urls": [
+ "bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351",
+ "dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": {
+ "keccak256": "0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746",
+ "urls": [
+ "bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41",
+ "dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdConstants.sol": {
+ "keccak256": "0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534",
+ "urls": [
+ "bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc",
+ "dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": {
+ "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77",
+ "urls": [
+ "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6",
+ "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": {
+ "keccak256": "0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d",
+ "urls": [
+ "bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391",
+ "dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": {
+ "keccak256": "0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500",
+ "urls": [
+ "bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974",
+ "dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": {
+ "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2",
+ "urls": [
+ "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92",
+ "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": {
+ "keccak256": "0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc",
+ "urls": [
+ "bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57",
+ "dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": {
+ "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d",
+ "urls": [
+ "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8",
+ "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdToml.sol": {
+ "keccak256": "0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861",
+ "urls": [
+ "bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3",
+ "dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": {
+ "keccak256": "0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737",
+ "urls": [
+ "bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138",
+ "dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": {
+ "keccak256": "0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c",
+ "urls": [
+ "bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4",
+ "dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": {
+ "keccak256": "0x399d0b11c8e4e902b6c95c21c187968e62e1bd2a86b8f6dad882c399a05404c1",
+ "urls": [
+ "bzz-raw://82618dd9135c30870716bb9561f238b68b0c46cff6c7311a3d4b1c35a541c633",
+ "dweb:/ipfs/QmSw3gEwXthgoDAqE3gemC5JfQnBnRBTFGEJaDNBj7JwxH"
+ ],
+ "license": "MIT OR Apache-2.0"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": {
+ "keccak256": "0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5",
+ "urls": [
+ "bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57",
+ "dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": {
+ "keccak256": "0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f",
+ "urls": [
+ "bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d",
+ "dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": {
+ "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a",
+ "urls": [
+ "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0",
+ "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": {
+ "keccak256": "0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11",
+ "urls": [
+ "bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab",
+ "dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/BytesLib.sol": {
+ "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a",
+ "urls": [
+ "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535",
+ "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq"
+ ],
+ "license": "Unlicense"
+ },
+ "node_modules/@openzeppelin/contracts/access/AccessControl.sol": {
+ "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308",
+ "urls": [
+ "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80",
+ "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": {
+ "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606",
+ "urls": [
+ "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1",
+ "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/access/Ownable.sol": {
+ "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
+ "urls": [
+ "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
+ "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": {
+ "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7",
+ "urls": [
+ "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b",
+ "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": {
+ "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724",
+ "urls": [
+ "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a",
+ "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": {
+ "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c",
+ "urls": [
+ "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba",
+ "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol": {
+ "keccak256": "0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17",
+ "urls": [
+ "bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1",
+ "dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
+ "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b",
+ "urls": [
+ "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b",
+ "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": {
+ "keccak256": "0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31",
+ "urls": [
+ "bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09",
+ "dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": {
+ "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7",
+ "urls": [
+ "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db",
+ "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol": {
+ "keccak256": "0x51aabf26e9682335ecf33b708cbcdf26e42bdc2f0a2e6fc09d6640219a0e00f6",
+ "urls": [
+ "bzz-raw://9423a1603d9145e142d50aa0f9a31199731733535501a7d3918d36b1deed78f2",
+ "dweb:/ipfs/QmQAArNnrZVfKrbY3vGer2G6775HozDmGrsovtz5NFqGrP"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
+ "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330",
+ "urls": [
+ "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf",
+ "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
+ "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310",
+ "urls": [
+ "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862",
+ "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Address.sol": {
+ "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5",
+ "urls": [
+ "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23",
+ "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Context.sol": {
+ "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
+ "urls": [
+ "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
+ "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Errors.sol": {
+ "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123",
+ "urls": [
+ "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf",
+ "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Panic.sol": {
+ "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a",
+ "urls": [
+ "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a",
+ "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Pausable.sol": {
+ "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd",
+ "urls": [
+ "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc",
+ "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": {
+ "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3",
+ "urls": [
+ "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a",
+ "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": {
+ "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84",
+ "urls": [
+ "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9",
+ "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": {
+ "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa",
+ "urls": [
+ "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287",
+ "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": {
+ "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8",
+ "urls": [
+ "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621",
+ "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/math/Math.sol": {
+ "keccak256": "0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea",
+ "urls": [
+ "bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d",
+ "dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": {
+ "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54",
+ "urls": [
+ "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8",
+ "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": {
+ "keccak256": "0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217",
+ "urls": [
+ "bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb",
+ "dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3"
+ ],
+ "license": "MIT"
+ },
+ "test/mocks/MockOFT.sol": {
+ "keccak256": "0x6c2143557accb95c3be9a0942cb8bca877ef94d3ec34f51112fe744a72dad047",
+ "urls": [
+ "bzz-raw://437d64f216e278082bd978ccbb9fc64a27707c564678a08a827df0741ec63d44",
+ "dweb:/ipfs/QmagfMbuJuJV7LLXrxAoftExfETeFcszkSZFvYJ1T2u9kJ"
+ ],
+ "license": "AGPL-3.0-only"
+ },
+ "test/mocks/MockVault.sol": {
+ "keccak256": "0xd4a6b9e7c49512a7ed3548781d45d9082b3ecd25dd635873926c39184d485790",
+ "urls": [
+ "bzz-raw://70acbb9b707cc17ee6cd36d71e21c7a8ab793a700c152c77a9babf2a1836aeca",
+ "dweb:/ipfs/Qmef5Fs6DD5we9Qr3SQnYJUpne726JdpkGUqrq9BFbJgpn"
+ ],
+ "license": "AGPL-3.0-only"
+ },
+ "test/vault-sync/VaultComposerSync_Base.t.sol": {
+ "keccak256": "0x31b5b3e30e1869648bb806871a9713d85ced6233448dfc9c0e6f59a31140d536",
+ "urls": [
+ "bzz-raw://6b43dc68a03a7305c8f5049b1080dd1387edbd99ea0de6e9e009471516aaa982",
+ "dweb:/ipfs/QmVj6GGCCe2QvFf33dwYxHNWqLAdXh4aVnyacHBT8v4gRW"
+ ],
+ "license": "UNLICENSED"
+ }
+ },
+ "version": 1
+ },
+ "id": 135
+}
diff --git a/packages/ovault-evm/artifacts/VaultComposerSync_E2E.t.sol/VaultComposerSyncE2ETest.json b/packages/ovault-evm/artifacts/VaultComposerSync_E2E.t.sol/VaultComposerSyncE2ETest.json
new file mode 100644
index 0000000000..f9a5994a21
--- /dev/null
+++ b/packages/ovault-evm/artifacts/VaultComposerSync_E2E.t.sol/VaultComposerSyncE2ETest.json
@@ -0,0 +1,3781 @@
+{
+ "abi": [
+ { "type": "receive", "stateMutability": "payable" },
+ {
+ "type": "function",
+ "name": "ARB_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "BAD_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "DEFAULT_CHANNEL_ID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "ETH_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "EVM_COMPUTE_MAP_BPS",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "EVM_COMPUTE_REDUCE_FEE_USD",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint120", "internalType": "uint120" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "EVM_REQUEST_FEE_USD",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint120", "internalType": "uint120" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "INITIAL_BALANCE",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "IS_TEST",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "MAP_REDUCE_COMPUTE_TYPES",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "NATIVE_TOKEN_PRICE_USD",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "OPTIONS_LZRECEIVE_100k",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "POL_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "TOKENS_TO_SEND",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "TREASURY_GAS_CAP",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "TREASURY_GAS_FOR_FEE_CAP",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "VaultComposerSyncArb",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract VaultComposerSync"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "arbEndpoint",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "arbExecutor",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "assertGuid",
+ "inputs": [
+ { "name": "packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "guid", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "assetOFT_arb",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "assetOFT_eth",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "assetOFT_pol",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "createEndpoints",
+ "inputs": [
+ { "name": "_endpointNum", "type": "uint8", "internalType": "uint8" },
+ {
+ "name": "_libraryType",
+ "type": "uint8",
+ "internalType": "enum TestHelperOz5.LibraryType"
+ },
+ {
+ "name": "nativeTokenAddresses",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "decodeLzComposeOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "index", "type": "uint16", "internalType": "uint16" },
+ { "name": "gas", "type": "uint128", "internalType": "uint128" },
+ { "name": "value", "type": "uint128", "internalType": "uint128" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "decodeLzReadOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "gas", "type": "uint128", "internalType": "uint128" },
+ { "name": "size", "type": "uint32", "internalType": "uint32" },
+ { "name": "value", "type": "uint128", "internalType": "uint128" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "decodeLzReceiveOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "gas", "type": "uint128", "internalType": "uint128" },
+ { "name": "value", "type": "uint128", "internalType": "uint128" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "decodeNativeDropOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "amount", "type": "uint128", "internalType": "uint128" },
+ { "name": "receiver", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "excludeArtifacts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedArtifacts_",
+ "type": "string[]",
+ "internalType": "string[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "excludeContracts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedContracts_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "excludeSelectors",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedSelectors_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "components": [
+ { "name": "addr", "type": "address", "internalType": "address" },
+ {
+ "name": "selectors",
+ "type": "bytes4[]",
+ "internalType": "bytes4[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "excludeSenders",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedSenders_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "executorValueCap",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "failed",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getNextInflightPacket",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint16", "internalType": "uint16" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [
+ { "name": "packetBytes", "type": "bytes", "internalType": "bytes" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "hasPendingPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint16", "internalType": "uint16" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [{ "name": "flag", "type": "bool", "internalType": "bool" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "lzCompose",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_from", "type": "address", "internalType": "address" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_guid", "type": "bytes32", "internalType": "bytes32" },
+ { "name": "_to", "type": "address", "internalType": "address" },
+ { "name": "_composerMsg", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "lzCompose",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_guid", "type": "bytes32", "internalType": "bytes32" },
+ { "name": "_composer", "type": "address", "internalType": "address" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "lzReadReceive",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "lzReceive",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "msgValueToFail",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "msgValueToPass",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "nextExecutorOption",
+ "inputs": [
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_cursor", "type": "uint256", "internalType": "uint256" }
+ ],
+ "outputs": [
+ { "name": "optionType", "type": "uint8", "internalType": "uint8" },
+ { "name": "option", "type": "bytes", "internalType": "bytes" },
+ { "name": "cursor", "type": "uint256", "internalType": "uint256" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "registerEndpoint",
+ "inputs": [
+ {
+ "name": "endpoint",
+ "type": "address",
+ "internalType": "contract EndpointV2Mock"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "schedulePacket",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setExecutorValueCap",
+ "inputs": [
+ { "name": "_valueCap", "type": "uint128", "internalType": "uint128" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setUp",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setUpEndpoints",
+ "inputs": [
+ { "name": "_endpointNum", "type": "uint8", "internalType": "uint8" },
+ {
+ "name": "_libraryType",
+ "type": "uint8",
+ "internalType": "enum TestHelperOz5.LibraryType"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setupOApps",
+ "inputs": [
+ {
+ "name": "_oappCreationCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ { "name": "_startEid", "type": "uint8", "internalType": "uint8" },
+ { "name": "_oappNum", "type": "uint8", "internalType": "uint8" }
+ ],
+ "outputs": [
+ { "name": "oapps", "type": "address[]", "internalType": "address[]" }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "shareOFT_arb",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract MockOFTAdapter"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "shareOFT_eth",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "shareOFT_pol",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetArtifactSelectors",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedArtifactSelectors_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzArtifactSelector[]",
+ "components": [
+ { "name": "artifact", "type": "string", "internalType": "string" },
+ {
+ "name": "selectors",
+ "type": "bytes4[]",
+ "internalType": "bytes4[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetArtifacts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedArtifacts_",
+ "type": "string[]",
+ "internalType": "string[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetContracts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedContracts_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetInterfaces",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedInterfaces_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzInterface[]",
+ "components": [
+ { "name": "addr", "type": "address", "internalType": "address" },
+ {
+ "name": "artifacts",
+ "type": "string[]",
+ "internalType": "string[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetSelectors",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedSelectors_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "components": [
+ { "name": "addr", "type": "address", "internalType": "address" },
+ {
+ "name": "selectors",
+ "type": "bytes4[]",
+ "internalType": "bytes4[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetSenders",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedSenders_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "test_E2E_ethereum_to_polygon",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "userA",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "userB",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "validatePacket",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "vault_arb",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockVault" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "verifyPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_dstAddress", "type": "address", "internalType": "address" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "verifyPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" },
+ {
+ "name": "_packetAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ { "name": "_composer", "type": "address", "internalType": "address" },
+ { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "verifyPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "wireOApps",
+ "inputs": [
+ { "name": "oapps", "type": "address[]", "internalType": "address[]" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "wireReadOApps",
+ "inputs": [
+ { "name": "oapps", "type": "address[]", "internalType": "address[]" },
+ { "name": "channels", "type": "uint32[]", "internalType": "uint32[]" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "event",
+ "name": "SlotFound",
+ "inputs": [
+ {
+ "name": "who",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ },
+ {
+ "name": "fsig",
+ "type": "bytes4",
+ "indexed": false,
+ "internalType": "bytes4"
+ },
+ {
+ "name": "keysHash",
+ "type": "bytes32",
+ "indexed": false,
+ "internalType": "bytes32"
+ },
+ {
+ "name": "slot",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "WARNING_UninitedSlot",
+ "inputs": [
+ {
+ "name": "who",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ },
+ {
+ "name": "slot",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log",
+ "inputs": [
+ {
+ "name": "",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_address",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_array",
+ "inputs": [
+ {
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false,
+ "internalType": "uint256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_array",
+ "inputs": [
+ {
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false,
+ "internalType": "int256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_array",
+ "inputs": [
+ {
+ "name": "val",
+ "type": "address[]",
+ "indexed": false,
+ "internalType": "address[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_bytes",
+ "inputs": [
+ {
+ "name": "",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_bytes32",
+ "inputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "indexed": false,
+ "internalType": "bytes32"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_int",
+ "inputs": [
+ {
+ "name": "",
+ "type": "int256",
+ "indexed": false,
+ "internalType": "int256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_address",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_array",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false,
+ "internalType": "uint256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_array",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false,
+ "internalType": "int256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_array",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "address[]",
+ "indexed": false,
+ "internalType": "address[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_bytes",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_bytes32",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "bytes32",
+ "indexed": false,
+ "internalType": "bytes32"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_decimal_int",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "int256",
+ "indexed": false,
+ "internalType": "int256"
+ },
+ {
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_decimal_uint",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_int",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "int256",
+ "indexed": false,
+ "internalType": "int256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_string",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_uint",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_string",
+ "inputs": [
+ {
+ "name": "",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_uint",
+ "inputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "logs",
+ "inputs": [
+ {
+ "name": "",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "Executor_InvalidLzComposeOption",
+ "inputs": []
+ },
+ { "type": "error", "name": "Executor_InvalidLzReadOption", "inputs": [] },
+ {
+ "type": "error",
+ "name": "Executor_InvalidLzReceiveOption",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "Executor_InvalidNativeDropOption",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidOptionType",
+ "inputs": [
+ { "name": "optionType", "type": "uint16", "internalType": "uint16" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SafeCastOverflowedUintDowncast",
+ "inputs": [
+ { "name": "bits", "type": "uint8", "internalType": "uint8" },
+ { "name": "value", "type": "uint256", "internalType": "uint256" }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x60806040819052600c8054600160ff199182168117909255601f805490911690911790556200002e9062000502565b604051809103905ff08015801562000048573d5f803e3d5ffd5b50601f80546001600160a01b039290921661010002610100600160a81b0319909216919091179055602480546001600160801b03191667016345785d8a00001790556033805460ff19166003179055604080518082019091526005815264757365724160d81b6020820152620000be90620001cd565b603b80546001600160a01b0319166001600160a01b03929092169190911790556040805180820190915260058152643ab9b2b92160d91b60208201526200010590620001cd565b603c80546001600160a01b0319166001600160a01b039290921691909117905560408051808201909152600b81526a30b93122bc32b1baba37b960a91b60208201526200015290620001cd565b603e80546001600160a01b0319166001600160a01b0392909216919091179055620001aa620186a05f620001a260408051600360f01b602082015281516002818303018152602290910190915290565b9190620001e0565b603f90620001b99082620005ae565b50348015620001c6575f80fd5b50620007f0565b5f620001d98262000253565b5092915050565b6060836003620001f1825f6200036a565b61ffff16146200022c5762000207815f6200036a565b604051633a51740d60e01b815261ffff90911660048201526024015b60405180910390fd5b5f620002398585620003d9565b9050620002498660018362000454565b9695505050505050565b5f80826040516020016200026891906200069e565b60408051808303601f190181529082905280516020909101206001625e79b760e01b03198252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015620002d2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f89190620006bb565b6040516318caf8e360e31b8152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c71890620003369085908790600401620006e3565b5f604051808303815f87803b1580156200034e575f80fd5b505af115801562000361573d5f803e3d5ffd5b50505050915091565b5f620003788260026200073a565b83511015620003ca5760405162461bcd60e51b815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e6473000000000000000000000000604482015260640162000223565b50818101600201515b92915050565b60606001600160801b038216156200042357604080516001600160801b0319608086811b8216602084015285901b166030820152016040516020818303038152906040526200044d565b6040516001600160801b0319608085901b1660208201526030016040516020818303038152906040525b9392505050565b606083600362000465825f6200036a565b61ffff16146200047b5762000207815f6200036a565b846001620004908551620004ce60201b60201c565b6200049d90600162000750565b8686604051602001620004b59594939291906200076e565b6040516020818303038152906040529150509392505050565b5f61ffff821115620004fe576040516306dfcc6560e41b8152601060048201526024810183905260440162000223565b5090565b610aa980620442ff83390190565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200053957607f821691505b6020821081036200055857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620005a957805f5260205f20601f840160051c81016020851015620005855750805b601f840160051c820191505b81811015620005a6575f815560010162000591565b50505b505050565b81516001600160401b03811115620005ca57620005ca62000510565b620005e281620005db845462000524565b846200055e565b602080601f83116001811462000618575f8415620006005750858301515b5f19600386901b1c1916600185901b17855562000672565b5f85815260208120601f198616915b82811015620006485788860151825594840194600190910190840162000627565b50858210156200066657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f5b83811015620006965781810151838201526020016200067c565b50505f910152565b5f8251620006b18184602087016200067a565b9190910192915050565b5f60208284031215620006cc575f80fd5b81516001600160a01b03811681146200044d575f80fd5b60018060a01b0383168152604060208201525f8251806040840152620007118160608501602087016200067a565b601f01601f1916919091016060019392505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115620003d357620003d362000726565b61ffff818116838216019080821115620001d957620001d962000726565b5f865162000781818460208b016200067a565b7fff0000000000000000000000000000000000000000000000000000000000000060f888811b82169285019283526001600160f01b031960f089901b16600184015286901b1660038201528351620007e18160048401602088016200067a565b01600401979650505050505050565b62043b0080620007ff5f395ff3fe60806040526004361062000476575f3560e01c8063699cbade116200024a578063b1dcf5c8116200013a578063d6d6249711620000c6578063ec53eaa01162000092578063f93e1d611162000076578063f93e1d611462000dac578063fa7626d41462000dfa578063faed6c581462000e15575f80fd5b8063ec53eaa01462000d7c578063f5e4efb51462000d93575f80fd5b8063d6d624971462000cbf578063deb22e9a1462000ce3578063defd9da61462000d04578063e20c9f711462000d65575f80fd5b8063b954fdf61162000106578063b954fdf61462000c20578063ba414fa61462000c6d578063baead19c1462000c84578063cb1a295f1462000c9e575f80fd5b8063b1dcf5c81462000846578063b5508aa91462000bcf578063b752b72a1462000be6578063b76bada51462000c0a575f80fd5b806385226c8111620001d65780639751ca8611620001a2578063a29c89841162000186578063a29c89841462000b7d578063ae6ce4001462000b94578063b0464fdc1462000bb8575f80fd5b80639751ca861462000afc578063997cff1b1462000b59575f80fd5b806385226c811462000a725780638c5e9f741462000a9857806390a606f51462000ab5578063916a17c61462000ad6575f80fd5b80637a8b5d9811620002165780637a8b5d981462000a0c5780637f2e59361462000a2d57806382411c7714620005be578063834bd1591462000a4e575f80fd5b8063699cbade14620009705780636e1775e3146200098e578063703ca25414620009c45780637982cf4214620009e8575f80fd5b8063375591d71162000366578063556257df11620002f25780636019788911620002be57806366d9a9a011620002a257806366d9a9a01462000908578063677d4175146200092e57806367d53a00146200094f575f80fd5b80636019788914620008c057806365449eb014620008e4575f80fd5b8063556257df14620008465780635e42c9b2146200085e5780635ea0fefe14620008745780635edc467014620008a9575f80fd5b80633f7286f411620003325780633f7286f4146200079e578063518e8ab014620007b557806351aa318b146200080d578063536e8d3a1462000825575f80fd5b8063375591d7146200072e5780633bbd6a94146200074f5780633cae7b8a14620007665780633e5e3c231462000787575f80fd5b80631766f5a411620004025780631f3280c511620003ce57806325996dae11620003b257806325996dae14620006ce5780632a35d25014620006e45780632ade38801462000708575f80fd5b80631f3280c5146200066c5780632113ce621462000682575f80fd5b80631766f5a414620005be578063178928d314620005fc5780631cc4652514620006225780631ed7831c1462000646575f80fd5b80630afba86811620004425780630afba86814620005145780630c003ff7146200053f5780630fcaecfe146200056557806314525bce1462000591575f80fd5b8063090852b6146200048257806309c885c914620004a85780630a69faa914620004e65780630a9254e414620004fd575f80fd5b366200047e57005b5f80fd5b3480156200048e575f80fd5b50620004a6620004a03660046200b1bd565b62000e39565b005b348015620004b4575f80fd5b50603d54620004c9906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620004a6620004f73660046200b349565b62000e65565b34801562000509575f80fd5b50620004a662000fbc565b34801562000520575f80fd5b506200052b61271081565b60405161ffff9091168152602001620004dd565b3480156200054b575f80fd5b50603354620004c99061010090046001600160a01b031681565b34801562000571575f80fd5b506200057b606581565b60405163ffffffff9091168152602001620004dd565b3480156200059d575f80fd5b50620005af68056bc75e2d6310000081565b604051908152602001620004dd565b348015620005ca575f80fd5b50620005db670de0b6b3a764000081565b6040516effffffffffffffffffffffffffffff9091168152602001620004dd565b34801562000608575f80fd5b50620006136200105e565b604051620004dd91906200b42c565b3480156200062e575f80fd5b50620004a6620006403660046200b45e565b620010f2565b34801562000652575f80fd5b506200065d62001148565b604051620004dd91906200b4d2565b34801562000678575f80fd5b506200057b600381565b3480156200068e575f80fd5b50602454620006ac906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001620004dd565b348015620006da575f80fd5b506200057b600181565b348015620006f0575f80fd5b506200065d620007023660046200b4e6565b620011aa565b34801562000714575f80fd5b506200071f620012c3565b604051620004dd91906200b5aa565b3480156200073a575f80fd5b50603454620004c9906001600160a01b031681565b620004a6620007603660046200b649565b6200140b565b34801562000772575f80fd5b50603854620004c9906001600160a01b031681565b34801562000793575f80fd5b506200065d620014c6565b348015620007aa575f80fd5b506200065d62001526565b348015620007c1575f80fd5b50620007d9620007d33660046200b6fd565b62001586565b6040805161ffff90941684526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001620004dd565b34801562000819575f80fd5b506200057b6201117181565b34801562000831575f80fd5b50603554620004c9906001600160a01b031681565b34801562000852575f80fd5b50620005af620186a081565b3480156200086a575f80fd5b506200057b600281565b34801562000880575f80fd5b5062000898620008923660046200b750565b620015a2565b6040519015158152602001620004dd565b348015620008b5575f80fd5b50620004a662001602565b348015620008cc575f80fd5b50620004a6620008de3660046200b77d565b6200216f565b348015620008f0575f80fd5b50620004a6620009023660046200b887565b62002f1e565b34801562000914575f80fd5b506200091f62003014565b604051620004dd91906200b9a6565b3480156200093a575f80fd5b50603e54620004c9906001600160a01b031681565b3480156200095b575f80fd5b50603754620004c9906001600160a01b031681565b3480156200097c575f80fd5b50620006ac68056bc75e2d6310000081565b3480156200099a575f80fd5b50620009b2620009ac3660046200ba41565b62003199565b604051620004dd94939291906200bab6565b348015620009d0575f80fd5b50620004a6620009e23660046200bae5565b620031bb565b348015620009f4575f80fd5b506200061362000a063660046200b750565b6200338c565b34801562000a18575f80fd5b50603954620004c9906001600160a01b031681565b34801562000a39575f80fd5b50603654620004c9906001600160a01b031681565b34801562000a5a575f80fd5b50620004a662000a6c3660046200bb1b565b620034a1565b34801562000a7e575f80fd5b5062000a8962003ab2565b604051620004dd91906200bb94565b34801562000aa4575f80fd5b50620005af670de0b6b3a764000081565b34801562000ac1575f80fd5b50603a54620004c9906001600160a01b031681565b34801562000ae2575f80fd5b5062000aed62003b87565b604051620004dd91906200bba8565b34801562000b08575f80fd5b5062000b2062000b1a3660046200b6fd565b62003c81565b604080516fffffffffffffffffffffffffffffffff948516815263ffffffff9093166020840152921691810191909152606001620004dd565b34801562000b65575f80fd5b50620004a662000b773660046200ba41565b62003c90565b620004a662000b8e3660046200bc39565b62003d0a565b34801562000ba0575f80fd5b50620004a662000bb23660046200bcc4565b62003d91565b34801562000bc4575f80fd5b5062000aed62003e46565b34801562000bdb575f80fd5b5062000a8962003f40565b34801562000bf2575f80fd5b50620004a662000c043660046200bce2565b62004015565b34801562000c16575f80fd5b50620005af600381565b34801562000c2c575f80fd5b5062000c4462000c3e3660046200b6fd565b62004032565b604080516fffffffffffffffffffffffffffffffff9093168352602083019190915201620004dd565b34801562000c79575f80fd5b50620008986200404c565b34801562000c90575f80fd5b50620005af64e8d4a5100081565b34801562000caa575f80fd5b50603c54620004c9906001600160a01b031681565b34801562000ccb575f80fd5b50620004a662000cdd3660046200bd01565b62004120565b34801562000cef575f80fd5b50603b54620004c9906001600160a01b031681565b34801562000d10575f80fd5b50620004a662000d223660046200bd79565b602480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b34801562000d71575f80fd5b506200065d62006371565b620004a662000d8d3660046200b77d565b620063d1565b34801562000d9f575f80fd5b50620005af630ee6b28081565b34801562000db8575f80fd5b5062000dd062000dca3660046200b6fd565b62006504565b604080516fffffffffffffffffffffffffffffffff938416815292909116602083015201620004dd565b34801562000e06575f80fd5b50601f54620008989060ff1681565b34801562000e21575f80fd5b50620004a662000e333660046200bd97565b62006512565b62000e6182826001600160a01b03165f1b5f8060405180602001604052805f815250620034a1565b5050565b5f60235f62000e7587876200659d565b63ffffffff16815260208101919091526040015f908120546001600160a01b031691508062000ea485620065c3565b92505091505f604051806060016040528062000ec18a8a620066f7565b63ffffffff16815260200162000ed88a8a62006708565b815260200162000ee98a8a62006724565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e6fffffffffffffffffffffffffffffffff8581169085168462000f2a8d8d6200674a565b62000f368e8e6200675e565b604080516020810182525f815290517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16815262000f81949392918e916004016200be05565b5f604051808303818589803b15801562000f99575f80fd5b5088f115801562000fac573d5f803e3d5ffd5b5050505050505050505050505050565b62000fc66200676f565b603b546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152683635c9adc5dea000006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015f604051808303815f87803b15801562001045575f80fd5b505af115801562001058573d5f803e3d5ffd5b50505050565b603f80546200106d906200be6d565b80601f01602080910402602001604051908101604052809291908181526020018280546200109b906200be6d565b8015620010ea5780601f10620010c057610100808354040283529160200191620010ea565b820191905f5260205f20905b815481529060010190602001808311620010cc57829003601f168201915b505050505081565b62000e6182828460ff1667ffffffffffffffff8111156200111757620011176200b23a565b60405190808252806020026020018201604052801562001141578160200160208202803683370190505b5062004120565b60606016805480602002602001604051908101604052809291908181526020018280548015620011a057602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831162001181575b5050505050905090565b60608160ff1667ffffffffffffffff811115620011cb57620011cb6200b23a565b604051908082528060200260200182016040528015620011f5578160200160208202803683370190505b509050825b6200120683856200beed565b60ff168160ff161015620012b05760ff81165f9081526023602090815260408083205481516001600160a01b03909116928101929092523090820152600160608201526200126890879060800160405160208183030381529060405262007b21565b905080836200127887856200bf09565b60ff16815181106200128e576200128e6200bf25565b6001600160a01b039092166020928302919091019091015250600101620011fa565b50620012bc81620031bb565b9392505050565b6060601e805480602002602001604051908101604052809291908181526020015f905b8282101562001402575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015620013ea578382905f5260205f2001805462001358906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462001386906200be6d565b8015620013d55780601f10620013ab57610100808354040283529160200191620013d5565b820191905f5260205f20905b815481529060010190602001808311620013b757829003601f168201915b50505050508152602001906001019062001338565b505050508152505081526020019060010190620012e6565b50505050905090565b63ffffffff87165f908152602360205260408120546001600160a01b0316908080620014378962007b7d565b925092509250836001600160a01b03166391d20fa18284908d8b8d898d8d60405180602001604052805f8152506040518a63ffffffff1660e01b81526004016200148897969594939291906200bf52565b5f604051808303818589803b158015620014a0575f80fd5b5088f1158015620014b3573d5f803e3d5ffd5b5050505050505050505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015620011a057602002820191905f5260205f209081546001600160a01b0316815260019091019060200180831162001181575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015620011a057602002820191905f5260205f209081546001600160a01b0316815260019091019060200180831162001181575050505050905090565b5f805f62001595858562007cc5565b9250925092509250925092565b61ffff82165f90815260208080526040808320848452909152812081620015f782546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b119150505b92915050565b5f620016246200161c670de0b6b3a764000060026200bfb2565b5f1962007d59565b50603554603b549192506200164f916001600160a01b039182169116670de0b6b3a764000062007e44565b5f6200165e6001600262007e52565b50603a54603854603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152939450918216925f92909116906370a0823190602401602060405180830381865afa158015620016d0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620016f691906200bfcc565b6040805160e0810190915260038152603b549192505f9160208201906001600160a01b031681526020015f81526020018681526020016200177f620c35005f62001777604080517e03000000000000000000000000000000000000000000000000000000000000602082015281516002818303018152602290910190915290565b919062007f85565b815260200160405180602001604052805f815250815260200160405180602001604052805f81525081525090505f81604051602001620017c091906200c05f565b60405160208183030381529060405290505f620018365f620c35006516bcc41e90006200182d620c35005f62001777604080517e03000000000000000000000000000000000000000000000000000000000000602082015281516002818303018152602290910190915290565b9291906200800d565b90505f6040518060e00160405280600263ffffffff16815260200162001862886001600160a01b031690565b8152602001670de0b6b3a76400008152602001612710670de0b6b3a764000061270b6200189091906200bfb2565b6200189c91906200c0a0565b815260208082018590526040808301879052805191820181525f80835260609093019190915260355490517f3b6f743b00000000000000000000000000000000000000000000000000000000815292935090916001600160a01b0390911690633b6f743b906200191390859085906004016200c0b6565b6040805180830381865afa1580156200192e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200195491906200c12c565b603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b158015620019c7575f80fd5b505af1158015620019da573d5f803e3d5ffd5b505060355483516040517fc7c7f5b30000000000000000000000000000000000000000000000000000000081526001600160a01b03909216935063c7c7f5b392509062001a30908690869030906004016200c149565b60c06040518083038185885af115801562001a4d573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019062001a7491906200c19f565b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562001ac3575f80fd5b505af115801562001ad6573d5f803e3d5ffd5b50506033546039546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015262001bed94506101009092041691506370a0823190602401602060405180830381865afa15801562001b48573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001b6e91906200bfcc565b603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001bc0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001be691906200bfcc565b8a6200805d565b60335462001c0c9060029061010090046001600160a01b031662004015565b6033546039546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015262001dcd926101009004909116906370a0823190602401602060405180830381865afa15801562001c7b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001ca191906200bfcc565b6033546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152610100909204909116906370a0823190602401602060405180830381865afa15801562001d09573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001d2f91906200bfcc565b62001d3b91906200c226565b603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001d8d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001db391906200bfcc565b62001dc7670de0b6b3a76400008c6200c226565b6200805d565b603b545f9062001e18908290600190670de0b6b3a7640000906001600160a01b03168960405160200162001e039291906200c23c565b604051602081830303815290604052620080e1565b603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b15801562001e8b575f80fd5b505af115801562001e9e573d5f803e3d5ffd5b5050603d546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152683635c9adc5dea000006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d91506044015f604051808303815f87803b15801562001f21575f80fd5b505af115801562001f34573d5f803e3d5ffd5b5050603a546033546040517fd0a102600000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063d0a102609350620c3500926516bcc41e90009262001fa192610100909104909116908190889030906004016200c263565b5f604051808303818589803b15801562001fb9575f80fd5b5088f115801562001fcc573d5f803e3d5ffd5b50506033546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038e8116600483015262002087965061010090920490911693506370a0823192506024019050602060405180830381865afa15801562002040573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200206691906200bfcc565b5f60405180606001604052806040815260200162043a8b6040913962008115565b603854620020a1906003906001600160a01b031662004015565b603854603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201525f9291909116906370a0823190602401602060405180830381865afa15801562002109573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200212f91906200bfcc565b9050620021626200214189836200c2ab565b8c60405180608001604052806041815260200162043a4a6041913962008115565b5050505050505050505050565b5f6200217c84846200659d565b63ffffffff81165f908152602360205260408120549192506001600160a01b03909116908163402f8468620021b288886200674a565b620021be8989620066f7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015263ffffffff1660248201526044016040805180830381865afa15801562002223573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200224991906200c2ce565b5090505f62002259878762008195565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250604080517f54fd4d50000000000000000000000000000000000000000000000000000000008152905195965090946001600160a01b03881694506354fd4d509350600480830193506060928290030181865afa158015620022eb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200231191906200c310565b505090508067ffffffffffffffff166003036200288e57825f6001600160a01b038216639c33abf7620023458c8c620066f7565b620023518d8d6200674a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600260448201526064015f60405180830381865afa158015620023be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052620023e791908101906200c3a8565b90505f818060200190518101906200240091906200c44c565b608001515f815181106200241857620024186200bf25565b602002602001015190505f6200242f8c8c620081a6565b6040516200243f9291906200c52e565b6040518091039020905060605f630223536e60e01b888460646040516024016200246c939291906200c53d565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03851663f010cb238d8985620024ee426103e86200c226565b6040518563ffffffff1660e01b81526004016200250f94939291906200c56a565b602060405180830381865afa1580156200252b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200255191906200bfcc565b90506200255e81620081b7565b6040805160018082528183019092529194505f9250816020015b6040805160a0810182525f808252602082018190526060928201839052828201526080810191909152815260200190600190039081620025785790505090506040518060a001604052808d63ffffffff168152602001886001600160a01b03168152602001838152602001426103e8620025f391906200c226565b815260200184815250815f815181106200261157620026116200bf25565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b143044b90620026639084906004016200c5aa565b5f604051808303815f87803b1580156200267b575f80fd5b505af11580156200268e573d5f803e3d5ffd5b505050505f630894edf160e01b8a86604051602401620026b09291906200c676565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03871663f010cb238f8b8562002732426103e86200c226565b6040518563ffffffff1660e01b81526004016200275394939291906200c56a565b602060405180830381865afa1580156200276f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200279591906200bfcc565b9050620027a281620081b7565b9450506040518060a001604052808e63ffffffff168152602001896001600160a01b03168152602001828152602001426103e8620027e191906200c226565b815260200185815250825f81518110620027ff57620027ff6200bf25565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063b143044b90620028519085906004016200c5aa565b5f604051808303815f87803b15801562002869575f80fd5b505af11580156200287c573d5f803e3d5ffd5b50505050505050505050505062002f14565b8067ffffffffffffffff16600a0362002e9b57825f6001600160a01b038216639c33abf7620028be8c8c620066f7565b620028ca8d8d6200674a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600160448201526064015f60405180830381865afa15801562002937573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200296091908101906200c3a8565b90505f818060200190518101906200297991906200c699565b608001515f815181106200299157620029916200bf25565b602002602001015190505f620029a88c8c620082fe565b604051620029b89291906200c52e565b604051809103902090505f620029cf8d8d6200675e565b8b604051602001620029e39291906200c23c565b60405160208183030381529060405280519060200120905060605f63ab750e7560e01b89858560405160240162002a1d939291906200c6eb565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562002a9f426103e86200c226565b6040518563ffffffff1660e01b815260040162002ac094939291906200c56a565b602060405180830381865afa15801562002adc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002b0291906200bfcc565b905062002b0f81620081b7565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f80825260208201819052606092820183905282820152608081019190915281526020019060019003908162002b295790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862002ba491906200c226565b815260200185815250815f8151811062002bc25762002bc26200bf25565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b9062002c149084906004016200c5aa565b5f604051808303815f87803b15801562002c2c575f80fd5b505af115801562002c3f573d5f803e3d5ffd5b505050505050505f63594924da60e01b89858560405160240162002c66939291906200c6eb565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562002ce8426103e86200c226565b6040518563ffffffff1660e01b815260040162002d0994939291906200c56a565b602060405180830381865afa15801562002d25573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002d4b91906200bfcc565b905062002d5881620081b7565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f80825260208201819052606092820183905282820152608081019190915281526020019060019003908162002d725790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862002ded91906200c226565b815260200185815250815f8151811062002e0b5762002e0b6200bf25565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b9062002e5d9084906004016200c5aa565b5f604051808303815f87803b15801562002e75575f80fd5b505af115801562002e88573d5f803e3d5ffd5b5050505050505050505050505062002f14565b6040517f12cc947f0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906312cc947f9062002ee4908b908b906004016200c711565b5f604051808303815f87803b15801562002efc575f80fd5b505af115801562002f0f573d5f803e3d5ffd5b505050505b5050505050505050565b5f5b82518110156200300f575f83828151811062002f405762002f406200bf25565b602002602001015190505f5b83518110156200300457816001600160a01b031663f0a9e48185838151811062002f7a5762002f7a6200bf25565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff9091166004820152600160248201526044015f604051808303815f87803b15801562002fe0575f80fd5b505af115801562002ff3573d5f803e3d5ffd5b50506001909201915062002f4c9050565b505060010162002f20565b505050565b6060601b805480602002602001604051908101604052809291908181526020015f905b8282101562001402578382905f5260205f2090600202016040518060400160405290815f820180546200306a906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462003098906200be6d565b8015620030e75780601f10620030bd57610100808354040283529160200191620030e7565b820191905f5260205f20905b815481529060010190602001808311620030c957829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156200318057602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116200312c5790505b5050505050815250508152602001906001019062003037565b5f365f80620031aa8787876200830f565b935093509350935093509350935093565b80515f5b818110156200300f575f838281518110620031de57620031de6200bf25565b602002602001015190505f5b83811015620033815782811462003378575f8582815181106200321157620032116200bf25565b602002602001015190505f816001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003259573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200327f91906200c726565b6001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620032bb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620032e191906200c744565b9050836001600160a01b0316633400288b8262003304856001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff92909216600483015260248201526044015f604051808303815f87803b1580156200335e575f80fd5b505af115801562003371573d5f803e3d5ffd5b5050505050505b600101620031ea565b5050600101620031bf565b61ffff82165f908152602080805260408083208484529091528120606091620033e382546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b11156200349a575f620033f6826200836a565b5f81815260216020526040902080549192509062003414906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462003442906200be6d565b8015620034915780601f10620034675761010080835404028352916020019162003491565b820191905f5260205f20905b8154815290600101906020018083116200347357829003601f168201915b50505050509250505b5092915050565b63ffffffff85165f908152602360205260409020546001600160a01b03166200352b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f656e64706f696e74206e6f74207965742072656769737465726564000000000060448201526064015b60405180910390fd5b63ffffffff85165f908152602080805260408083208784529091528120906200358282546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b90505f855f03620035c6575081546fffffffffffffffffffffffffffffffff80821670010000000000000000000000000000000090920481169190910316620035da565b858211620035d55781620035d7565b855b90505b801562002f145780620035ed816200c762565b9150505f620035fc84620083f4565b5f818152602160205260408120805492935090916200361b906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462003649906200be6d565b8015620036985780601f106200366e5761010080835404028352916020019162003698565b820191905f5260205f20905b8154815290600101906020018083116200367a57829003601f168201915b50506040517f997cff1b000000000000000000000000000000000000000000000000000000008152939450309363997cff1b9350620036e0925085915086906004016200c676565b5f6040518083038186803b158015620036f7575f80fd5b505afa1580156200370a573d5f803e3d5ffd5b50506040517f60197889000000000000000000000000000000000000000000000000000000008152309250636019788991506200374e9084908a906004016200c77a565b5f604051808303815f87803b15801562003766575f80fd5b505af115801562003779573d5f803e3d5ffd5b5050505f8381526022602052604081208054919250906200379a906200be6d565b80601f0160208091040260200160405190810160405280929190818152602001828054620037c8906200be6d565b8015620038175780601f10620037ed5761010080835404028352916020019162003817565b820191905f5260205f20905b815481529060010190602001808311620037f957829003601f168201915b505050505090506200382b81600262008481565b1562003906575f806200383e8362008496565b604051919350915081905f906001600160a01b0383169085908381818185875af1925050503d805f81146200388f576040519150601f19603f3d011682016040523d82523d5f602084013e62003894565b606091505b505090508062003901576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4661696c656420746f2073656e64204574686572000000000000000000000000604482015260640162003522565b505050505b6200391381600162008481565b1562003989576040517fec53eaa0000000000000000000000000000000000000000000000000000000008152309063ec53eaa0906200395990859085906004016200c77a565b5f604051808303815f87803b15801562003971575f80fd5b505af115801562003984573d5f803e3d5ffd5b505050505b6200399681600562008481565b1562003a0e576040517f0a69faa90000000000000000000000000000000000000000000000000000000081523090630a69faa990620039de90859085908c906004016200c7a2565b5f604051808303815f87803b158015620039f6575f80fd5b505af115801562003a09573d5f803e3d5ffd5b505050505b6001600160a01b0388161580159062003a2f575062003a2f81600362008481565b1562003aa9576040517fa29c8984000000000000000000000000000000000000000000000000000000008152309063a29c89849062003a79908590859088908e906004016200c7e0565b5f604051808303815f87803b15801562003a91575f80fd5b505af115801562003aa4573d5f803e3d5ffd5b505050505b505050620035da565b6060601a805480602002602001604051908101604052809291908181526020015f905b8282101562001402578382905f5260205f2001805462003af5906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462003b23906200be6d565b801562003b725780601f1062003b485761010080835404028352916020019162003b72565b820191905f5260205f20905b81548152906001019060200180831162003b5457829003601f168201915b50505050508152602001906001019062003ad5565b6060601d805480602002602001604051908101604052809291908181526020015f905b8282101562001402575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801562003c6857602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162003c145790505b5050505050815250508152602001906001019062003baa565b5f805f620015958585620085d8565b5f62003c9d84846200675e565b905081811462001058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f67756964206e6f74206d61746368000000000000000000000000000000000000604482015260640162003522565b30633bbd6a9462003d1c87876200659d565b62003d2888886200674a565b86868662003d378c8c620082fe565b6040518863ffffffff1660e01b815260040162003d5b97969594939291906200c829565b5f604051808303815f87803b15801562003d73575f80fd5b505af115801562003d86573d5f803e3d5ffd5b505050505050505050565b8060235f836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003dd2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003df891906200c744565b63ffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060601c805480602002602001604051908101604052809291908181526020015f905b8282101562001402575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801562003f2757602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162003ed35790505b5050505050815250508152602001906001019062003e69565b60606019805480602002602001604051908101604052809291908181526020015f905b8282101562001402578382905f5260205f2001805462003f83906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462003fb1906200be6d565b8015620040005780601f1062003fd65761010080835404028352916020019162004000565b820191905f5260205f20905b81548152906001019060200180831162003fe257829003601f168201915b50505050508152602001906001019062003f63565b62000e6182825f8060405180602001604052805f815250620034a1565b5f8062004040848462008663565b915091505b9250929050565b6008545f9060ff161562004064575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa158015620040f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200411991906200bfcc565b1415905090565b8260ff1667ffffffffffffffff8111156200413f576200413f6200b23a565b60405190808252806020026020018201604052801562004169578160200160208202803683370190505b50805162004180916025916020909101906200ae1c565b508260ff1667ffffffffffffffff811115620041a057620041a06200b23a565b604051908082528060200260200182016040528015620041ca578160200160208202803683370190505b508051620041e1916026916020909101906200ae98565b508260ff1667ffffffffffffffff8111156200420157620042016200b23a565b6040519080825280602002602001820160405280156200422b578160200160208202803683370190505b50805162004242916027916020909101906200ae1c565b508260ff1667ffffffffffffffff8111156200426257620042626200b23a565b6040519080825280602002602001820160405280156200428c578160200160208202803683370190505b508051620042a3916028916020909101906200ae1c565b508260ff1667ffffffffffffffff811115620042c357620042c36200b23a565b604051908082528060200260200182016040528015620042ed578160200160208202803683370190505b50805162004304916029916020909101906200ae1c565b506040805160018082528183019092529060208083019080368337505081516200433692602a9250602001906200ae1c565b506040517fffa1864900000000000000000000000000000000000000000000000000000000815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa1580156200439f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620043c591906200c726565b602a80545f90620043da57620043da6200bf25565b5f918252602082200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0393909316929092179091555b8360ff168160ff16101562004632575f620044388260016200beed565b60ff1690505f838360ff16815181106200445657620044566200bf25565b602002602001015190508160256001018460ff16815481106200447d576200447d6200bf25565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055505f6001600160a01b0316816001600160a01b03160362004559578130604051620044d8906200af46565b63ffffffff90921682526001600160a01b03166020820152604001604051809103905ff0801580156200450d573d5f803e3d5ffd5b506025805460ff86169081106200452857620045286200bf25565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550620045ee565b8130826040516200456a906200af54565b63ffffffff90931683526001600160a01b039182166020840152166040820152606001604051809103905ff080158015620045a7573d5f803e3d5ffd5b506025805460ff8616908110620045c257620045c26200bf25565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6200462760255f018460ff16815481106200460d576200460d6200bf25565b5f918252602090912001546001600160a01b031662003d91565b50506001016200441b565b503060405162004642906200af62565b6001600160a01b039091168152602001604051809103905ff0801580156200466c573d5f803e3d5ffd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790555f5b8360ff168160ff16101562005fff575f836001811115620046cc57620046cc6200c88b565b0362005dd1575f60255f018260ff1681548110620046ee57620046ee6200bf25565b905f5260205f20015f9054906101000a90046001600160a01b03169050308164e8d4a51000620186a060405162004725906200af70565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff08015801562004762573d5f803e3d5ffd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040518190620047ab906200af7e565b6001600160a01b039091168152602001604051809103905ff080158015620047d5573d5f803e3d5ffd5b50602c6001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550308164e8d4a51000620186a060405162004818906200af8c565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff08015801562004855573d5f803e3d5ffd5b50602e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556025805460ff8416908110620048a857620048a86200bf25565b5f91825260209091200154602c546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b15801562004910575f80fd5b505af115801562004923573d5f803e3d5ffd5b5050505060255f018260ff16815481106200494257620049426200bf25565b5f91825260209091200154602d546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b158015620049aa575f80fd5b505af1158015620049bd573d5f803e3d5ffd5b5050505060255f018260ff1681548110620049dc57620049dc6200bf25565b5f91825260209091200154602e546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b15801562004a44575f80fd5b505af115801562004a57573d5f803e3d5ffd5b5050602c54602780546001600160a01b039092169350915060ff851690811062004a855762004a856200bf25565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602d546028805491909216919060ff851690811062004ae45762004ae46200bf25565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602e546029805491909216919060ff851690811062004b435762004b436200bf25565b5f918252602082200180546001600160a01b03939093167fffffffffffffffffffffffff0000000000000000000000000000000000000000909316929092179091556040805160018082528183019092529081602001602082028036833701905050905030815f8151811062004bbd5762004bbd6200bf25565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092525f9290919082016060803683375050602c5482519293506001600160a01b0316918391505f9062004c1a5762004c1a6200bf25565b6001600160a01b039283166020918202929092010152602d5482519116908290600190811062004c4e5762004c4e6200bf25565b6001600160a01b039283166020918202929092010152602e5482519116908290600290811062004c825762004c826200bf25565b6001600160a01b039283166020918202929092010152602b5460405185925f9285929116903090879062004cb6906200af9a565b62004cc7969594939291906200c8b8565b604051809103905ff08015801562004ce1573d5f803e3d5ffd5b50602f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff861690811062004d345762004d346200bf25565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1660405162004d66906200afa8565b63ffffffff9091168152602001604051809103905ff08015801562004d8d573d5f803e3d5ffd5b50603180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602f546040517fc7b2370b00000000000000000000000000000000000000000000000000000000815260048101929092529091169063c7b2370b906024015f604051808303815f87803b15801562004e1b575f80fd5b505af115801562004e2e573d5f803e3d5ffd5b5050505060256001018460ff168154811062004e4e5762004e4e6200bf25565b5f918252602090912060088204015460079091166004026101000a900463ffffffff1662004e7e8560016200beed565b602b5460405184916001600160a01b031690602a90600190889062004ea3906200afb6565b62004eb597969594939291906200c908565b604051809103905ff08015801562004ecf573d5f803e3d5ffd5b50603080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff861690811062004f225762004f226200bf25565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16670de0b6b3a764000060405162004f5d906200afc4565b63ffffffff90921682526020820152604001604051809103905ff08015801562004f89573d5f803e3d5ffd5b50603280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f39f26dfc000000000000000000000000000000000000000000000000000000008152670de0b6b3a764000060048201819052602482015261271060448201526339f26dfc906064015f604051808303815f87803b15801562005025575f80fd5b505af115801562005038573d5f803e3d5ffd5b50506030546032546040517fc7b2370b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063c7b2370b91506024015f604051808303815f87803b1580156200509c575f80fd5b505af1158015620050af573d5f803e3d5ffd5b505050505050620050da60405180606001604052806060815260200160608152602001606081525090565b620050e78660016200beed565b60ff1667ffffffffffffffff8111156200510557620051056200b23a565b6040519080825280602002602001820160405280156200516557816020015b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a082015282525f19909201910181620051245790505b508152620051758660016200beed565b60ff1667ffffffffffffffff8111156200519357620051936200b23a565b604051908082528060200260200182016040528015620051e557816020015b604080516080810182525f8082526020808301829052928201819052606082015282525f19909201910181620051b25790505b506020820152620051f88660016200beed565b60ff1667ffffffffffffffff8111156200521657620052166200b23a565b6040519080825280602002602001820160405280156200525c57816020015b604080518082019091525f8082526020820152815260200190600190039081620052355790505b50604082810191909152805160018082528183019092525f91602080830190803683375050604080515f80825260208201909252603054845194955090936001600160a01b039091169250849190620052b957620052b96200bf25565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5b8860ff168160ff1610156200596b578060ff168660ff16031562005962575f620053078260016200beed565b60408051600180825281830190925260ff9290921692505f9190816020015b620053306200afd2565b815260200190600190039081620053265790505090505f6040518060c00160405280606467ffffffffffffffff168152602001875160ff168152602001865160ff1681526020015f60ff16815260200187815260200186815250905060405180604001604052808463ffffffff16815260200182815250825f81518110620053bc57620053bc6200bf25565b6020908102919091010152602c546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906329460b0b90620054129085906004016200c9b5565b5f604051808303815f87803b1580156200542a575f80fd5b505af11580156200543d573d5f803e3d5ffd5b5050602d546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329460b0b91506200548c9085906004016200c9b5565b5f604051808303815f87803b158015620054a4575f80fd5b505af1158015620054b7573d5f803e3d5ffd5b505f925060019150620054c79050565b6040519080825280602002602001820160405280156200550457816020015b620054f06200b037565b815260200190600190039081620054e65790505b506040805180820182526127108152602f546001600160a01b0316602080830191909152825180840190935263ffffffff88168352820181905282519293509183905f906200555757620055576200bf25565b6020908102919091010152602c546040517fc14c43490000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c14c434990620055ad9085906004016200cab0565b5f604051808303815f87803b158015620055c5575f80fd5b505af1158015620055d8573d5f803e3d5ffd5b50506040805160c08101825263ffffffff89168152611388602082018190529181019190915261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a08201528b518051919550935060ff89169250821090506200564d576200564d6200bf25565b602002602001018190525060405180608001604052808463ffffffff16815260200161138867ffffffffffffffff16815260200161271061ffff1681526020016402540be4006fffffffffffffffffffffffffffffffff1681525087602001518560ff1681518110620056c457620056c46200bf25565b602002602001018190525060405180604001604052808463ffffffff168152602001600381525087604001518560ff16815181106200570757620057076200bf25565b60200260200101819052505f60256006015f9054906101000a90046001600160a01b03166001600160a01b031663c18403276040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005767573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200578d91906200cb20565b6040805160018082528183019092529192505f9190816020015b620057da6040805180820182525f8082528251606081018452818152602081810183905293810191909152909182015290565b815260200190600190039081620057a757905050905060405180604001604052808663ffffffff16815260200160405180606001604052808560016200582191906200cb3e565b6fffffffffffffffffffffffffffffffff1681526001602082018190526040909101529052815182905f906200585b576200585b6200bf25565b6020908102919091010152602b546040517f3161b7f60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690633161b7f690620058b19084906004016200cb75565b5f604051808303815f87803b158015620058c9575f80fd5b505af1158015620058dc573d5f803e3d5ffd5b5050602b546040517f5d6d7ccb00000000000000000000000000000000000000000000000000000000815268056bc75e2d6310000060048201526001600160a01b039091169250635d6d7ccb91506024015f604051808303815f87803b15801562005945575f80fd5b505af115801562005958573d5f803e3d5ffd5b5050505050505050505b600101620052db565b506040805160018082528183019092525f91816020015b6200598c6200b079565b815260200190600190039081620059825750506040805160c081018252602f546001600160a01b03168152855160ff9081166020808401919091528651909116828401525f606083018190526080830188905260a0830187905283518085019094526201117184529083018290528351939450909284919062005a135762005a136200bf25565b6020908102919091010152602e546040517fc85f4b4e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c85f4b4e9062005a699085906004016200cbf2565b5f604051808303815f87803b15801562005a81575f80fd5b505af115801562005a94573d5f803e3d5ffd5b5050505050506040518060c0016040528060256001018760ff168154811062005ac15762005ac16200bf25565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff168252611388908201819052604082015261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a0909101528351805160ff8b1690811062005b3d5762005b3d6200bf25565b6020026020010181905250604051806080016040528060256001018760ff168154811062005b6f5762005b6f6200bf25565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff1682526113888282015261271060408301526402540be400606090920191909152840151805160ff8b1690811062005bce5762005bce6200bf25565b6020026020010181905250604051806040016040528060256001018760ff168154811062005c005762005c006200bf25565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff16825260039101526040840151805160ff8b1690811062005c485762005c486200bf25565b6020908102919091010152602f5483516040517f3d85ac330000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691633d85ac339162005c9e916004016200ccec565b5f604051808303815f87803b15801562005cb6575f80fd5b505af115801562005cc9573d5f803e3d5ffd5b505060305460208601516040517f52d3b8710000000000000000000000000000000000000000000000000000000081526001600160a01b0390921693506352d3b871925062005d1b916004016200cd87565b5f604051808303815f87803b15801562005d33575f80fd5b505af115801562005d46573d5f803e3d5ffd5b505060325460408087015190517ff5ff608f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909216935063f5ff608f925062005d98916004016200ce05565b5f604051808303815f87803b15801562005db0575f80fd5b505af115801562005dc3573d5f803e3d5ffd5b505050505050505062005ff6565b600183600181111562005de85762005de86200c88b565b0362005f93575f3060255f018360ff168154811062005e0b5762005e0b6200bf25565b5f918252602090912001546040516001600160a01b039091169062005e30906200b0d8565b6001600160a01b03928316815291166020820152604001604051809103905ff08015801562005e61573d5f803e3d5ffd5b50905060255f018260ff168154811062005e7f5762005e7f6200bf25565b5f918252602090912001546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063e8964e81906024015f604051808303815f87803b15801562005ee5575f80fd5b505af115801562005ef8573d5f803e3d5ffd5b505050508060256002018360ff168154811062005f195762005f196200bf25565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060256003018360ff168154811062005f615762005f616200bf25565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505062005ff6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206c6962726172792074797065000000000000000000000000604482015260640162003522565b600101620046a7565b505f5b8360ff168160ff16101562001058575f60255f018260ff16815481106200602d576200602d6200bf25565b5f9182526020822001546001600160a01b031691508460018111156200605757620060576200c88b565b03620061c857806001600160a01b031663aafea3126201117160256004018560ff16815481106200608c576200608c6200bf25565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b158015620060f9575f80fd5b505af11580156200610c573d5f803e3d5ffd5b50505050806001600160a01b031663a718531b6201117160256004018560ff16815481106200613f576200613f6200bf25565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b158015620061b0575f80fd5b505af1158015620061c3573d5f803e3d5ffd5b505050505b5f5b8560ff168160ff16101562006366578060ff168360ff1603156200635d576001600160a01b03821663aafea312620062048360016200beed565b6027805460ff88169081106200621e576200621e6200bf25565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b15801562006288575f80fd5b505af11580156200629b573d5f803e3d5ffd5b50505050816001600160a01b031663a718531b826001620062bd91906200beed565b6028805460ff8816908110620062d757620062d76200bf25565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b15801562006345575f80fd5b505af115801562006358573d5f803e3d5ffd5b505050505b600101620061ca565b505060010162006002565b60606015805480602002602001604051908101604052809291908181526020018280548015620011a057602002820191905f5260205f209081546001600160a01b0316815260019091019060200180831162001181575050505050905090565b5f60235f620063e186866200659d565b63ffffffff16815260208101919091526040015f908120546001600160a01b03169150806200641084620086c6565b915091505f60405180606001604052806200642c8989620066f7565b63ffffffff16815260200162006443898962006708565b815260200162006454898962006724565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e848484620064808c8c6200674a565b6200648c8d8d6200675e565b620064988e8e620082fe565b60405180602001604052805f8152506040518963ffffffff1660e01b8152600401620064ca969594939291906200ce4e565b5f604051808303818589803b158015620064e2575f80fd5b5088f1158015620064f5573d5f803e3d5ffd5b50505050505050505050505050565b5f8062004040848462008809565b5f6200651f85856200659d565b90505f6200652e868662008883565b63ffffffff83165f9081526020808052604080832084845290915281209192506200655a88886200675e565b905062006568828262008894565b5f81815260216020526040902062006582888a836200cf13565b505f81815260226020526040902062003d868688836200cf13565b5f620065ae6031602d84866200cfda565b620065b9916200d003565b60e01c9392505050565b5f805f805f620065d586600562008927565b915091508162006668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f7074696f6e7348656c7065723a206c7a52656164206f7074696f6e206e6f7460448201527f20666f756e640000000000000000000000000000000000000000000000000000606482015260840162003522565b6040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca8690620066a69084906004016200b42c565b606060405180830381865afa158015620066c2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620066e891906200d04a565b94509450945050509193909250565b5f620065ae600d600984866200cfda565b5f62006719602d600d84866200cfda565b620012bc916200d090565b5f620067356009600184866200cfda565b62006740916200d0ae565b60c01c9392505050565b5f620012bc6200675b848462008883565b90565b5f620067196071605184866200cfda565b6200677962008f63565b6033546200678b9060ff165f620010f2565b60025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c0954603d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390921691821790556040513090620067fc906200b0e6565b620068099291906200d0f5565b604051809103905ff08015801562006823573d5f803e3d5ffd5b50603380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384160217905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e0475460405191169030906200689a906200b0e6565b620068a79291906200d192565b604051809103905ff080158015620068c1573d5f803e3d5ffd5b50603580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e54604051911690309062006934906200b0e6565b620069419291906200d20c565b604051809103905ff0801580156200695b573d5f803e3d5ffd5b50603780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff811115620069b757620069b76200b23a565b604051908082528060200260200182016040528015620069e1578160200160208202803683370190505b5060355481519192506001600160a01b03169082905f9062006a075762006a076200bf25565b6001600160a01b0392831660209182029290920101526033548251610100909104909116908290600190811062006a425762006a426200bf25565b6001600160a01b03928316602091820292909201015260375482519116908290600290811062006a765762006a766200bf25565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca2549062006acc9084906004016200b4d2565b5f604051808303815f87803b15801562006ae4575f80fd5b505af115801562006af7573d5f803e3d5ffd5b50505050603360019054906101000a90046001600160a01b031660405162006b1f906200b0f4565b62006b2b91906200d286565b604051809103905ff08015801562006b45573d5f803e3d5ffd5b50603980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c095460405191921690309062006bbc906200b102565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff08015801562006bf6573d5f803e3d5ffd5b50603480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556039546033546040519184169361010090910416919062006c4f906200b110565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff08015801562006c89573d5f803e3d5ffd5b50603a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e04754604051911690309062006cfc906200b0e6565b62006d099291906200d318565b604051809103905ff08015801562006d23573d5f803e3d5ffd5b50603680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e54604051911690309062006d96906200b0e6565b62006da39291906200d392565b604051809103905ff08015801562006dbd573d5f803e3d5ffd5b50603880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff81111562006e195762006e196200b23a565b60405190808252806020026020018201604052801562006e43578160200160208202803683370190505b5060365481519192506001600160a01b03169082905f9062006e695762006e696200bf25565b6001600160a01b03928316602091820292909201015260345482519116908290600190811062006e9d5762006e9d6200bf25565b6001600160a01b03928316602091820292909201015260385482519116908290600290811062006ed15762006ed16200bf25565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca2549062006f279084906004016200b4d2565b5f604051808303815f87803b15801562006f3f575f80fd5b505af115801562006f52573d5f803e3d5ffd5b5050603354604080517fc657c7180000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b031660048301526024820152600d60448201527f41737365744f46543a3a617262000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562006ffd575f80fd5b505af115801562007010573d5f803e3d5ffd5b5050603554604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b158015620070b7575f80fd5b505af1158015620070ca573d5f803e3d5ffd5b5050603754604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562007171575f80fd5b505af115801562007184573d5f803e3d5ffd5b5050603454604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601460448201527f53686172654f4654416461707465723a3a6172620000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b1580156200722b575f80fd5b505af11580156200723e573d5f803e3d5ffd5b5050603654604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b158015620072e5575f80fd5b505af1158015620072f8573d5f803e3d5ffd5b5050603854604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b1580156200739f575f80fd5b505af1158015620073b2573d5f803e3d5ffd5b5050603954604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600a60448201527f5661756c743a3a617262000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562007459575f80fd5b505af11580156200746c573d5f803e3d5ffd5b5050603a54604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601660448201527f5661756c74436f6d706f73657253796e633a3a617262000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562007513575f80fd5b505af115801562007526573d5f803e3d5ffd5b5050603e546200754c92506001600160a01b0316905068056bc75e2d6310000062008f6f565b603d546200756d906001600160a01b031668056bc75e2d6310000062008f6f565b604080516003808252608082019092525f91816020015b60408051606080820183525f808352602083015291810191909152815260200190600190039081620075845790505090506040518060600160405280600363ffffffff168152602001600161ffff168152602001603f8054620075e7906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462007615906200be6d565b8015620076645780601f106200763a5761010080835404028352916020019162007664565b820191905f5260205f20905b8154815290600101906020018083116200764657829003601f168201915b5050505050815250815f815181106200768157620076816200bf25565b60200260200101819052506040518060600160405280600263ffffffff168152602001600161ffff168152602001603f8054620076be906200be6d565b80601f0160208091040260200160405190810160405280929190818152602001828054620076ec906200be6d565b80156200773b5780601f1062007711576101008083540402835291602001916200773b565b820191905f5260205f20905b8154815290600101906020018083116200771d57829003601f168201915b5050505050815250816001815181106200775957620077596200bf25565b60200260200101819052506040518060600160405280600163ffffffff168152602001600161ffff168152602001603f805462007796906200be6d565b80601f0160208091040260200160405190810160405280929190818152602001828054620077c4906200be6d565b8015620078135780601f10620077e95761010080835404028352916020019162007813565b820191905f5260205f20905b815481529060010190602001808311620077f557829003601f168201915b5050505050815250816002815181106200783157620078316200bf25565b60209081029190910101526033546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063b98bd070906200788b9084906004016200d40c565b5f604051808303815f87803b158015620078a3575f80fd5b505af1158015620078b6573d5f803e3d5ffd5b50506035546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd0709150620079059084906004016200d40c565b5f604051808303815f87803b1580156200791d575f80fd5b505af115801562007930573d5f803e3d5ffd5b50506037546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200797f9084906004016200d40c565b5f604051808303815f87803b15801562007997575f80fd5b505af1158015620079aa573d5f803e3d5ffd5b50506034546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd0709150620079f99084906004016200d40c565b5f604051808303815f87803b15801562007a11575f80fd5b505af115801562007a24573d5f803e3d5ffd5b50506036546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd070915062007a739084906004016200d40c565b5f604051808303815f87803b15801562007a8b575f80fd5b505af115801562007a9e573d5f803e3d5ffd5b50506038546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd070915062007aed9084906004016200d40c565b5f604051808303815f87803b15801562007b05575f80fd5b505af115801562007b18573d5f803e3d5ffd5b50505050505050565b5f808360405160200162007b3691906200d4a9565b60408051601f198184030181529082905262007b579185906020016200d4c6565b60405160208183030381529060405290508051602082015ff09150813b6200349a575f80fd5b5f805f805f62007b8f86600362008927565b915091508162007c22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a436f6d706f7365206f7074696f6e2060448201527f6e6f7420666f756e640000000000000000000000000000000000000000000000606482015260840162003522565b6040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab09062007c609084906004016200b42c565b606060405180830381865afa15801562007c7c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062007ca291906200d4f8565b91986fffffffffffffffffffffffffffffffff9182169850911695509350505050565b5f80806012841480159062007cdb575060228414155b1562007d13576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62007d2085855f62008ffd565b925062007d308585600262009027565b91506022841462007d42575f62007d50565b62007d508585601262009027565b90509250925092565b5f8083600f84900b82131562007e0c575f62007d77855f196200d52b565b6fffffffffffffffffffffffffffffffff1690508086101562007df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4f666673657420746f6f206c6172676500000000000000000000000000000000604482015260640162003522565b62007e0381876200c2ab565b91505062007e2d565b62007e2a6fffffffffffffffffffffffffffffffff8516866200c226565b90505b62007e388162009051565b92509250509250929050565b6200300f8383835f6200907c565b5f8062007e68670de0b6b3a7640000856200bfb2565b915062007e7e670de0b6b3a7640000846200bfb2565b6039546040517f40c10f1900000000000000000000000000000000000000000000000000000000815261beef6004820152602481018390529192506001600160a01b0316906340c10f19906044015f604051808303815f87803b15801562007ee4575f80fd5b505af115801562007ef7573d5f803e3d5ffd5b50506033546039546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018790526101009092041692506340c10f1991506044015f604051808303815f87803b15801562007f67575f80fd5b505af115801562007f7a573d5f803e3d5ffd5b505050509250929050565b606083600362007f96825f620092fb565b61ffff161462007fe65762007fac815f620092fb565b6040517f3a51740d00000000000000000000000000000000000000000000000000000000815261ffff909116600482015260240162003522565b5f62007ff385856200937e565b9050620080038660018362009432565b9695505050505050565b60608460036200801e825f620092fb565b61ffff1614620080345762007fac815f620092fb565b5f62008042868686620094a6565b9050620080528760038362009432565b979650505050505050565b6200809f83836040518060400160405280600e81526020017f7465726d3120213d207465726d3200000000000000000000000000000000000081525062008115565b6200300f83826040518060400160405280600e81526020017f7465726d3120213d207465726d3300000000000000000000000000000000000081525062008115565b606084848484604051602001620080fc94939291906200d54d565b6040516020818303038152906040529050949350505050565b6040517f88b44c85000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906388b44c85906200816b908690869086906004016200d5cc565b5f6040518083038186803b15801562008182575f80fd5b505afa15801562007b18573d5f803e3d5ffd5b365f6200404060518285876200cfda565b365f6200404083605181876200cfda565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290526060905f90605c0160408051601f198184030181529082905280516020909101207fe341eaa4000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291505f9081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e341eaa490604401606060405180830381865afa1580156200827c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620082a291906200d5ec565b6040805160208101939093528281019190915260f89290921b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260619091019091529695505050505050565b365f6200404083607181876200cfda565b5f368160018401816200832488888462008ffd565b6002929092019190506200833a888884620095b4565b94506001820161ffff821683016200835581838b8d6200cfda565b979b909a50969850505061ffff160193505050565b5f6200839f825470010000000000000000000000000000000081046fffffffffffffffffffffffffffffffff90811691161490565b15620083b157620083b16032620095db565b5080545f196fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909204821601165f9081526001909101602052604090205490565b80545f906fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116911681036200843457620084346031620095db565b5f19016fffffffffffffffffffffffffffffffff9081165f818152600185016020526040812080549190558454909216700100000000000000000000000000000000909102179092555090565b5f6200848e838362008927565b509392505050565b5f805f80620084a785600262008927565b91509150816200853a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696f6e7348656c7065723a206e617469766544726f70206f7074696f6e60448201527f206e6f7420666f756e6400000000000000000000000000000000000000000000606482015260840162003522565b6040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf690620085789084906004016200b42c565b6040805180830381865afa15801562008593573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620085b991906200d623565b6fffffffffffffffffffffffffffffffff909116969095509350505050565b5f808060148414801590620085ee575060248414155b1562008626576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200863385855f62009027565b92506200864385856010620095ec565b91506024841462008655575f62007d50565b62007d508585601462009027565b5f8060308314620086a0576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620086ad84845f62009027565b9150620086bd8484601062009616565b90509250929050565b5f805f80620086d785600162008927565b91509150816200876a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a52656365697665206f7074696f6e2060448201527f6e6f7420666f756e640000000000000000000000000000000000000000000000606482015260840162003522565b6040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d6190620087a89084906004016200b42c565b6040805180830381865afa158015620087c3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620087e991906200d652565b6fffffffffffffffffffffffffffffffff91821697911695509350505050565b5f80601083148015906200881e575060208314155b1562008856576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200886384845f62009027565b91506020831462008875575f620086bd565b620086bd8484601062009027565b5f620067196051603184866200cfda565b81546fffffffffffffffffffffffffffffffff8082165f1901917001000000000000000000000000000000009004811690821603620088d957620088d96041620095db565b6fffffffffffffffffffffffffffffffff165f81815260018401602052604090209190915581547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016179055565b601f546040517fe5c5e9a30000000000000000000000000000000000000000000000000000000081525f91606091839161010090046001600160a01b03169063e5c5e9a3906200897c9088906004016200b42c565b5f60405180830381865afa15801562008997573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052620089c091908101906200d684565b50604080515f80825260208201909252919250908190819081905b855185101562008f38576040517f6e1775e30000000000000000000000000000000000000000000000000000000081525f90819081903090636e1775e39062008a2b908c908c906004016200c676565b5f60405180830381865afa15801562008a46573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405262008a6f91908101906200d6eb565b9250925092508b60ff168360ff160362008f2d575f808080805f1960ff89160162008b95576040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d619062008ad2908a906004016200b42c565b6040805180830381865afa15801562008aed573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062008b1391906200d652565b909550935062008b24858d6200d747565b9b5062008b32848c6200d747565b9a508b8b60405160200162008b7e929190608092831b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000090811682529190921b16601082015260200190565b604051602081830303815290604052985062008f27565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff89160162008c92576040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf69062008bfe908a906004016200b42c565b6040805180830381865afa15801562008c19573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062008c3f91906200d623565b909450925062008c50848c6200d747565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b16602082015260308101859052909b5060500162008b7e565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff89160162008dcf576040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab09062008cfb908a906004016200b42c565b606060405180830381865afa15801562008d17573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062008d3d91906200d4f8565b9096509450915062008d50858d6200d747565b9b5062008d5e848c6200d747565b6040517fffff00000000000000000000000000000000000000000000000000000000000060f085901b1660208201527fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b8216602284015283901b166032820152909b5060420162008b7e565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff89160162008f27576040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca869062008e38908a906004016200b42c565b606060405180830381865afa15801562008e54573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062008e7a91906200d04a565b919650909450905062008e8e848c6200d747565b9a5062008e9c858d6200d747565b9b5062008eaa818b6200d773565b6040517fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b821660208401527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1660308401528e901b166034820152909a5060440160405160208183030381529060405298505b50505050505b9650620089db915050565b80515f0362008f52575f9750955062004045945050505050565b60019a909950975050505050505050565b62008f6d6200963d565b565b6040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015f604051808303815f87803b15801562008fe2575f80fd5b505af115801562008ff5573d5f803e3d5ffd5b505050505050565b5f6002820162009010818486886200cfda565b6200901b916200d793565b60f01c95945050505050565b5f601082016200903a818486886200cfda565b62009045916200d7da565b60801c95945050505050565b5f80806200906564e8d4a51000856200d821565b90506200907381856200c2ab565b94909350915050565b604080516001600160a01b0385811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905291515f92871691620090ff916200d4a9565b5f60405180830381855afa9150503d805f811462009139576040519150601f19603f3d011682016040523d82523d5f602084013e6200913e565b606091505b509150505f818060200190518101906200915991906200bfcc565b9050620091ac84620091a5876200919e7f70a082310000000000000000000000000000000000000000000000000000000062009197600d8d6200968e565b90620096cb565b9062009703565b906200972e565b821562008ff55760408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f18160ddd0000000000000000000000000000000000000000000000000000000017905290515f916001600160a01b038916916200922491906200d4a9565b5f60405180830381855afa9150503d805f81146200925e576040519150601f19603f3d011682016040523d82523d5f602084013e62009263565b606091505b509150505f818060200190518101906200927e91906200bfcc565b905082861015620092a9576200929586846200c2ab565b620092a190826200c2ab565b9050620092c4565b620092b583876200c2ab565b620092c190826200c226565b90505b62002f1481620091a57f18160ddd0000000000000000000000000000000000000000000000000000000062009197600d8d6200968e565b5f620093098260026200c226565b8351101562009375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e6473000000000000000000000000604482015260640162003522565b50016002015190565b60606fffffffffffffffffffffffffffffffff821615620093e957604080517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608086811b8216602084015285901b16603082015201604051602081830303815290604052620012bc565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608085901b166020820152603001604051602081830303815290604052905092915050565b606083600362009443825f620092fb565b61ffff1614620094595762007fac815f620092fb565b8460016200946885516200973a565b620094759060016200d837565b86866040516020016200948d9594939291906200d855565b6040516020818303038152906040529150509392505050565b60606fffffffffffffffffffffffffffffffff8216156200953e576040517fffff00000000000000000000000000000000000000000000000000000000000060f086901b1660208201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608085811b8216602284015284901b166032820152604201604051602081830303815290604052620095ac565b6040517fffff00000000000000000000000000000000000000000000000000000000000060f086901b1660208201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608085901b1660228201526032016040516020818303038152906040525b949350505050565b5f838383818110620095ca57620095ca6200bf25565b919091013560f81c95945050505050565b634e487b715f52806020526024601cfd5b5f60048201620095ff818486886200cfda565b6200960a916200d003565b60e01c95945050505050565b5f6020820162009629818486886200cfda565b62009634916200d090565b95945050505050565b6040516200964b906200b11e565b604051809103905ff08015801562009665573d5f803e3d5ffd5b50601f60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550565b6004820180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555f82620012bc565b6002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001660e083901c1790555f82620012bc565b6001808301805491820181555f908152602081206001600160a01b03841692019190915582620012bc565b62000e61828262009787565b5f61ffff82111562009783576040517f6dfcc650000000000000000000000000000000000000000000000000000000008152601060048201526024810183905260440162003522565b5090565b6004820154600283015460038401546001600160a01b039092169160e09190911b905f620097b58662009cbe565b6001600160a01b0385165f908152602088815260408083207fffffffff000000000000000000000000000000000000000000000000000000008816845282528083209051939450926200980d9185918791016200d8f1565b60408051601f198184030181529181528151602092830120835290820192909252015f206003015460ff166200984b5762009849865f62009dd6565b505b6001600160a01b0384165f908152602087815260408083207fffffffff00000000000000000000000000000000000000000000000000000000871684528252808320905190918391620098a39186918891016200d8f1565b6040516020818303038152906040528051906020012081526020019081526020015f2090505f81600201548260010154620098df91906200c226565b111562009a0e575f81600201548260010154620098fd91906200c226565b6200990b906101006200c2ab565b620099189060026200da0d565b6040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810182905290915081881090737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae906024015f60405180830381865afa15801562009986573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052620099af91908101906200da1a565b604051602001620099c191906200da64565b6040516020818303038152906040529062009a0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200352291906200b42c565b50505b80546040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b038716600482015260248101919091525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d9063667f9d7090604401602060405180830381865afa15801562009a8a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062009ab091906200bfcc565b60018381015460028501549293505f92908101610100039190911b5f1901811b1983169089901b1783546040517f70ca10bb0000000000000000000000000000000000000000000000000000000081526001600160a01b038a166004820152602481019190915260448101829052909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906370ca10bb906064015f604051808303815f87803b15801562009b58575f80fd5b505af115801562009b6b573d5f803e3d5ffd5b505050505f8062009b7c8b62009deb565b9150915081158062009b8e5750898114155b1562009cb35784546040517f70ca10bb0000000000000000000000000000000000000000000000000000000081526001600160a01b038b166004820152602481019190915260448101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d906370ca10bb906064015f604051808303815f87803b15801562009c11575f80fd5b505af115801562009c24573d5f803e3d5ffd5b50506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f73746453746f726167652066696e642853746453746f72616765293a2046616960448201527f6c656420746f2077726974652076616c75652e0000000000000000000000000060648201526084019150620035229050565b620021628b62009ebc565b606081600701805462009cd1906200be6d565b90505f0362009d3757620015fc8260010180548060200260200160405190810160405280929190818152602001828054801562009d2c57602002820191905f5260205f20905b81548152602001906001019080831162009d17575b505050505062009eca565b81600701805462009d48906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462009d76906200be6d565b801562009dc55780601f1062009d9b5761010080835404028352916020019162009dc5565b820191905f5260205f20905b81548152906001019060200180831162009da757829003601f168201915b50505050509050919050565b919050565b5f62009de3838362009f67565b549392505050565b60028101545f908190819060e01b62009e048562009cbe565b60405160200162009e179291906200daf6565b60408051601f198184030181529082905260048601549092505f9182916001600160a01b03169062009e4b9085906200d4a9565b5f60405180830381855afa9150503d805f811462009e85576040519150601f19603f3d011682016040523d82523d5f602084013e62009e8a565b606091505b50915091505f62009eae828860030154602062009ea891906200bfb2565b6200a806565b929792965091945050505050565b62009ec7816200a899565b50565b60605f8251602062009edd91906200bfb2565b67ffffffffffffffff81111562009ef85762009ef86200b23a565b6040519080825280601f01601f19166020018201604052801562009f23576020820181803683370190505b5090505f5b83518110156200349a575f84828151811062009f485762009f486200bf25565b6020908102919091018101518382028501909101525060010162009f28565b6004820154600283015460038401545f926001600160a01b03169160e01b908362009f928762009cbe565b6001600160a01b0385165f908152602089815260408083207fffffffff0000000000000000000000000000000000000000000000000000000088168452825280832090519394509262009fea9185918791016200d8f1565b60408051601f198184030181529181528151602092830120835290820192909252015f206003015460ff16156200a0b35785156200a02d576200a02d876200a899565b6001600160a01b0384165f908152602088815260408083207fffffffff0000000000000000000000000000000000000000000000000000000087168452825280832090519092916200a0849185918791016200d8f1565b6040516020818303038152906040528051906020012081526020019081526020015f20945050505050620015fc565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c6001600160a01b031663266cf1096040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156200a10e575f80fd5b505af11580156200a121573d5f803e3d5ffd5b505050505f6200a1318862009deb565b6040517f65bc94810000000000000000000000000000000000000000000000000000000081526001600160a01b03881660048201529092505f9150737109709ecfa91a80626ff3989d68f67f5b1dd12d906365bc9481906024015f604051808303815f875af11580156200a1a7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200a1d091908101906200dba2565b50905080515f036200a26757604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f73746453746f726167652066696e642853746453746f72616765293a204e6f2060448201527f73746f726167652075736520646574656374656420666f72207461726765742e606482015260840162003522565b80515b5f6200a276826200c762565b915081106200a65b575f7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c6001600160a01b031663667f9d70898585815181106200a2c7576200a2c76200bf25565b60200260200101516040518363ffffffff1660e01b81526004016200a3019291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa1580156200a31d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a34391906200bfcc565b9050806200a3ad577f080fc4a96620c4462e705b23f346413fe3796bb63c6f8d8591baec0e231577a5888484815181106200a382576200a3826200bf25565b602090810291909101810151604080516001600160a01b039094168452918301520160405180910390a15b6200a3d58b8484815181106200a3c7576200a3c76200bf25565b60200260200101516200a93e565b6200a3e157506200a26a565b60068b01545f90819060ff16156200a435575f6200a41c8e8787815181106200a40e576200a40e6200bf25565b60200260200101516200ab6f565b90945092509050806200a43357505050506200a26a565b505b6001828201610100031b5f1901811b8316811c8681146200a45a57505050506200a26a565b7f9c9555b1e3102e3cf48f427d79cb678f5d9bd1ed0ad574389461e255f95170ed8b8b8a8c6040516020016200a4929291906200d8f1565b604051602081830303815290604052805190602001208989815181106200a4bd576200a4bd6200bf25565b602090810291909101810151604080516001600160a01b0390961686527fffffffff000000000000000000000000000000000000000000000000000000009094169185019190915291830152606082015260800160405180910390a160405180608001604052808787815181106200a539576200a5396200bf25565b60200260200101515f1c8152602001848152602001838152602001600115158152508e5f015f8d6001600160a01b03166001600160a01b031681526020019081526020015f205f8c7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f8a8c6040516020016200a5e29291906200d8f1565b60408051808303601f1901815291815281516020928301208352828201939093529082015f2083518155908301516001820155908201516002820155606090910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055505050505b506001600160a01b0386165f90815260208a815260408083207fffffffff0000000000000000000000000000000000000000000000000000000089168452825280832090519092916200a6b39187918991016200d8f1565b60408051601f198184030181529181528151602092830120835290820192909252015f206003015460ff166200a76c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f73746453746f726167652066696e642853746453746f72616765293a20536c6f60448201527f74287329206e6f7420666f756e642e0000000000000000000000000000000000606482015260840162003522565b87156200a77e576200a77e896200a899565b6001600160a01b0386165f90815260208a815260408083207fffffffff0000000000000000000000000000000000000000000000000000000089168452825280832090519092916200a7d59187918991016200d8f1565b6040516020818303038152906040528051906020012081526020019081526020015f20965050505050505092915050565b5f805f60208551116200a81b5784516200a81e565b60205b90505f5b818110156200a88f576200a8388160086200bfb2565b866200a84583886200c226565b815181106200a858576200a8586200bf25565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c92909217916001016200a822565b5090949350505050565b6004810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556002810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690556200a8fc600182015f6200b12c565b5f600382018190556006820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905562009ec79060078301906200b149565b6004828101546040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691810191909152602481018290525f908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063667f9d7090604401602060405180830381865afa1580156200a9c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a9e891906200bfcc565b90505f806200a9f78662009deb565b90925090505f81156200aa0b575f6200aa0e565b5f195b6004888101546040517f70ca10bb0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116918101919091526024810188905260448101829052909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906370ca10bb906064015f604051808303815f87803b1580156200aa94575f80fd5b505af11580156200aaa7573d5f803e3d5ffd5b505050505f6200aab78862009deb565b60048a8101546040517f70ca10bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691810191909152602481018a905260448101889052909250737109709ecfa91a80626ff3989d68f67f5b1dd12d91506370ca10bb906064015f604051808303815f87803b1580156200ab3e575f80fd5b505af11580156200ab51573d5f803e3d5ffd5b505050508380156200ab635750808314155b98975050505050505050565b6004828101546040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691810191909152602481018290525f90819081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063667f9d7090604401602060405180830381865afa1580156200abf7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200ac1d91906200bfcc565b90505f806200ac2f888860016200acfc565b915091505f806200ac428a8a5f6200acfc565b60048c8101546040517f70ca10bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691810191909152602481018c9052604481018890529193509150737109709ecfa91a80626ff3989d68f67f5b1dd12d906370ca10bb906064015f604051808303815f87803b1580156200acca575f80fd5b505af11580156200acdd573d5f803e3d5ffd5b505050508380156200acec5750815b9a92995097509095505050505050565b5f805f5b6101008110156200ae0c575f846200ad1c576001821b6200ad2e565b6200ad298260ff6200c2ab565b6001901b5b6004888101546040517f70ca10bb0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116918101919091526024810188905260448101829052909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906370ca10bb906064015f604051808303815f87803b1580156200adb4575f80fd5b505af11580156200adc7573d5f803e3d5ffd5b505050505f806200add88962009deb565b915091508180156200ade957508015155b156200ae005760018495509550505050506200ae14565b5050506001016200ad00565b505f80915091505b935093915050565b828054828255905f5260205f209081019282156200ae8a579160200282015b828111156200ae8a57825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039091161782556020909201916001909101906200ae3b565b50620097839291506200b180565b828054828255905f5260205f20906007016008900481019282156200ae8a579160200282015f5b838211156200af0557835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026200aebf565b80156200af375782816101000a81549063ffffffff02191690556004016020816003010492830192600103026200af05565b5050620097839291506200b180565b615fc2806200dc0083390190565b6161938062013bc283390190565b61196d8062019d5583390190565b615881806201b6c283390190565b612b7c8062020f4383390190565b615cb28062023abf83390190565b613af9806202977183390190565b611b50806202d26a83390190565b614aae806202edba83390190565b612470806203386883390190565b60405180604001604052805f63ffffffff1681526020016200b0326040518060c001604052805f67ffffffffffffffff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b905290565b60405180604001604052805f63ffffffff1681526020016200b03260405180604001604052805f63ffffffff1681526020015f6001600160a01b031681525090565b60405180604001604052805f63ffffffff1681526020016200b0326040518060c001604052805f6001600160a01b031681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b611e158062035cd883390190565b613f7b8062037aed83390190565b611b1c806203ba6883390190565b61355f806203d58483390190565b6124be8062040ae383390190565b610aa98062042fa183390190565b5080545f8255905f5260205f209081019062009ec791906200b180565b5080546200b157906200be6d565b5f825580601f106200b167575050565b601f0160209004905f5260205f209081019062009ec791905b5b8082111562009783575f81556001016200b181565b63ffffffff8116811462009ec7575f80fd5b6001600160a01b038116811462009ec7575f80fd5b5f80604083850312156200b1cf575f80fd5b82356200b1dc816200b196565b915060208301356200b1ee816200b1a8565b809150509250929050565b5f8083601f8401126200b20a575f80fd5b50813567ffffffffffffffff8111156200b222575f80fd5b60208301915083602082850101111562004045575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156200b28d576200b28d6200b23a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156200b2bf576200b2bf6200b23a565b604052919050565b5f67ffffffffffffffff8211156200b2e3576200b2e36200b23a565b50601f01601f191660200190565b5f82601f8301126200b301575f80fd5b81356200b3186200b312826200b2c7565b6200b293565b8181528460208386010111156200b32d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80606085870312156200b35d575f80fd5b843567ffffffffffffffff808211156200b375575f80fd5b6200b383888389016200b1f9565b909650945060208701359150808211156200b39c575f80fd5b6200b3aa888389016200b2f1565b935060408701359150808211156200b3c0575f80fd5b506200b3cf878288016200b2f1565b91505092959194509250565b5f5b838110156200b3f75781810151838201526020016200b3dd565b50505f910152565b5f81518084526200b4188160208601602086016200b3db565b601f01601f19169290920160200192915050565b602081525f620012bc60208301846200b3ff565b60ff8116811462009ec7575f80fd5b80356002811062009dd1575f80fd5b5f80604083850312156200b470575f80fd5b82356200b47d816200b440565b9150620086bd602084016200b44f565b5f815180845260208085019450602084015f5b838110156200b4c75781516001600160a01b0316875295820195908201906001016200b4a0565b509495945050505050565b602081525f620012bc60208301846200b48d565b5f805f606084860312156200b4f9575f80fd5b833567ffffffffffffffff8111156200b510575f80fd5b6200b51e868287016200b2f1565b93505060208401356200b531816200b440565b915060408401356200b543816200b440565b809150509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b848110156200b59d57601f198684030189526200b58a8383516200b3ff565b988401989250908301906001016200b56b565b5090979650505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b63b578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b031684528701518784018790526200b627878501826200b54e565b95880195935050908601906001016200b5d1565b509098975050505050505050565b5f805f805f805f60c0888a0312156200b660575f80fd5b87356200b66d816200b196565b965060208801356200b67f816200b1a8565b9550604088013567ffffffffffffffff808211156200b69c575f80fd5b6200b6aa8b838c016200b2f1565b965060608a0135955060808a013591506200b6c5826200b1a8565b90935060a089013590808211156200b6db575f80fd5b506200b6ea8a828b016200b1f9565b989b979a50959850939692959293505050565b5f80602083850312156200b70f575f80fd5b823567ffffffffffffffff8111156200b726575f80fd5b6200b734858286016200b1f9565b90969095509350505050565b61ffff8116811462009ec7575f80fd5b5f80604083850312156200b762575f80fd5b82356200b76f816200b740565b946020939093013593505050565b5f805f604084860312156200b790575f80fd5b833567ffffffffffffffff808211156200b7a8575f80fd5b6200b7b6878388016200b1f9565b909550935060208601359150808211156200b7cf575f80fd5b506200b7de868287016200b2f1565b9150509250925092565b5f67ffffffffffffffff8211156200b804576200b8046200b23a565b5060051b60200190565b5f82601f8301126200b81e575f80fd5b813560206200b8316200b312836200b7e8565b8083825260208201915060208460051b8701019350868411156200b853575f80fd5b602086015b848110156200b87c5780356200b86e816200b1a8565b83529183019183016200b858565b509695505050505050565b5f80604083850312156200b899575f80fd5b823567ffffffffffffffff808211156200b8b1575f80fd5b6200b8bf868387016200b80e565b93506020915081850135818111156200b8d6575f80fd5b85019050601f810186136200b8e9575f80fd5b80356200b8fa6200b312826200b7e8565b81815260059190911b820183019083810190888311156200b919575f80fd5b928401925b828410156200b9445783356200b934816200b196565b825292840192908401906200b91e565b80955050505050509250929050565b5f815180845260208085019450602084015f5b838110156200b4c75781517fffffffff0000000000000000000000000000000000000000000000000000000016875295820195908201906001016200b966565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b63b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815180518785526200ba12888601826200b3ff565b91890151858303868b01529190506200ba2c81836200b953565b9689019694505050908601906001016200b9cd565b5f805f604084860312156200ba54575f80fd5b833567ffffffffffffffff8111156200ba6b575f80fd5b6200ba79868287016200b1f9565b909790965060209590950135949350505050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b60ff85168152606060208201525f6200bad46060830185876200ba8d565b905082604083015295945050505050565b5f602082840312156200baf6575f80fd5b813567ffffffffffffffff8111156200bb0d575f80fd5b620095ac848285016200b80e565b5f805f805f60a086880312156200bb30575f80fd5b85356200bb3d816200b196565b9450602086013593506040860135925060608601356200bb5d816200b1a8565b9150608086013567ffffffffffffffff8111156200bb79575f80fd5b6200bb87888289016200b2f1565b9150509295509295909350565b602081525f620012bc60208301846200b54e565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b63b578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b031684528701518784018790526200bc25878501826200b953565b95880195935050908601906001016200bbcf565b5f805f805f608086880312156200bc4e575f80fd5b853567ffffffffffffffff808211156200bc66575f80fd5b6200bc7489838a016200b1f9565b909750955060208801359150808211156200bc8d575f80fd5b506200bc9c888289016200b2f1565b9350506040860135915060608601356200bcb6816200b1a8565b809150509295509295909350565b5f602082840312156200bcd5575f80fd5b8135620012bc816200b1a8565b5f80604083850312156200bcf4575f80fd5b82356200b76f816200b196565b5f805f606084860312156200bd14575f80fd5b83356200bd21816200b440565b92506200bd31602085016200b44f565b9150604084013567ffffffffffffffff8111156200bd4d575f80fd5b6200b7de868287016200b80e565b6fffffffffffffffffffffffffffffffff8116811462009ec7575f80fd5b5f602082840312156200bd8a575f80fd5b8135620012bc816200bd5b565b5f805f80604085870312156200bdab575f80fd5b843567ffffffffffffffff808211156200bdc3575f80fd5b6200bdd1888389016200b1f9565b909650945060208701359150808211156200bdea575f80fd5b506200bdf9878288016200b1f9565b95989497509550505050565b855163ffffffff1681526020808701519082015260408087015167ffffffffffffffff16908201526001600160a01b038516606082015283608082015260e060a08201525f6200be5960e08301856200b3ff565b82810360c08401526200ab6381856200b3ff565b600181811c908216806200be8257607f821691505b6020821081036200beba577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff8181168382160190811115620015fc57620015fc6200bec0565b60ff8281168282160390811115620015fc57620015fc6200bec0565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6001600160a01b03808a16835280891660208401525086604083015261ffff8616606083015260c060808301526200bf9060c0830185876200ba8d565b82810360a08401526200bfa481856200b3ff565b9a9950505050505050505050565b8082028115828204841417620015fc57620015fc6200bec0565b5f602082840312156200bfdd575f80fd5b5051919050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526200c02860e08501826200b3ff565b905060a083015184820360a08601526200c04382826200b3ff565b91505060c083015184820360c08601526200963482826200b3ff565b602081525f620012bc60208301846200bfe4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826200c0b1576200c0b16200c073565b500490565b604081525f6200c0ca60408301856200bfe4565b905082151560208301529392505050565b5f604082840312156200c0ec575f80fd5b6040516040810181811067ffffffffffffffff821117156200c112576200c1126200b23a565b604052825181526020928301519281019290925250919050565b5f604082840312156200c13d575f80fd5b620012bc83836200c0db565b608081525f6200c15d60808301866200bfe4565b905083516020830152602084015160408301526001600160a01b0383166060830152949350505050565b805167ffffffffffffffff8116811462009dd1575f80fd5b5f8082840360c08112156200c1b2575f80fd5b60808112156200c1c0575f80fd5b506040516060810181811067ffffffffffffffff821117156200c1e7576200c1e76200b23a565b604052835181526200c1fc602085016200c187565b60208201526200c21085604086016200c0db565b60408201529150620086bd84608085016200c0db565b80820180821115620015fc57620015fc6200bec0565b8281525f82516200c2558160208501602087016200b3db565b919091016020019392505050565b5f6001600160a01b03808716835285602084015260a060408401526200c28d60a08401866200b3ff565b93166060830152508082036080909101525f81526020019392505050565b81810381811115620015fc57620015fc6200bec0565b805162009dd1816200b1a8565b5f80604083850312156200c2e0575f80fd5b82516200c2ed816200b1a8565b602084015190925080151581146200b1ee575f80fd5b805162009dd1816200b440565b5f805f606084860312156200c323575f80fd5b6200c32e846200c187565b925060208401516200c340816200b440565b60408501519092506200b543816200b440565b5f6200c3636200b312846200b2c7565b90508281528383830111156200c377575f80fd5b620012bc8360208301846200b3db565b5f82601f8301126200c397575f80fd5b620012bc838351602085016200c353565b5f602082840312156200c3b9575f80fd5b815167ffffffffffffffff8111156200c3d0575f80fd5b620095ac848285016200c387565b5f82601f8301126200c3ee575f80fd5b815160206200c4016200b312836200b7e8565b8083825260208201915060208460051b8701019350868411156200c423575f80fd5b602086015b848110156200b87c5780516200c43e816200b1a8565b83529183019183016200c428565b5f602082840312156200c45d575f80fd5b815167ffffffffffffffff808211156200c475575f80fd5b9083019060c082860312156200c489575f80fd5b6200c4936200b267565b6200c49e836200c187565b81526200c4ae602084016200c303565b60208201526200c4c1604084016200c303565b60408201526200c4d4606084016200c303565b60608201526080830151828111156200c4eb575f80fd5b6200c4f9878286016200c3de565b60808301525060a0830151828111156200c511575f80fd5b6200c51f878286016200c3de565b60a08301525095945050505050565b818382375f9101908152919050565b606081525f6200c55160608301866200b3ff565b905083602083015260ff83166040830152949350505050565b63ffffffff851681526001600160a01b0384166020820152608060408201525f6200c59960808301856200b3ff565b905082606083015295945050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b63b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160a063ffffffff82511685526001600160a01b038983015116898601528782015181898701526200c637828701826200b3ff565b9150506060808301518187015250608080830151925085820381870152506200c66181836200b3ff565b9689019694505050908601906001016200c5d1565b604081525f6200c68a60408301856200b3ff565b90508260208301529392505050565b5f602082840312156200c6aa575f80fd5b815167ffffffffffffffff808211156200c6c2575f80fd5b9083019060c082860312156200c6d6575f80fd5b6200c6e06200b267565b6200c49e836200c2c1565b606081525f6200c6ff60608301866200b3ff565b60208301949094525060400152919050565b602081525f620095ac6020830184866200ba8d565b5f602082840312156200c737575f80fd5b8151620012bc816200b1a8565b5f602082840312156200c755575f80fd5b8151620012bc816200b196565b5f816200c773576200c7736200bec0565b505f190190565b604081525f6200c78e60408301856200b3ff565b82810360208401526200963481856200b3ff565b606081525f6200c7b660608301866200b3ff565b82810360208401526200c7ca81866200b3ff565b905082810360408401526200800381856200b3ff565b608081525f6200c7f460808301876200b3ff565b82810360208401526200c80881876200b3ff565b9150508360408301526001600160a01b038316606083015295945050505050565b63ffffffff881681525f6001600160a01b03808916602084015260c060408401526200c85960c08401896200b3ff565b876060850152818716608085015283810360a08501526200c87c8186886200ba8d565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f6001600160a01b038089168352808816602084015260c060408401526200c8e460c08401886200b48d565b8187166060850152818616608085015283810360a08501526200bfa481866200b48d565b63ffffffff881681525f602060ff8916602084015260e060408401526200c93360e08401896200b48d565b6001600160a01b038881166060860152848203608086015287548083525f8981526020808220940191905b818110156200c97e5784548416835260019485019492860192016200c95e565b505067ffffffffffffffff881660a087015285810360c08701526200c9a481886200b48d565b9d9c50505050505050505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b63b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff168552880151888501889052805167ffffffffffffffff16888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200ca7e6101008801836200b48d565b920151868303840160e08801529190506200ca9a81836200b48d565b978a01979550505091870191506001016200c9dc565b602080825282518282018190525f919060409081850190868401855b828110156200cb13578151805163ffffffff9081168652908701518051909116878601528601516001600160a01b031685850152606090930192908501906001016200cacc565b5091979650505050505050565b5f602082840312156200cb31575f80fd5b8151620012bc816200bd5b565b6fffffffffffffffffffffffffffffffff8181168382160280821691908281146200cb6d576200cb6d6200bec0565b505092915050565b602080825282518282018190525f919060409081850190868401855b828110156200cb13578151805163ffffffff90811686529087015180516fffffffffffffffffffffffffffffffff16888701528088015167ffffffffffffffff1687870152860151166060850152608090930192908501906001016200cb91565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b63b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff16855288015188850188905280516001600160a01b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200ccba6101008801836200b48d565b920151868303840160e08801529190506200ccd681836200b48d565b978a01979550505091870191506001016200cc19565b602080825282518282018190525f919060409081850190868401855b828110156200cb13578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c090930192908501906001016200cd08565b602080825282518282018190525f919060409081850190868401855b828110156200cb13578151805163ffffffff1685528681015167ffffffffffffffff16878601528581015161ffff16868601526060908101516fffffffffffffffffffffffffffffffff1690850152608090930192908501906001016200cda3565b602080825282518282018190525f919060409081850190868401855b828110156200cb13578151805163ffffffff1685528601518685015292840192908501906001016200ce21565b865163ffffffff1681526020808801519082015260408088015167ffffffffffffffff16908201526001600160a01b038616606082015284608082015260e060a08201525f6200cea360e0830185876200ba8d565b82810360c08401526200ceb781856200b3ff565b9998505050505050505050565b601f8211156200300f57805f5260205f20601f840160051c810160208510156200ceeb5750805b601f840160051c820191505b818110156200cf0c575f81556001016200cef7565b5050505050565b67ffffffffffffffff8311156200cf2e576200cf2e6200b23a565b6200cf46836200cf3f83546200be6d565b836200cec4565b5f601f8411600181146200cf7a575f85156200cf625750838201355b5f19600387901b1c1916600186901b1783556200cf0c565b5f83815260208120601f198716915b828110156200cfab57868501358255602094850194600190920191016200cf89565b50868210156200cfc8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f80858511156200cfe9575f80fd5b838611156200cff6575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156200cb6d5760049490940360031b84901b1690921692915050565b5f805f606084860312156200d05d575f80fd5b83516200d06a816200bd5b565b60208501519093506200d07d816200b196565b60408501519092506200b543816200bd5b565b80356020831015620015fc575f19602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156200cb6d5760089490940360031b84901b1690921692915050565b608081525f6200d13260808301600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d16f81600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b0380851660408401528084166060840152509392505050565b608081525f6200d1cf60808301600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d16f81600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b608081525f6200d24960808301600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d16f81600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b606081525f6200d2c360608301600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d30081600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b038316604083015292915050565b608081525f6200d35560808301600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d16f81600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b608081525f6200d3cf60808301600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d16f81600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b63b578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff168885015286015160608785018190526200d494818601836200b3ff565b9689019694505050908601906001016200d433565b5f82516200d4bc8184602087016200b3db565b9190910192915050565b5f83516200d4d98184602088016200b3db565b8351908301906200d4ef8183602088016200b3db565b01949350505050565b5f805f606084860312156200d50b575f80fd5b83516200d518816200b740565b60208501519093506200d07d816200bd5b565b5f82600f0b82600f0b0280600f0b91508082146200349a576200349a6200bec0565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f82516200d5bc81602c8501602087016200b3db565b91909101602c0195945050505050565b838152826020820152606060408201525f6200963460608301846200b3ff565b5f805f606084860312156200d5ff575f80fd5b83516200d60c816200b440565b602085015160409095015190969495509392505050565b5f80604083850312156200d635575f80fd5b82516200d642816200bd5b565b6020939093015192949293505050565b5f80604083850312156200d664575f80fd5b82516200d671816200bd5b565b60208401519092506200b1ee816200bd5b565b5f80604083850312156200d696575f80fd5b825167ffffffffffffffff808211156200d6ae575f80fd5b6200d6bc868387016200c387565b935060208501519150808211156200d6d2575f80fd5b506200d6e1858286016200c387565b9150509250929050565b5f805f606084860312156200d6fe575f80fd5b83516200d70b816200b440565b602085015190935067ffffffffffffffff8111156200d728575f80fd5b6200d736868287016200c387565b925050604084015190509250925092565b6fffffffffffffffffffffffffffffffff8181168382160190808211156200349a576200349a6200bec0565b63ffffffff8181168382160190808211156200349a576200349a6200bec0565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156200cb6d5760029490940360031b84901b1690921692915050565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156200cb6d5760109490940360031b84901b1690921692915050565b5f826200d832576200d8326200c073565b500690565b61ffff8181168382160190808211156200349a576200349a6200bec0565b5f86516200d868818460208b016200b3db565b80830190507fff00000000000000000000000000000000000000000000000000000000000000808860f81b1682527fffff0000000000000000000000000000000000000000000000000000000000008760f01b166001830152808660f81b1660038301525083516200d8e28160048401602088016200b3db565b01600401979650505050505050565b5f83516200d9048184602088016200b3db565b9190910191825250602001919050565b600181815b808511156200d95457815f19048211156200d938576200d9386200bec0565b808516156200d94657918102915b93841c93908002906200d919565b509250929050565b5f826200d96c57506001620015fc565b816200d97a57505f620015fc565b81600181146200d99357600281146200d99e576200d9be565b6001915050620015fc565b60ff8411156200d9b2576200d9b26200bec0565b50506001821b620015fc565b5060208310610133831016604e8410600b84101617156200d9e3575081810a620015fc565b6200d9ef83836200d914565b805f19048211156200da05576200da056200bec0565b029392505050565b5f620012bc83836200d95c565b5f602082840312156200da2b575f80fd5b815167ffffffffffffffff8111156200da42575f80fd5b8201601f810184136200da53575f80fd5b620095ac848251602084016200c353565b7f73746453746f726167652066696e642853746453746f72616765293a2050616381527f6b656420736c6f742e2057652063616e2774206669742076616c75652067726560208201527f61746572207468616e200000000000000000000000000000000000000000000060408201525f82516200dae981604a8501602087016200b3db565b91909101604a0192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681525f82516200db318160048501602087016200b3db565b919091016004019392505050565b5f82601f8301126200db4f575f80fd5b815160206200db626200b312836200b7e8565b8083825260208201915060208460051b8701019350868411156200db84575f80fd5b602086015b848110156200b87c57805183529183019183016200db89565b5f80604083850312156200dbb4575f80fd5b825167ffffffffffffffff808211156200dbcc575f80fd5b6200dbda868387016200db3f565b935060208501519150808211156200dbf0575f80fd5b506200d6e1858286016200db3f56fe60c06040526001600d5534801562000015575f80fd5b5060405162005fc238038062005fc28339810160408190526200003891620002c2565b81816001600160a01b0381166200006957604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007481620000c8565b5063ffffffff166080526040516200008c90620002b4565b604051809103905ff080158015620000a6573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c09062000117565b505062000338565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200012162000284565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200016b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000191919062000310565b620001af5760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001e95760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002b25760405163118cdaa760e01b815233600482015260240162000060565b565b6102818062005d4183390190565b5f8060408385031215620002d4575f80fd5b825163ffffffff81168114620002e8575f80fd5b60208401519092506001600160a01b038116811462000305575f80fd5b809150509250929050565b5f6020828403121562000321575f80fd5b8151801515811462000331575f80fd5b9392505050565b60805160a0516159c46200037d5f395f61078601525f818161054301528181612d7701528181613782015281816137e801528181613f570152613fbd01526159c45ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b73578063ef667aa114610b92578063f2fde38b14610bdb578063f64be4c714610bfa575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b54575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614886565b610c2e565b005b348015610374575f80fd5b5061037d610d41565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c036600461492e565b610d71565b6103d86103d3366004614976565b6110f2565b60405161039d91906149c5565b3480156103f0575f80fd5b506103676103ff366004614a07565b611258565b34801561040f575f80fd5b5061042361041e366004614a72565b611315565b60405161039d9190614b2e565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614b57565b61142b565b34801561049b575f80fd5b506104636104aa366004614bb9565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614bf8565b6115ff565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614b57565b611694565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614c20565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614c39565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614c72565b611841565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614c8b565b61188f565b34801561067e575f80fd5b5061036761068d36600461492e565b611904565b34801561069d575f80fd5b506103676106ac366004614d7f565b611df9565b3480156106bc575f80fd5b506103676106cb366004614e59565b611e63565b3480156106db575f80fd5b5061070e6106ea366004614c72565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614c72565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f31565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004614ee3565b611f44565b3480156107ea575f80fd5b506106446107f9366004614f30565b612047565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120b2565b60405161039d9190614f59565b610367610849366004614fa5565b612112565b348015610859575f80fd5b50610367610868366004615049565b6122ce565b348015610878575f80fd5b5061060c610887366004614c39565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd366004615049565b6125c0565b3480156108dd575f80fd5b5061060c6108ec366004614c39565b612694565b3480156108fc575f80fd5b5061036761090b366004615089565b61272b565b34801561091b575f80fd5b5061036761092a3660046150b2565b612b2a565b34801561093a575f80fd5b506103676109493660046150cd565b612b42565b348015610959575f80fd5b50610463610968366004614c39565b612cd8565b348015610978575f80fd5b50610367610987366004615107565b612de6565b348015610997575f80fd5b506105ae6109a6366004614bf8565b61309d565b3480156109b6575f80fd5b506103676109c5366004614c20565b613123565b3480156109d5575f80fd5b506106446109e4366004614f30565b613198565b3480156109f4575f80fd5b50610463610a03366004615121565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614c20565b6131fc565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a366004615089565b613273565b348015610a8a575f80fd5b50610367610a99366004615121565b61356e565b348015610aa9575f80fd5b50610644610ab8366004614c20565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614bf8565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614976565b613690565b60405161039d9190615160565b348015610b4d575f80fd5b505f6105ae565b348015610b5f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b7e575f80fd5b50610367610b8d366004614c20565b6139b1565b348015610b9d575f80fd5b5061070e610bac366004614bf8565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610be6575f80fd5b50610367610bf5366004614c20565b613bab565b348015610c05575f80fd5b506105ae610c14366004614c72565b60096020525f90815260409020546001600160a01b031681565b610c7d86610c3f60208a018a614c72565b60208a0135610c5460608c0160408d01615177565b898989604051602001610c6993929190615190565b604051602081830303815290604052613c01565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cd1908b908a908a908a9033908b908b9060040161522a565b5f604051808303818588803b158015610ce8575f80fd5b505af1158015610cfa573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d30929190615280565b60405180910390a150505050505050565b5f80610d50600d546001141590565b610d5b575f80610d69565b610d69600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610dc4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e7d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3591906152d1565b6002811115610e4657610e466152a4565b03610e7d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f49576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610eef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1391906152fc565b610f49576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f5288613e3f565b5f610f5d89896115ff565b9150508015610f98576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03610ff6576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001015561108c565b43861161102f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b6110fa6147d8565b6111076020840184614c72565b336001600d5414611144576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d5561118390860160808701615317565b80156111985750600e546001600160a01b0316155b156111cf576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111db3388613ea8565b915091505f6111e73490565b90505f6112026111fd60a08b0160808c01615317565b614180565b90506112138460400151838361424a565b600e54604085015160200151611235916001600160a01b03169083868c6142b1565b6040840151516112479083858b6142de565b50506001600d555095945050505050565b61126185613e3f565b5f83838360405160200161127793929190615190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112d3866112b86020880188614c72565b60208801356112cd60608a0160408b01615177565b85613c01565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611305929190615280565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661136b576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113dc573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261142191908101906153f8565b9695505050505050565b61143485613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114bf576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061150b575080155b1561154e576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611305565b6001600160a01b038083165f90815260076020908152604080832063ffffffff86168452909152812054909116908161168d5763ffffffff83165f908152600a60205260409020546001600160a01b0316915081611689576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b61169d85613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611723576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114b6565b80158061176d57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117b0576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611305565b63ffffffff81165f908152600960205260408120546001600160a01b031615801590611889575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516118ee9a9998979695949392919061542a565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561193657506001600160a01b03811615155b1561196d576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a26575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119de91906152d1565b60028111156119ef576119ef6152a4565b03611a26576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611af2576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611a98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611abc91906152fc565b611af2576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611afb88613e3f565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b62576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d4f576001600160a01b0381161580611c1c57506001600160a01b038716155b15611c53576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c7a91906154bf565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d41918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611dee565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110df565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e4e9a999897969594939291906154d2565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611eb6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ebf85613e3f565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f0890889087908790600401615530565b5f604051808303815f87803b158015611f1f575f80fd5b505af1158015611dee573d5f803e3d5ffd5b611f39614308565b611f425f61434d565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fb2576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fc292919061567b565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161203891908890889088908890889061568a565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120ab9185918591859061207690850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166143b4565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561210857602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116120ea575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161215c908790879061567b565b604051809103902090508082146121a9576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114b6565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612230908e908d908c908c9033908d908d906004016156d2565b5f604051808303818588803b158015612247575f80fd5b505af1158015612259573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122ba94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561230057506001600160a01b03811615155b15612337576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b038116156123f1576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612385573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a991906152d1565b60028111156123ba576123ba6152a4565b036123f1576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124bd576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248791906152fc565b6124bd576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c687613e3f565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361252c576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d30565b5f805f6125cd86866115ff565b91509150816001600160a01b0316846001600160a01b0316036125f5576001925050506120ab565b5f81612628576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061263d565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126775750438160200151115b1561268857600193505050506120ab565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612723576001016126d0565b949350505050565b612733614308565b6001600160a01b0382165f90815260056020526040902054829060ff16612786576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561283f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f791906152d1565b6002811115612808576128086152a4565b0361283f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561290b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d591906152fc565b61290b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612966576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612a965763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a3b87436154bf565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b20565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b32614308565b612b3d83838361444c565b505050565b612b5982612b536020860186614c72565b336125c0565b612b8f576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bb790870187614c72565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612bf48484836143b4565b612c2a576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c3584848361446f565b612c6b576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c9783612c7c6020870187614c72565b6020870135612c916060890160408a01615177565b86614528565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612cca93929190615725565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d209067ffffffffffffffff16600161574d565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612dee614308565b6001600160a01b0381165f90815260056020526040902054819060ff16612e41576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612efb576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb391906152d1565b6002811115612ec457612ec46152a4565b03612efb576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fc7576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906152fc565b612fc7576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613020576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611305565b6001600160a01b038083165f90815260066020908152604080832063ffffffff861684529091529020541680611889575063ffffffff81165f908152600960205260409020546001600160a01b031680611889576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61312b614308565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b0381165f90815260016020908152604082206120ab918591859185906131c790850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff1661446f565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981910161318d565b6001600160a01b0382165f90815260056020526040902054829060ff166132c6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561337f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613313573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333791906152d1565b6002811115613348576133486152a4565b0361337f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561344b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156133f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061341591906152fc565b61344b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613453614308565b845f0361349d5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613522565b4385116134d6576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d30565b61357784613e3f565b613582848484612694565b61358d90600161574d565b67ffffffffffffffff168167ffffffffffffffff16146135e5576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612cca565b604080518082019091525f80825260208201526136b360a0840160808501615317565b80156136c85750600e546001600160a01b0316155b156136ff576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061372790870187614c72565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137629067ffffffffffffffff16600161574d565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137cd9190614c72565b63ffffffff168152602001866020013581526020016138c7847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061381a9190614c72565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b81526020016138d9604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139259050856109a66020890189614c72565b90506001600160a01b03811663d80e9bd98361394460608a018a61576e565b61395460a08c0160808d01615317565b6040518563ffffffff1660e01b815260040161397394939291906157cf565b6040805180830381865afa15801561398d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142191906158c3565b6139b9614308565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5891906152fc565b613a8e576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613ae0576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161318d565b613bb3614308565b6001600160a01b038116613bf5576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114b6565b613bfe8161434d565b50565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d5957600181015b8467ffffffffffffffff168167ffffffffffffffff1611613cf5576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613ced576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b600101613c4d565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613dec576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114b6565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613e7157506001600160a01b038181165f908152600f6020526040902054163314155b15613bfe576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613eb06147d8565b5f80613f3785613ec36020870187614c72565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fa29190614c72565b63ffffffff16815260200186602001358152602001613fef847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061381a9190614c72565b8152602001614001604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061404d9050876109a66020890189614c72565b90505f806001600160a01b038316634389e58f8561406e60608c018c61576e565b61407e60a08e0160808f01615317565b6040518563ffffffff1660e01b815260040161409d94939291906157cf565b5f604051808303815f875af11580156140b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526140fd91908101906158dd565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161413160608b018b61576e565b866040516141429493929190615929565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b5f811561424557600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156141e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061420a9190615969565b9050805f03614245576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b825182108061425c5750808360200151115b15612b3d57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114b6565b83156142c2576142c28583866145a7565b828410156142d7576142d785828686036145a7565b5050505050565b83156142ee576142ee82856145fb565b8284101561430257614302818585036145fb565b50505050565b5f546001600160a01b03163314611f42576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114b6565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061272357506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d9061440d908790600401615980565b602060405180830381865afa158015614428573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272391906152fc565b6001600160a01b03831661446457612b3d82826145fb565b612b3d8383836145a7565b5f67ffffffffffffffff821661448b6060860160408701615177565b67ffffffffffffffff16118061272357506001600160a01b0383165f90815260026020908152604082209082906144c490880188614c72565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f8660400160208101906145049190615177565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b8061455f576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6001600160a01b0382166145e7576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b3d6001600160a01b03841683836146d6565b6001600160a01b03821661463b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614684576040519150601f19603f3d011682016040523d82523d5f602084013e614689565b606091505b5050905080612b3d576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114b6565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b3d93879390925f9283929183919082885af180614772576040513d5f823e3d81fd5b50505f513d91508115614789578060011415614796565b6001600160a01b0384163b155b15614302576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114b6565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161481760405180604001604052805f81526020015f81525090565b905290565b5f6060828403121561482c575f80fd5b50919050565b80356001600160a01b0381168114614245575f80fd5b5f8083601f840112614858575f80fd5b50813567ffffffffffffffff81111561486f575f80fd5b60208301915083602082850101111561168d575f80fd5b5f805f805f805f60e0888a03121561489c575f80fd5b6148a6898961481c565b96506148b460608901614832565b95506080880135945060a088013567ffffffffffffffff808211156148d7575f80fd5b6148e38b838c01614848565b909650945060c08a01359150808211156148fb575f80fd5b506149088a828b01614848565b989b979a50959850939692959293505050565b803563ffffffff81168114614245575f80fd5b5f805f8060808587031215614941575f80fd5b61494a85614832565b93506149586020860161491b565b925061496660408601614832565b9396929550929360600135925050565b5f8060408385031215614987575f80fd5b823567ffffffffffffffff81111561499d575f80fd5b830160a081860312156149ae575f80fd5b91506149bc60208401614832565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614a00604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614a1b575f80fd5b614a2486614832565b9450614a33876020880161481c565b93506080860135925060a086013567ffffffffffffffff811115614a55575f80fd5b614a6188828901614848565b969995985093965092949392505050565b5f805f8060808587031215614a85575f80fd5b614a8e85614832565b9350614a9c60208601614832565b9250614aaa6040860161491b565b9150614ab86060860161491b565b905092959194509250565b5f5b83811015614add578181015183820152602001614ac5565b50505f910152565b5f8151808452614afc816020860160208601614ac3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120ab6020830184614ae5565b803567ffffffffffffffff81168114614245575f80fd5b5f805f805f60a08688031215614b6b575f80fd5b614b7486614832565b9450614b826020870161491b565b935060408601359250614b9760608701614b40565b949793965091946080013592915050565b803561ffff81168114614245575f80fd5b5f805f8060808587031215614bcc575f80fd5b614bd585614832565b9350614be360208601614832565b925060408501359150614ab860608601614ba8565b5f8060408385031215614c09575f80fd5b614c1283614832565b91506149bc6020840161491b565b5f60208284031215614c30575f80fd5b6120ab82614832565b5f805f60608486031215614c4b575f80fd5b614c5484614832565b9250614c626020850161491b565b9150604084013590509250925092565b5f60208284031215614c82575f80fd5b6120ab8261491b565b5f805f805f805f805f805f806101208d8f031215614ca7575f80fd5b614cb08d614832565b9b50614cbe60208e01614832565b9a5060408d01359950614cd360608e01614ba8565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614cfb575f80fd5b614d0b8e60c08f01358f01614848565b909650945067ffffffffffffffff60e08e01351115614d28575f80fd5b614d388e60e08f01358f01614848565b909450925067ffffffffffffffff6101008e01351115614d56575f80fd5b614d678e6101008f01358f01614848565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614d9a575f80fd5b614da48d8d61481c565b9a50614db260608d01614832565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614de2575f80fd5b614df28e60e08f01358f01614848565b90975095506101008d0135811015614e08575f80fd5b614e198e6101008f01358f01614848565b90955093506101208d0135811015614e2f575f80fd5b50614e418d6101208e01358e01614848565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614e6c575f80fd5b614e7585614832565b9350614e8360208601614832565b9250604085013567ffffffffffffffff80821115614e9f575f80fd5b818701915087601f830112614eb2575f80fd5b813581811115614ec0575f80fd5b8860208260051b8501011115614ed4575f80fd5b95989497505060200194505050565b5f805f805f60808688031215614ef7575f80fd5b614f0086614832565b945060208601359350614f1560408701614ba8565b9250606086013567ffffffffffffffff811115614a55575f80fd5b5f8060808385031215614f41575f80fd5b614f4b848461481c565b91506149bc60608401614832565b602080825282518282018190525f9190848201906040850190845b81811015614f995783516001600160a01b031683529284019291840191600101614f74565b50909695505050505050565b5f805f805f805f8060c0898b031215614fbc575f80fd5b614fc589614832565b9750614fd360208a01614832565b965060408901359550614fe860608a01614ba8565b9450608089013567ffffffffffffffff80821115615004575f80fd5b6150108c838d01614848565b909650945060a08b0135915080821115615028575f80fd5b506150358b828c01614848565b999c989b5096995094979396929594505050565b5f805f6060848603121561505b575f80fd5b61506484614832565b92506150726020850161491b565b915061508060408501614832565b90509250925092565b5f805f6060848603121561509b575f80fd5b6150a48461491b565b9250614c6260208501614832565b5f805f606084860312156150c4575f80fd5b6150a484614832565b5f805f60a084860312156150df575f80fd5b6150e9858561481c565b92506150f760608501614832565b9150608084013590509250925092565b5f8060408385031215615118575f80fd5b6149ae8361491b565b5f805f8060808587031215615134575f80fd5b61513d85614832565b935061514b6020860161491b565b925060408501359150614ab860608601614b40565b815181526020808301519082015260408101611889565b5f60208284031215615187575f80fd5b6120ab82614b40565b838152818360208301375f910160200190815292915050565b63ffffffff6151b78261491b565b1682526020810135602083015267ffffffffffffffff6151d960408301614b40565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b61523481896151a9565b86606082015260e060808201525f61525060e0830187896151e3565b6001600160a01b03861660a084015282810360c08401526152728185876151e3565b9a9950505050505050505050565b6080810161528e82856151a9565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f602082840312156152e1575f80fd5b8151600381106120ab575f80fd5b8015158114613bfe575f80fd5b5f6020828403121561530c575f80fd5b81516120ab816152ef565b5f60208284031215615327575f80fd5b81356120ab816152ef565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011261536e575f80fd5b815167ffffffffffffffff8082111561538957615389615332565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156153cf576153cf615332565b816040528381528660208588010111156153e7575f80fd5b611421846020830160208901614ac3565b5f60208284031215615408575f80fd5b815167ffffffffffffffff81111561541e575f80fd5b6127238482850161535f565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f61545960e08301888a6151e3565b82810360a084015261546c8187896151e3565b905082810360c08401526154818185876151e3565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561188957611889615492565b5f6101206154e0838e6151a9565b8b60608401528a60808401528960a08401528060c0840152615505818401898b6151e3565b905082810360e084015261551a8187896151e3565b90508281036101008401526154818185876151e3565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b8981101561566b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c36030181126155c4575f80fd5b8b0163ffffffff806155d58361491b565b168552806155e488840161491b565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811261561d575f80fd5b01858101903567ffffffffffffffff811115615637575f80fd5b803603821315615645575f80fd5b878986015261565788860182846151e3565b958701959450505090840190600101615564565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a060808301526156c660a0830184866151e3565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a060408401526156fb60a08401888a6151e3565b818716606085015283810360808501526157168186886151e3565b9b9a5050505050505050505050565b60a0810161573382866151a9565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614a0057614a00615492565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126157a1575f80fd5b83018035915067ffffffffffffffff8211156157bb575f80fd5b60200191503681900382131561168d575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f606086015161581f60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152615850610140840182614ae5565b905082810360208401526158658186886151e3565b915050612ddd604083018415159052565b5f60408284031215615886575f80fd5b6040516040810181811067ffffffffffffffff821117156158a9576158a9615332565b604052825181526020928301519281019290925250919050565b5f604082840312156158d3575f80fd5b6120ab8383615876565b5f80606083850312156158ee575f80fd5b6158f88484615876565b9150604083015167ffffffffffffffff811115615913575f80fd5b61591f8582860161535f565b9150509250929050565b606081525f61593b6060830187614ae5565b828103602084015261594e8186886151e3565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615979575f80fd5b5051919050565b6060810161188982846151a956fea2646970667358221220938f9466c98d432f294c8fa92afa649818bd8c0b591d10b7b71b464300e2a18764736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c6343000816003360e06040526001600d5534801562000015575f80fd5b5060405162006193380380620061938339810160408190526200003891620002ef565b828281816001600160a01b0381166200006b57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007681620000d9565b5063ffffffff166080526040516200008e90620002c5565b604051809103905ff080158015620000a8573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c29062000128565b50506001600160a01b031660c05250620003679050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200013262000295565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200017c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a291906200033f565b620001c05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001fa5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002c35760405163118cdaa760e01b815233600482015260240162000062565b565b6102818062005f1283390190565b80516001600160a01b0381168114620002ea575f80fd5b919050565b5f805f6060848603121562000302575f80fd5b835163ffffffff8116811462000316575f80fd5b92506200032660208501620002d3565b91506200033660408501620002d3565b90509250925092565b5f6020828403121562000350575f80fd5b8151801515811462000360575f80fd5b9392505050565b60805160a05160c051615b48620003ca5f395f8181610b500152818161314e015281816141df01526143f001525f61078601525f818161054301528181612d98015281816137b40152818161381a01528181613f860152613fec0152615b485ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b93578063ef667aa114610bb2578063f2fde38b14610bfb578063f64be4c714610c1a575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b74575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614a0a565b610c4e565b005b348015610374575f80fd5b5061037d610d61565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c0366004614ab2565b610d91565b6103d86103d3366004614afa565b611112565b60405161039d9190614b49565b3480156103f0575f80fd5b506103676103ff366004614b8b565b611279565b34801561040f575f80fd5b5061042361041e366004614bf6565b611336565b60405161039d9190614cb2565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614cdb565b61144c565b34801561049b575f80fd5b506104636104aa366004614d3d565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614d7c565b611620565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614cdb565b6116b5565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614da4565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614dbd565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614df6565b611862565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614e0f565b6118b0565b34801561067e575f80fd5b5061036761068d366004614ab2565b611925565b34801561069d575f80fd5b506103676106ac366004614f03565b611e1a565b3480156106bc575f80fd5b506103676106cb366004614fdd565b611e84565b3480156106db575f80fd5b5061070e6106ea366004614df6565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614df6565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f52565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004615067565b611f65565b3480156107ea575f80fd5b506106446107f93660046150b4565b612068565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120d3565b60405161039d91906150dd565b610367610849366004615129565b612133565b348015610859575f80fd5b506103676108683660046151cd565b6122ef565b348015610878575f80fd5b5061060c610887366004614dbd565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd3660046151cd565b6125e1565b3480156108dd575f80fd5b5061060c6108ec366004614dbd565b6126b5565b3480156108fc575f80fd5b5061036761090b36600461520d565b61274c565b34801561091b575f80fd5b5061036761092a366004615236565b612b4b565b34801561093a575f80fd5b50610367610949366004615251565b612b63565b348015610959575f80fd5b50610463610968366004614dbd565b612cf9565b348015610978575f80fd5b5061036761098736600461528b565b612e07565b348015610997575f80fd5b506105ae6109a6366004614d7c565b6130be565b3480156109b6575f80fd5b506103676109c5366004614da4565b613144565b3480156109d5575f80fd5b506106446109e43660046150b4565b6131c3565b3480156109f4575f80fd5b50610463610a033660046152a5565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614da4565b613227565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a36600461520d565b6132a5565b348015610a8a575f80fd5b50610367610a993660046152a5565b6135a0565b348015610aa9575f80fd5b50610644610ab8366004614da4565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614d7c565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614afa565b6136c2565b60405161039d91906152e4565b348015610b4d575f80fd5b507f00000000000000000000000000000000000000000000000000000000000000006105ae565b348015610b7f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b9e575f80fd5b50610367610bad366004614da4565b6139e3565b348015610bbd575f80fd5b5061070e610bcc366004614d7c565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c06575f80fd5b50610367610c15366004614da4565b613bdd565b348015610c25575f80fd5b506105ae610c34366004614df6565b60096020525f90815260409020546001600160a01b031681565b610c9d86610c5f60208a018a614df6565b60208a0135610c7460608c0160408d016152fb565b898989604051602001610c8993929190615314565b604051602081830303815290604052613c30565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cf1908b908a908a908a9033908b908b906004016153ae565b5f604051808303818588803b158015610d08575f80fd5b505af1158015610d1a573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d50929190615404565b60405180910390a150505050505050565b5f80610d70600d546001141590565b610d7b575f80610d89565b610d89600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610de4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e9d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e559190615455565b6002811115610e6657610e66615428565b03610e9d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f69576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610f0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f339190615480565b610f69576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f7288613e6e565b5f610f7d8989611620565b9150508015610fb8576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03611016576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600101556110ac565b43861161104f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b61111a61495c565b6111276020840184614df6565b336001600d5414611164576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d556111a39086016080870161549b565b80156111b85750600e546001600160a01b0316155b156111ef576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111fb3388613ed7565b915091505f6112086141af565b90505f61122361121e60a08b0160808c0161549b565b614255565b90506112348460400151838361431f565b600e54604085015160200151611256916001600160a01b03169083868c614386565b6040840151516112689083858b6143b3565b50506001600d555095945050505050565b61128285613e6e565b5f83838360405160200161129893929190615314565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112f4866112d96020880188614df6565b60208801356112ee60608a0160408b016152fb565b85613c30565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611326929190615404565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661138c576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113fd573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611442919081019061557c565b9695505050505050565b61145585613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114e0576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061152c575080155b1561156f576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611326565b6001600160a01b038083165f90815260076020908152604080832063ffffffff8616845290915281205490911690816116ae5763ffffffff83165f908152600a60205260409020546001600160a01b03169150816116aa576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b6116be85613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611744576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114d7565b80158061178e57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117d1576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611326565b63ffffffff81165f908152600960205260408120546001600160a01b0316158015906118aa575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d60405161190f9a999897969594939291906155ae565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561195757506001600160a01b03811615155b1561198e576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a47575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ff9190615455565b6002811115611a1057611a10615428565b03611a47576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611b13576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611ab9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611add9190615480565b611b13576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b1c88613e6e565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b83576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d70576001600160a01b0381161580611c3d57506001600160a01b038716155b15611c74576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c9b9190615643565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d62918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611e0f565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110ff565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e6f9a99989796959493929190615656565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611ed7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ee085613e6e565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f29908890879087906004016156b4565b5f604051808303815f87803b158015611f40575f80fd5b505af1158015611e0f573d5f803e3d5ffd5b611f5a61441e565b611f635f614463565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fd3576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fe39291906157ff565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161205991908890889088908890889061580e565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120cc9185918591859061209790850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166144ca565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561212957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161210b575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161217d90879087906157ff565b604051809103902090508082146121ca576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114d7565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612251908e908d908c908c9033908d908d90600401615856565b5f604051808303818588803b158015612268575f80fd5b505af115801561227a573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122db94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561232157506001600160a01b03811615155b15612358576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612412576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ca9190615455565b60028111156123db576123db615428565b03612412576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124de576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612484573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124a89190615480565b6124de576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124e787613e6e565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361254d576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d50565b5f805f6125ee8686611620565b91509150816001600160a01b0316846001600160a01b031603612616576001925050506120cc565b5f81612649576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061265e565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126985750438160200151115b156126a957600193505050506120cc565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612744576001016126f1565b949350505050565b61275461441e565b6001600160a01b0382165f90815260056020526040902054829060ff166127a7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615612860575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128189190615455565b600281111561282957612829615428565b03612860576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561292c576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f69190615480565b61292c576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612987576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612ab75763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a5c8743615643565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b41565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b5361441e565b612b5e838383614562565b505050565b612b7a82612b746020860186614df6565b336125e1565b612bb0576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bd890870187614df6565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612c158484836144ca565b612c4b576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c56848483614585565b612c8c576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cb883612c9d6020870187614df6565b6020870135612cb26060890160408a016152fb565b8661463e565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612ceb939291906158a9565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d419067ffffffffffffffff1660016158d1565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612e0f61441e565b6001600160a01b0381165f90815260056020526040902054819060ff16612e62576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612f1c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed49190615455565b6002811115612ee557612ee5615428565b03612f1c576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fe8576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fb29190615480565b612fe8576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613041576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611326565b6001600160a01b038083165f90815260066020908152604080832063ffffffff8616845290915290205416806118aa575063ffffffff81165f908152600960205260409020546001600160a01b0316806118aa576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61314c61441e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036131b7576040517f10647d0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131c0816146bd565b50565b6001600160a01b0381165f90815260016020908152604082206120cc918591859185906131f290850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff16614585565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d798398191015b60405180910390a150565b6001600160a01b0382165f90815260056020526040902054829060ff166132f8576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b038116156133b1575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133699190615455565b600281111561337a5761337a615428565b036133b1576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561347d576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015613423573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134479190615480565b61347d576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61348561441e565b845f036134cf5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613554565b438511613508576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d50565b6135a984613e6e565b6135b48484846126b5565b6135bf9060016158d1565b67ffffffffffffffff168167ffffffffffffffff1614613617576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612ceb565b604080518082019091525f80825260208201526136e560a084016080850161549b565b80156136fa5750600e546001600160a01b0316155b15613731576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061375990870187614df6565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137949067ffffffffffffffff1660016158d1565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137ff9190614df6565b63ffffffff168152602001866020013581526020016138f9847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061384c9190614df6565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b815260200161390b60408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139579050856109a66020890189614df6565b90506001600160a01b03811663d80e9bd98361397660608a018a6158f2565b61398660a08c0160808d0161549b565b6040518563ffffffff1660e01b81526004016139a59493929190615953565b6040805180830381865afa1580156139bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114429190615a47565b6139eb61441e565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a8a9190615480565b613ac0576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613b12576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161329a565b613be561441e565b6001600160a01b038116613c27576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114d7565b6131c081614463565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d8857600181015b8467ffffffffffffffff168167ffffffffffffffff1611613d24576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613d1c576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b600101613c7c565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613e1b576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114d7565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613ea057506001600160a01b038181165f908152600f6020526040902054163314155b156131c0576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613edf61495c565b5f80613f6685613ef26020870187614df6565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fd19190614df6565b63ffffffff1681526020018660200135815260200161401e847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061384c9190614df6565b815260200161403060408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061407c9050876109a66020890189614df6565b90505f806001600160a01b038316634389e58f8561409d60608c018c6158f2565b6140ad60a08e0160808f0161549b565b6040518563ffffffff1660e01b81526004016140cc9493929190615953565b5f604051808303815f875af11580156140e7573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261412c9190810190615a61565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161416060608b018b6158f2565b866040516141719493929190615aad565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561422c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142509190615aed565b905090565b5f811561431a57600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156142bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142df9190615aed565b9050805f0361431a576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b82518210806143315750808360200151115b15612b5e57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114d7565b83156143975761439785838661472b565b828410156143ac576143ac858286860361472b565b5050505050565b34156143eb576040517f9a317a5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144187f000000000000000000000000000000000000000000000000000000000000000085858585614386565b50505050565b5f546001600160a01b03163314611f63576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114d7565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061274457506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d90614523908790600401615b04565b602060405180830381865afa15801561453e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127449190615480565b6001600160a01b03831661457a57612b5e828261477f565b612b5e83838361472b565b5f67ffffffffffffffff82166145a160608601604087016152fb565b67ffffffffffffffff16118061274457506001600160a01b0383165f90815260026020908152604082209082906145da90880188614df6565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f86604001602081019061461a91906152fb565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b80614675576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6146c561441e565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a623969060200161329a565b6001600160a01b03821661476b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b5e6001600160a01b038416838361485a565b6001600160a01b0382166147bf576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614808576040519150601f19603f3d011682016040523d82523d5f602084013e61480d565b606091505b5050905080612b5e576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114d7565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b5e93879390925f9283929183919082885af1806148f6576040513d5f823e3d81fd5b50505f513d9150811561490d57806001141561491a565b6001600160a01b0384163b155b15614418576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114d7565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161499b60405180604001604052805f81526020015f81525090565b905290565b5f606082840312156149b0575f80fd5b50919050565b80356001600160a01b038116811461431a575f80fd5b5f8083601f8401126149dc575f80fd5b50813567ffffffffffffffff8111156149f3575f80fd5b6020830191508360208285010111156116ae575f80fd5b5f805f805f805f60e0888a031215614a20575f80fd5b614a2a89896149a0565b9650614a38606089016149b6565b95506080880135945060a088013567ffffffffffffffff80821115614a5b575f80fd5b614a678b838c016149cc565b909650945060c08a0135915080821115614a7f575f80fd5b50614a8c8a828b016149cc565b989b979a50959850939692959293505050565b803563ffffffff8116811461431a575f80fd5b5f805f8060808587031215614ac5575f80fd5b614ace856149b6565b9350614adc60208601614a9f565b9250614aea604086016149b6565b9396929550929360600135925050565b5f8060408385031215614b0b575f80fd5b823567ffffffffffffffff811115614b21575f80fd5b830160a08186031215614b32575f80fd5b9150614b40602084016149b6565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614b84604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614b9f575f80fd5b614ba8866149b6565b9450614bb787602088016149a0565b93506080860135925060a086013567ffffffffffffffff811115614bd9575f80fd5b614be5888289016149cc565b969995985093965092949392505050565b5f805f8060808587031215614c09575f80fd5b614c12856149b6565b9350614c20602086016149b6565b9250614c2e60408601614a9f565b9150614c3c60608601614a9f565b905092959194509250565b5f5b83811015614c61578181015183820152602001614c49565b50505f910152565b5f8151808452614c80816020860160208601614c47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120cc6020830184614c69565b803567ffffffffffffffff8116811461431a575f80fd5b5f805f805f60a08688031215614cef575f80fd5b614cf8866149b6565b9450614d0660208701614a9f565b935060408601359250614d1b60608701614cc4565b949793965091946080013592915050565b803561ffff8116811461431a575f80fd5b5f805f8060808587031215614d50575f80fd5b614d59856149b6565b9350614d67602086016149b6565b925060408501359150614c3c60608601614d2c565b5f8060408385031215614d8d575f80fd5b614d96836149b6565b9150614b4060208401614a9f565b5f60208284031215614db4575f80fd5b6120cc826149b6565b5f805f60608486031215614dcf575f80fd5b614dd8846149b6565b9250614de660208501614a9f565b9150604084013590509250925092565b5f60208284031215614e06575f80fd5b6120cc82614a9f565b5f805f805f805f805f805f806101208d8f031215614e2b575f80fd5b614e348d6149b6565b9b50614e4260208e016149b6565b9a5060408d01359950614e5760608e01614d2c565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614e7f575f80fd5b614e8f8e60c08f01358f016149cc565b909650945067ffffffffffffffff60e08e01351115614eac575f80fd5b614ebc8e60e08f01358f016149cc565b909450925067ffffffffffffffff6101008e01351115614eda575f80fd5b614eeb8e6101008f01358f016149cc565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614f1e575f80fd5b614f288d8d6149a0565b9a50614f3660608d016149b6565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614f66575f80fd5b614f768e60e08f01358f016149cc565b90975095506101008d0135811015614f8c575f80fd5b614f9d8e6101008f01358f016149cc565b90955093506101208d0135811015614fb3575f80fd5b50614fc58d6101208e01358e016149cc565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614ff0575f80fd5b614ff9856149b6565b9350615007602086016149b6565b9250604085013567ffffffffffffffff80821115615023575f80fd5b818701915087601f830112615036575f80fd5b813581811115615044575f80fd5b8860208260051b8501011115615058575f80fd5b95989497505060200194505050565b5f805f805f6080868803121561507b575f80fd5b615084866149b6565b94506020860135935061509960408701614d2c565b9250606086013567ffffffffffffffff811115614bd9575f80fd5b5f80608083850312156150c5575f80fd5b6150cf84846149a0565b9150614b40606084016149b6565b602080825282518282018190525f9190848201906040850190845b8181101561511d5783516001600160a01b0316835292840192918401916001016150f8565b50909695505050505050565b5f805f805f805f8060c0898b031215615140575f80fd5b615149896149b6565b975061515760208a016149b6565b96506040890135955061516c60608a01614d2c565b9450608089013567ffffffffffffffff80821115615188575f80fd5b6151948c838d016149cc565b909650945060a08b01359150808211156151ac575f80fd5b506151b98b828c016149cc565b999c989b5096995094979396929594505050565b5f805f606084860312156151df575f80fd5b6151e8846149b6565b92506151f660208501614a9f565b9150615204604085016149b6565b90509250925092565b5f805f6060848603121561521f575f80fd5b61522884614a9f565b9250614de6602085016149b6565b5f805f60608486031215615248575f80fd5b615228846149b6565b5f805f60a08486031215615263575f80fd5b61526d85856149a0565b925061527b606085016149b6565b9150608084013590509250925092565b5f806040838503121561529c575f80fd5b614b3283614a9f565b5f805f80608085870312156152b8575f80fd5b6152c1856149b6565b93506152cf60208601614a9f565b925060408501359150614c3c60608601614cc4565b8151815260208083015190820152604081016118aa565b5f6020828403121561530b575f80fd5b6120cc82614cc4565b838152818360208301375f910160200190815292915050565b63ffffffff61533b82614a9f565b1682526020810135602083015267ffffffffffffffff61535d60408301614cc4565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6153b8818961532d565b86606082015260e060808201525f6153d460e083018789615367565b6001600160a01b03861660a084015282810360c08401526153f6818587615367565b9a9950505050505050505050565b60808101615412828561532d565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60208284031215615465575f80fd5b8151600381106120cc575f80fd5b80151581146131c0575f80fd5b5f60208284031215615490575f80fd5b81516120cc81615473565b5f602082840312156154ab575f80fd5b81356120cc81615473565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126154f2575f80fd5b815167ffffffffffffffff8082111561550d5761550d6154b6565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715615553576155536154b6565b8160405283815286602085880101111561556b575f80fd5b611442846020830160208901614c47565b5f6020828403121561558c575f80fd5b815167ffffffffffffffff8111156155a2575f80fd5b612744848285016154e3565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f6155dd60e08301888a615367565b82810360a08401526155f0818789615367565b905082810360c0840152615605818587615367565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156118aa576118aa615616565b5f610120615664838e61532d565b8b60608401528a60808401528960a08401528060c0840152615689818401898b615367565b905082810360e084015261569e818789615367565b9050828103610100840152615605818587615367565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b898110156157ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c3603018112615748575f80fd5b8b0163ffffffff8061575983614a9f565b16855280615768888401614a9f565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181126157a1575f80fd5b01858101903567ffffffffffffffff8111156157bb575f80fd5b8036038213156157c9575f80fd5b87898601526157db8886018284615367565b9587019594505050908401906001016156e8565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a0608083015261584a60a083018486615367565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a0604084015261587f60a08401888a615367565b8187166060850152838103608085015261589a818688615367565b9b9a5050505050505050505050565b60a081016158b7828661532d565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614b8457614b84615616565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615925575f80fd5b83018035915067ffffffffffffffff82111561593f575f80fd5b6020019150368190038213156116ae575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f60608601516159a360c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e06101208401526159d4610140840182614c69565b905082810360208401526159e9818688615367565b915050612dfe604083018415159052565b5f60408284031215615a0a575f80fd5b6040516040810181811067ffffffffffffffff82111715615a2d57615a2d6154b6565b604052825181526020928301519281019290925250919050565b5f60408284031215615a57575f80fd5b6120cc83836159fa565b5f8060608385031215615a72575f80fd5b615a7c84846159fa565b9150604083015167ffffffffffffffff811115615a97575f80fd5b615aa3858286016154e3565b9150509250929050565b606081525f615abf6060830187614c69565b8281036020840152615ad2818688615367565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615afd575f80fd5b5051919050565b606081016118aa828461532d56fea264697066735822122068baa86dcd9bd8142959c16f23b905a6a20b9dbc18984656c1ecce183a4b190464736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c63430008160033608060405234801561000f575f80fd5b506040516200196d3803806200196d83398101604081905261003091610108565b338061005557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005e816100b9565b506001600160a01b03165f908152600260205260409020805460ff1916600190811790915580546001600160801b03191668056bc75e2d6310000017905560058054602f60801b6001600160801b0391909116179055610135565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610118575f80fd5b81516001600160a01b038116811461012e575f80fd5b9392505050565b61182a80620001435f395ff3fe608060405260043610610178575f3560e01c80638ca2fb08116100d1578063d350ad251161007c578063e0ad121a11610057578063e0ad121a14610607578063f2fde38b146106ba578063fd9be522146106d9575f80fd5b8063d350ad25146104d4578063da26663a146104f3578063dbbb4155146105e8575f80fd5b8063c1723a1d116100ac578063c1723a1d1461045f578063c184032714610472578063cd68b79b14610498575f80fd5b80638ca2fb08146103b55780638da5cb5b146103f357806392807f581461041c575f80fd5b80635d6d7ccb116101315780637bc3c9ab1161010c5780637bc3c9ab146102fa5780637dc438a41461033f57806388a4124c1461035e575f80fd5b80635d6d7ccb146102765780635e280f1114610295578063715018a6146102e6575f80fd5b80633161b7f6116101615780633161b7f6146101d257806336a5beba146101f157806352a7251014610257575f80fd5b806311f2c3431461017c5780632f7cb0b4146101b1575b5f80fd5b348015610187575f80fd5b5061019e61019636600461145a565b5f9392505050565b6040519081526020015b60405180910390f35b3480156101bc575f80fd5b506101d06101cb3660046114a9565b6106f8565b005b3480156101dd575f80fd5b506101d06101ec3660046114c9565b610735565b3480156101fc575f80fd5b506040805180820182525f8082526020918201528151808301835260045467ffffffffffffffff811680835263ffffffff680100000000000000009092048216928401928352845190815291511691810191909152016101a8565b348015610262575f80fd5b506101d061027136600461155b565b610901565b348015610281575f80fd5b506101d06102903660046114a9565b61095e565b3480156102a0575f80fd5b506006546102c19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a8565b3480156102f1575f80fd5b506101d0610a23565b348015610305575f80fd5b506103196103143660046115a5565b610a36565b604080519283526fffffffffffffffffffffffffffffffff9091166020830152016101a8565b34801561034a575f80fd5b506101d06103593660046115c0565b610ad0565b348015610369575f80fd5b5061037d61037836600461145a565b610bd9565b604080519485526fffffffffffffffffffffffffffffffff9384166020860152918316918401919091521660608201526080016101a8565b3480156103c0575f80fd5b506103e36103cf3660046115d6565b60026020525f908152604090205460ff1681565b60405190151581526020016101a8565b3480156103fe575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166102c1565b348015610427575f80fd5b506005546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff90911681526020016101a8565b61037d61046d36600461145a565b610bf9565b34801561047d575f80fd5b506001546fffffffffffffffffffffffffffffffff1661043e565b3480156104a3575f80fd5b5060055461043e9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b3480156104df575f80fd5b506101d06104ee3660046114a9565b610c29565b3480156104fe575f80fd5b506105a461050d3660046115ef565b60408051606080820183525f808352602080840182905292840181905263ffffffff94851681526003835283902083519182018452546fffffffffffffffffffffffffffffffff81168252700100000000000000000000000000000000810467ffffffffffffffff169282019290925278010000000000000000000000000000000000000000000000009091049092169082015290565b6040805182516fffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff16908201529181015163ffffffff16908201526060016101a8565b3480156105f3575f80fd5b506101d06106023660046115d6565b610c74565b348015610612575f80fd5b506105a4610621366004611608565b60408051606080820183525f808352602080840182905292840181905261ffff949094168452600382529282902082519384018352546fffffffffffffffffffffffffffffffff8116845267ffffffffffffffff700100000000000000000000000000000000820416918401919091527801000000000000000000000000000000000000000000000000900463ffffffff169082015290565b3480156106c5575f80fd5b506101d06106d43660046115d6565b610cc3565b3480156106e4575f80fd5b506101d06106f3366004611621565b610d26565b610700610d3c565b600580546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055565b336107545f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146107b757335f9081526002602052604090205460ff166107b7576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156108fc57368383838181106107d4576107d4611649565b6080029190910191506108f390506107ef60208301836115ef565b6108013684900384016020850161168d565b805160208083015160409384015184516060810186526fffffffffffffffffffffffffffffffff948516815267ffffffffffffffff92831681850190815263ffffffff9283168288019081529783165f908152600390955295909320925183549551965194167fffffffffffffffff000000000000000000000000000000000000000000000000909516949094177001000000000000000000000000000000009590911694909402939093177fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000009190921602179055565b506001016107b9565b505050565b610909610d3c565b73ffffffffffffffffffffffffffffffffffffffff919091165f90815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b3361097d5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146109e057335f9081526002602052604090205460ff166109e0576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610a2b610d3c565b610a345f610d8e565b565b5f808461ffff16606e1480610a5057508461ffff1661279f145b80610a6057508461ffff16614eaf145b15610a7d57610a748561ffff168585610e02565b91509150610ac8565b8461ffff16606f1480610a9557508461ffff16612794145b80610aa557508461ffff16614ea4145b15610ab957610a748561ffff168585610f5c565b610a748561ffff168585611104565b935093915050565b33610aef5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610b5257335f9081526002602052604090205460ff16610b52576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b626107ef60208301836115ef565b5f610b7360a083016080840161171c565b90505f610b8660c0840160a085016115ef565b6004805463ffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090921667ffffffffffffffff90941693909317179091555050565b5f805f80610be88787876111d7565b935093509350935093509350935093565b5f80808080610c0c565b60405180910390fd5b610c178888886111d7565b94509450945094505093509350935093565b610c31610d3c565b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610c7c610d3c565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ccb610d3c565b73ffffffffffffffffffffffffffffffffffffffff8116610d1a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610c03565b610d2381610d8e565b50565b610d2e610d3c565b610d3882826112ad565b5050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610a34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c03565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b63ffffffff8381165f90815260036020526040812060045460055492938493849268010000000000000000900490911690606490610e669070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1689611762565b610e7091906117ac565b610e7a9190611762565b82549091505f90610ead907801000000000000000000000000000000000000000000000000900463ffffffff1688611762565b83546004549192505f9167ffffffffffffffff70010000000000000000000000000000000090920482169184918691610ee791168b6117bf565b610ef191906117bf565b610efb91906117bf565b610f059190611762565b60015485549192506fffffffffffffffffffffffffffffffff90811691610f2d911683611762565b610f3791906117ac565b935493996fffffffffffffffffffffffffffffffff9094169850929650505050505050565b5f805f610f68866113af565b63ffffffff8082165f9081526003602052604081208054939450929091610fac91780100000000000000000000000000000000000000000000000090041688611762565b610fb890610c746117bf565b82549091505f90610fe790700100000000000000000000000000000000900467ffffffffffffffff1683611762565b63ffffffff808b165f908152600360205260408120805493945092909161102b9178010000000000000000000000000000000000000000000000009004168b611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661105a8b846117bf565b6110649190611762565b60015487549192505f916fffffffffffffffffffffffffffffffff9182169161108e911687611762565b61109891906117ac565b60015485549192505f916fffffffffffffffffffffffffffffffff918216916110c2911685611762565b6110cc91906117ac565b90505f6110d982846117bf565b9554959f6fffffffffffffffffffffffffffffffff9096169e50949c50505050505050505050505050565b63ffffffff8084165f908152600360205260408120805491928392839161114891780100000000000000000000000000000000000000000000000090041687611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661117787846117bf565b6111819190611762565b60015484549192506fffffffffffffffffffffffffffffffff908116916111a9911683611762565b6111b391906117ac565b925492986fffffffffffffffffffffffffffffffff90931697509195505050505050565b5f808080806111e8617530896117d2565b90508063ffffffff16606e148061120657508063ffffffff1661279f145b8061121857508063ffffffff16614eaf145b1561123257611228818888610e02565b9095509350611281565b8063ffffffff16606f148061124e57508063ffffffff16612794145b8061126057508063ffffffff16614ea4145b1561127057611228818888610f5c565b61127b818888611104565b90955093505b505060015460055493979296506fffffffffffffffffffffffffffffffff908116955090921692509050565b73ffffffffffffffffffffffffffffffffffffffff82166112fa576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114611350576040519150601f19603f3d011682016040523d82523d5f602084013e611355565b606091505b50509050806108fc576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c03565b5f806113bd617530846117d2565b90508063ffffffff16606f036113d65750606592915050565b8063ffffffff16612794036113ef575061278992915050565b8063ffffffff16614ea4036114085750614e9992915050565b6040517ff42c33dc00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c03565b803563ffffffff81168114611455575f80fd5b919050565b5f805f6060848603121561146c575f80fd5b61147584611442565b95602085013595506040909401359392505050565b80356fffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f602082840312156114b9575f80fd5b6114c28261148a565b9392505050565b5f80602083850312156114da575f80fd5b823567ffffffffffffffff808211156114f1575f80fd5b818501915085601f830112611504575f80fd5b813581811115611512575f80fd5b8660208260071b8501011115611526575f80fd5b60209290920196919550909350505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f806040838503121561156c575f80fd5b61157583611538565b915060208301358015158114611589575f80fd5b809150509250929050565b803561ffff81168114611455575f80fd5b5f805f606084860312156115b7575f80fd5b61147584611594565b5f60c082840312156115d0575f80fd5b50919050565b5f602082840312156115e6575f80fd5b6114c282611538565b5f602082840312156115ff575f80fd5b6114c282611442565b5f60208284031215611618575f80fd5b6114c282611594565b5f8060408385031215611632575f80fd5b61163b83611538565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b803567ffffffffffffffff81168114611455575f80fd5b5f6060828403121561169d575f80fd5b6040516060810181811067ffffffffffffffff821117156116e5577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040526116f18361148a565b81526116ff60208401611676565b602082015261171060408401611442565b60408201529392505050565b5f6020828403121561172c575f80fd5b6114c282611676565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761177957611779611735565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826117ba576117ba61177f565b500490565b8082018082111561177957611779611735565b5f63ffffffff808416806117e8576117e861177f565b9216919091069291505056fea2646970667358221220057b4584fe743c800fee37c9f14cc5705300ed67e417991ba4a7213c92a3bfad64736f6c6343000816003360e060405234801562000010575f80fd5b506040516200588138038062005881833981016040819052620000339162000185565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001cf565b6001600160a01b03821660805263ffffffff811660a05283833380620000d957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000e4816200011e565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b03989098169790971790965550620001fb945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811462000182575f80fd5b50565b5f805f806080858703121562000199575f80fd5b8451620001a6816200016d565b6020860151909450620001b9816200016d565b6040860151606090960151949790965092505050565b5f60208284031215620001e0575f80fd5b815163ffffffff81168114620001f4575f80fd5b9392505050565b60805160a05160c0516156426200023f5f395f8181612458015261264f01525f50505f81816107f80152818161093b015281816116c30152611daa01526156425ff3fe608060405260043610610186575f3560e01c806361d027b3116100d1578063d15b0d491161007c578063f2fde38b11610057578063f2fde38b14610528578063faaebd2114610547578063fd9be52214610580575f80fd5b8063d15b0d49146104be578063d80e9bd9146104dd578063f0f4426014610509575f80fd5b80638da5cb5b116100ac5780638da5cb5b1461044a5780639c33abf714610473578063c14c43491461049f575f80fd5b806361d027b3146103eb5780636750cd4c14610417578063715018a614610436575f80fd5b806329460b0b1161013157806343ea4fa91161010c57806343ea4fa9146103145780634d9632001461033357806354fd4d50146103c0575f80fd5b806329460b0b1461029c57806339e3f938146102bb5780634389e58f146102e7575f80fd5b80631881d94d116101615780631881d94d14610242578063200175f71461025c57806320efd7221461027d575f80fd5b806301ffc9a7146101915780630e97289b146101c5578063188183f414610216575f80fd5b3661018d57005b5f80fd5b34801561019c575f80fd5b506101b06101ab3660046141f9565b61059f565b60405190151581526020015b60405180910390f35b3480156101d0575f80fd5b506006546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b348015610221575f80fd5b50610235610230366004614285565b610683565b6040516101bc91906142bc565b34801561024d575f80fd5b505f6040516101bc91906142ef565b348015610267575f80fd5b5061027b61027636600461432e565b61078e565b005b348015610288575f80fd5b5061027b6102973660046143ad565b610939565b3480156102a7575f80fd5b5061027b6102b63660046143fe565b610aec565b3480156102c6575f80fd5b506102da6102d5366004614285565b610ccf565b6040516101bc91906144fe565b3480156102f2575f80fd5b5061030661030136600461451f565b610e6a565b6040516101bc929190614631565b34801561031f575f80fd5b506102da61032e366004614285565b610f1f565b34801561033e575f80fd5b5061038f61034d366004614285565b600460209081525f928352604080842090915290825290205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101bc565b3480156103cb575f80fd5b5060408051600381525f60208201526002918101919091526060016101bc565b3480156103f6575f80fd5b506003546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b348015610422575f80fd5b506101b0610431366004614654565b6112d0565b348015610441575f80fd5b5061027b6112da565b348015610455575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166101f1565b34801561047e575f80fd5b5061049261048d36600461466f565b6112ed565b6040516101bc91906146b7565b3480156104aa575f80fd5b5061027b6104b93660046146c9565b6113d4565b3480156104c9575f80fd5b5061027b6104d8366004614738565b611547565b3480156104e8575f80fd5b506104fc6104f736600461451f565b6115d5565b6040516101bc919061474f565b348015610514575f80fd5b5061027b610523366004614766565b611643565b348015610533575f80fd5b5061027b610542366004614766565b611657565b348015610552575f80fd5b50610572610561366004614766565b60056020525f908152604090205481565b6040519081526020016101bc565b34801561058b575f80fd5b5061027b61059a366004614781565b6116b7565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061063157507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b8061067d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080518082019091525f808252602082015263ffffffff8083165f8181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845260048352818420948452939091528120805492939092169081900361071257825463ffffffff16610714565b805b63ffffffff1684528154640100000000900473ffffffffffffffffffffffffffffffffffffffff1680610766578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16610768565b805b73ffffffffffffffffffffffffffffffffffffffff166020860152509295945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146107df576040517f885762a700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061088391906147ab565b73ffffffffffffffffffffffffffffffffffffffff16036108d0576040517fe695d04400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108db8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109a8576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610ae657368383838181106109c5576109c56147c6565b90506020028101906109d791906147f3565b90506109ee6109e96020830183614654565b611821565b6001610a006040830160208401614654565b63ffffffff1603610a4057610a3b610a1b6020830183614654565b86610a29604085018561482f565b810190610a369190614958565b611868565b610add565b6002610a526040830160208401614654565b63ffffffff1603610a8d57610a3b610a6d6020830183614654565b86610a7b604085018561482f565b810190610a889190614b11565b611914565b610a9d6040820160208301614654565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b506001016109aa565b50505050565b610af461195d565b5f5b81811015610c915736838383818110610b1157610b116147c6565b9050602002810190610b239190614b43565b905060ff610b346020830183614b75565b610b45906040810190602001614ba7565b60ff1603610b7f576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff610b8e6020830183614b75565b610b9f906060810190604001614ba7565b60ff1603610bd9576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff610bef6020830183614b75565b610bfd906020810190614bc0565b67ffffffffffffffff1603610c3e576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5c610c4e6020830183614b75565b610c5790614bd9565b6119af565b610c885f610c6d6020840184614654565b610c7a6020850185614b75565b610c8390614bd9565b611a00565b50600101610af6565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610cc3929190614c90565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a01000000000000000000009091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610dec57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dc1575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610e5957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e2e575b505050505081525050905092915050565b604080518082019091525f80825260208201526060610e8b86868686611d93565b6006546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815292945090925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610ee990849089908990600401614e2d565b5f604051808303815f87803b158015610f00575f80fd5b505af1158015610f12573d5f803e3d5ffd5b5050505094509492505050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610fce57825467ffffffffffffffff168452610fed565b67ffffffffffffffff81811614610fed5767ffffffffffffffff811684525b815468010000000000000000900460ff166110a157825468010000000000000000900460ff161561109c578260010180548060200260200160405190810160405280929190818152602001828054801561107b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611050575b50505050506080850152825468010000000000000000900460ff1660208501525b61113d565b815468010000000000000000900460ff9081161461113d578160010180548060200260200160405190810160405280929190818152602001828054801561111c57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116110f1575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff1661120a5782546901000000000000000000900460ff161561120557826002018054806020026020016040519081016040528092919081815260200182805480156111cd57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111a2575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112be565b81546901000000000000000000900460ff908116146112be578160020180548060200260200160405190810160405280929190818152602001828054801561128657602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161125b575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112c7846119af565b50505092915050565b5f61067d82611e8a565b6112e261195d565b6112eb5f611ef0565b565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161134c576113268385610683565b60405160200161133691906142bc565b60405160208183030381529060405290506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601611393576113838385610f1f565b60405160200161133691906144fe565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610ad4565b9392505050565b6113dc61195d565b5f5b8181101561151557368383838181106113f9576113f96147c6565b60609081029290920192505f916114169150830160408401614766565b73ffffffffffffffffffffffffffffffffffffffff1603611463576040517f20e9d05a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114736040820160208301614654565b63ffffffff165f036114b1576040517f49cfac4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec906114eb8385614654565b63ffffffff16815260208101919091526040015f2061150a8282614e8f565b5050506001016113de565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610cc3929190614f27565b61154f61195d565b600254811115611599576002546040517f34084fb8000000000000000000000000000000000000000000000000000000008152610ad4918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f806116246115fd6060890160408a01614766565b61160d60808a0160608b01614654565b61161a60c08b018b61482f565b9050878a8a611f64565b604080518082019091529182526020820152925050505b949350505050565b61164b61195d565b61165481612062565b50565b61165f61195d565b73ffffffffffffffffffffffffffffffffffffffff81166116ae576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b61165481611ef0565b6116c0816120d5565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174e91906147ab565b905061175b81848461213d565b6040805133815273ffffffffffffffffffffffffffffffffffffffff851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a66698839060600161092c565b73ffffffffffffffffffffffffffffffffffffffff82166117fb576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61181c73ffffffffffffffffffffffffffffffffffffffff8416838361216d565b505050565b61182a81611e8a565b611654576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610ad4565b73ffffffffffffffffffffffffffffffffffffffff8083165f90815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc8059061092c90849086908590614fb3565b61191f828483611a00565b6119298284610f1f565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161092c9392919061500f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146112eb576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ad4565b602081015160ff161580156119c95750606081015160ff16155b15611654576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff9081161480611a1b5750602081015160ff16155b15611a625760808101515115611a5d576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae1565b806020015160ff16816080015151141580611a9d57506002611a86600160ff615076565b611a90919061508f565b60ff16816020015160ff16115b15611ad4576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae181608001516121fa565b604081015160ff9081161480611afc5750604081015160ff16155b15611b825760a08101515115611b3e576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611b7d576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c59565b806040015160ff168160a0015151141580611bbd57506002611ba6600160ff615076565b611bb0919061508f565b60ff16816040015160ff16115b15611bf4576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff161580611c155750806040015160ff16816060015160ff16115b15611c4c576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c598160a001516121fa565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a0100000000000000000000959091169490940293909317835560808401518051859493611d6f93908501920190614166565b5060a08201518051611d8b916002840191602090910190614166565b505050505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314611e17576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611e24888888612292565b90925090505f80611e55611e3e60608c0160408d01614766565b611e4e60808d0160608e01614654565b858a612359565b9092509050611e6482846150d5565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff161515806113cd5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f80611f7286866124e3565b915091505f611f828b8b846124fc565b90505f611f8f8c8c610683565b9050611fa48a825f015163ffffffff16612508565b806020015173ffffffffffffffffffffffffffffffffffffffff1663709eb6648c8e8d886040518563ffffffff1660e01b8152600401611fe794939291906150e8565b602060405180830381865afa158015612002573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120269190615132565b61203090836150d5565b91505f806120408e8e868e612550565b909250905061204f82856150d5565b9e909d509b505050505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016115ca565b335f9081526005602052604090205480821115612128576040517f34084fb80000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b335f9081526005602052604090209190039055565b73ffffffffffffffffffffffffffffffffffffffff83166121625761181c8282612691565b61181c8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261181c908490612793565b5f805b825181101561181c575f838281518110612219576122196147c6565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611612288576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b91506001016121fd565b60605f805f6122a186866124e3565b90925090505f6122ca6122ba60608a0160408b01614766565b61023060808b0160608c01614654565b90505f6122da60c08a018a61482f565b905090506122f181835f015163ffffffff16612508565b60208201516123219061230a60808c0160608d01614654565b61231a60608d0160408e01614766565b8488612832565b61232b90866150d5565b94505f806123398b86612966565b909250905061234882886150d5565b909b909a5098505050505050505050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526003549192505f9182916124809173ffffffffffffffffffffffffffffffffffffffff16907f000000000000000000000000000000000000000000000000000000000000000090849087612988565b9150915061249087878484612a33565b909550935084156124d75760035473ffffffffffffffffffffffffffffffffffffffff165f90815260056020526040812080548792906124d19084906150d5565b90915550505b50505094509492505050565b6060806124f08484612aaa565b915091505b9250929050565b5f61163b848484612b90565b8082111561254c576040517fc667af3e0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b5050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526003549192505f9182916126759173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086612c04565b9150915061268587878484612a33565b94509450505050611e81565b73ffffffffffffffffffffffffffffffffffffffff82166126de576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612734576040519150601f19603f3d011682016040523d82523d5f602084013e612739565b606091505b505090508061181c576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ad4565b5f8060205f8451602086015f885af1806127b2576040513d5f823e3d81fd5b50505f513d915081156127c95780600114156127e3565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610ae6576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ad4565b6040517f717e8a420000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff87169063717e8a429061288c9088908890889088906004016150e8565b6020604051808303815f875af11580156128a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128cc9190615132565b9050801561290e5773ffffffffffffffffffffffffffffffffffffffff86165f90815260056020526040812080548392906129089084906150d5565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff88168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b5f606061297d6005612977866151d3565b85612cab565b909590945092505050565b5f6060863b8083036129ad57604080515f808252602082019092529250925050612a29565b5f805f8761ffff1667ffffffffffffffff8111156129cd576129cd614890565b6040519080825280601f01601f1916602001820160405280156129f7576020820181803683370190505b5090505f80885160208a018c8f8ff191503d925087831115612a17578792505b828152825f602083013e909450925050505b9550959350505050565b5f80831580612a43575082516020115b15612a5257505f905080611e81565b5f83806020019051810190612a679190615132565b90508515612a7757809150612aa0565b5f6002548811612a8957600254612a8b565b875b9050808211612a9a5781612a9c565b805b9350505b5094509492505050565b6060805f80612ab98686612dfe565b9150915080515f03612b0e57604080515f808252602082019092528391612b02565b604080518082019091525f815260606020820152815260200190600190039081612adb5790505b509350935050506124f5565b6040805160018082528183019092525f91816020015b604080518082019091525f815260606020820152815260200190600190039081612b245790505090506040518060400160405280600260ff16815260200183815250815f81518110612b7857612b786147c6565b60209081029190910101529196919550909350505050565b5f80612b9c8585610f1f565b90505f83515f14612bca57835f81518110612bb957612bb96147c6565b602002602001015160200151612bda565b60405180602001604052805f8152505b90505f80612be783613034565b91509150612bf884888a85856132ce565b98975050505050505050565b5f6060853b808303612c2957604080515f808252602082019092529250925050611e81565b5f805f8761ffff1667ffffffffffffffff811115612c4957612c49614890565b6040519080825280601f01601f191660200182016040528015612c73576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115612c92578792505b828152825f602083013e90999098509650505050505050565b5f60605f612cb885613486565b90505f612cc48661356c565b805160208201206060880151604089015192935090915f612ce58284610f1f565b90505f89515f14612d1357895f81518110612d0257612d026147c6565b602002602001015160200151612d23565b60405180602001604052805f8152505b90506060612d828d846040518060a001604052808963ffffffff1681526020018c81526020018a8152602001875f015167ffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525085613589565b604051919b509150612d9a908990899060200161526e565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a0015183604051612de69392919061529c565b60405180910390a15050505050505050935093915050565b6060806002831015612e3e576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b5f612e4c60028286886152f8565b612e559161531f565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161301d57805f5b86831015612faa575f612e9e60018501858a8c6152f8565b612ea791615367565b60f81c90505f819003612ee8576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b8160ff165f03612efa57809150612f36565b8160ff168160ff1614612f3657365f612f1586868c8e6152f8565b91509150612f26898986858561385b565b9099509750859450919250829150505b60018401935f90612f4c90600301868b8d6152f8565b612f559161531f565b60f01c90505f819003612f97576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101869052602401610ad4565b8060020161ffff16850194505050612e86565b828714612fe6576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b600287111561301657365f612ffd85858b8d6152f8565b9150915061300e888885858561385b565b909850965050505b505061302b565b6130288287876139ce565b93505b50509250929050565b60608082515f0361304457915091565b5f61304e84613c49565b90508060ff166001036130fe5760408051600180825281830190925290816020015b606081526020019060019003908161307057905050925083835f8151811061309a5761309a6147c6565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506130d2846003613d6b565b825f815181106130e4576130e46147c6565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561311a5761311a614890565b604051908082528060200260200182016040528015613143578160200160208202803683370190505b5091508060ff1667ffffffffffffffff81111561316257613162614890565b60405190808252806020026020018201604052801561319557816020015b60608152602001906001900390816131805790505b5092505f8060ff5b8651831015613245576001909201915f6131b78885613dea565b6002949094019390505f6131cb8986613d6b565b90508260ff1660ff036131e057809250613236565b8260ff168160ff1614613236577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f61321e8b8784613e69565b905061322c8a8a8784613fe2565b5093909301929150815b5061ffff16929092019161319d565b8183035f613254898584613e69565b905061326288888584613fe2565b5f5b8660ff168160ff1610156132c257878160ff1681518110613287576132876147c6565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613264565b50505050505050915091565b5f80866040015187602001516132e491906153ad565b90505f5b8160ff168160ff16101561347b575f886020015160ff168260ff161061333c5760a089015160208a015161331c9084615076565b60ff168151811061332f5761332f6147c6565b602002602001015161335e565b88608001518260ff1681518110613355576133556147c6565b60200260200101515b60408051602081019091525f808252919250905b86518110156133ca578360ff16878281518110613391576133916147c6565b602002602001015160ff16036133c2578781815181106133b3576133b36147c6565b602002602001015191506133ca565b600101613372565b5089516040517f30bb3aac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416916330bb3aac91613423918d918d9087906004016153c6565b602060405180830381865afa15801561343e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134629190615132565b61346c90866150d5565b945050508060010190506132e8565b505095945050505050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001613556929190615410565b5f60605f8061359785613034565b915091505f876040015188602001516135b091906153ad565b90508060ff1667ffffffffffffffff8111156135ce576135ce614890565b6040519080825280602002602001820160405280156135f7578160200160208202803683370190505b5093505f5b8160ff168160ff161015610f12575f896020015160ff168260ff16106136505760a08a015160208b01516136309084615076565b60ff1681518110613643576136436147c6565b6020026020010151613672565b89608001518260ff1681518110613669576136696147c6565b60200260200101515b60408051602081019091525f808252919250905b85518110156136de578360ff168682815181106136a5576136a56147c6565b602002602001015160ff16036136d6578681815181106136c7576136c76147c6565b602002602001015191506136de565b600101613686565b506040517f95d376d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906395d376d790613733908d908590600401615435565b6020604051808303815f875af115801561374f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137739190615132565b878460ff1681518110613788576137886147c6565b6020026020010181815250505f878460ff16815181106137aa576137aa6147c6565b6020026020010151111561385157868360ff16815181106137cd576137cd6147c6565b60200260200101518c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461381f91906150d5565b92505081905550868360ff168151811061383b5761383b6147c6565b60200260200101518861384e91906150d5565b97505b50506001016135fc565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8616016138f5578651156138b8578684846040516020016138a4939291906154b2565b6040516020818303038152906040526138ee565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b96506139c3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff86160161398c5785511561394f5785848460405160200161393b939291906154b2565b604051602081830303815290604052613985565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b95506139c3565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff86166004820152602401610ad4565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff851601613af35760228214613a35576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613a55613a476022600286886152f8565b613a50916154d8565b61410d565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b1660248201529091506034016040516020818303038152906040529150506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff851601613c1157604282111580613b2e5750606282115b15613b65576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613b77613a476022600286886152f8565b90505f613b8b613a476042602287896152f8565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613bbe866042818a6152f8565b613bc7916154d8565b60405160086020938403029190911c9250613bf8916001916011918391889183916031916002918b918b9101615514565b60405160208183030381529060405293505050506113cd565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff85166004820152602401610ad4565b5f80805b8351821015613d27576001909101905f613c678584613dea565b905060028301925060028161ffff161015613cb1576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b5f613cbc8685613d6b565b90508060ff1660ff03613cfb576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b8316613d185760019485019460ff82161b831792505b5061ffff169190910190613c4d565b83518214613d64576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101839052602401610ad4565b5050919050565b5f613d778260016150d5565b83511015613de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401610ad4565b50016001015190565b5f613df68260026150d5565b83511015613e60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606401610ad4565b50016002015190565b606081613e7781601f6150d5565b1015613edf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ad4565b613ee982846150d5565b84511015613f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ad4565b606082158015613f715760405191505f825260208201604052613fd9565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613faa578051835260209283019201613f92565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff0361401f576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61402b8360016153ad565b90505f5b8451811015611d8b575f85828151811061404b5761404b6147c6565b602002602001015190508060ff168360ff16036140c057868281518110614074576140746147c6565b60200260200101518460405160200161408e92919061526e565b6040516020818303038152906040528783815181106140af576140af6147c6565b602002602001018190525050611d8b565b8060ff165f0361410457828683815181106140dd576140dd6147c6565b602002602001019060ff16908160ff1681525050838783815181106140af576140af6147c6565b5060010161402f565b5f6fffffffffffffffffffffffffffffffff821115614162576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526080600482015260248101839052604401610ad4565b5090565b828054828255905f5260205f209081019282156141de579160200282015b828111156141de57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614184565b506141629291505b80821115614162575f81556001016141e6565b5f60208284031215614209575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113cd575f80fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611654575f80fd5b803561426481614238565b919050565b63ffffffff81168114611654575f80fd5b803561426481614269565b5f8060408385031215614296575f80fd5b82356142a181614238565b915060208301356142b181614269565b809150509250929050565b815163ffffffff16815260208083015173ffffffffffffffffffffffffffffffffffffffff16908201526040810161067d565b6020810160038310614328577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f805f60608486031215614340575f80fd5b833561434b81614238565b9250602084013561435b81614238565b929592945050506040919091013590565b5f8083601f84011261437c575f80fd5b50813567ffffffffffffffff811115614393575f80fd5b6020830191508360208260051b85010111156124f5575f80fd5b5f805f604084860312156143bf575f80fd5b83356143ca81614238565b9250602084013567ffffffffffffffff8111156143e5575f80fd5b6143f18682870161436c565b9497909650939450505050565b5f806020838503121561440f575f80fd5b823567ffffffffffffffff811115614425575f80fd5b6144318582860161436c565b90969095509350505050565b5f815180845260208085019450602084015f5b8381101561448257815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614450565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c060808501526144dc60c085018261443d565b905060a083015184820360a08601526144f5828261443d565b95945050505050565b602081525f6113cd602083018461448d565b80358015158114614264575f80fd5b5f805f8060608587031215614532575f80fd5b843567ffffffffffffffff80821115614549575f80fd5b9086019060e0828903121561455c575f80fd5b90945060208601359080821115614571575f80fd5b818701915087601f830112614584575f80fd5b813581811115614592575f80fd5b8860208285010111156145a3575f80fd5b6020830195508094505050506145bb60408601614510565b905092959194509250565b5f5b838110156145e05781810151838201526020016145c8565b50505f910152565b5f81518084526145ff8160208601602086016145c6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f61163b60608301846145e8565b5f60208284031215614664575f80fd5b81356113cd81614269565b5f805f60608486031215614681575f80fd5b833561468c81614269565b9250602084013561469c81614238565b915060408401356146ac81614269565b809150509250925092565b602081525f6113cd60208301846145e8565b5f80602083850312156146da575f80fd5b823567ffffffffffffffff808211156146f1575f80fd5b818501915085601f830112614704575f80fd5b813581811115614712575f80fd5b866020606083028501011115614726575f80fd5b60209290920196919550909350505050565b5f60208284031215614748575f80fd5b5035919050565b81518152602080830151908201526040810161067d565b5f60208284031215614776575f80fd5b81356113cd81614238565b5f8060408385031215614792575f80fd5b823561479d81614238565b946020939093013593505050565b5f602082840312156147bb575f80fd5b81516113cd81614238565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614825575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614862575f80fd5b83018035915067ffffffffffffffff82111561487c575f80fd5b6020019150368190038213156124f5575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156148e0576148e0614890565b60405290565b60405160e0810167ffffffffffffffff811182821017156148e0576148e0614890565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561495057614950614890565b604052919050565b5f60408284031215614968575f80fd5b6040516040810181811067ffffffffffffffff8211171561498b5761498b614890565b604052823561499981614269565b815260208301356149a981614238565b60208201529392505050565b803567ffffffffffffffff81168114614264575f80fd5b803560ff81168114614264575f80fd5b5f82601f8301126149eb575f80fd5b8135602067ffffffffffffffff821115614a0757614a07614890565b8160051b614a16828201614909565b9283528481018201928281019087851115614a2f575f80fd5b83870192505b84831015614a57578235614a4881614238565b82529183019190830190614a35565b979650505050505050565b5f60c08284031215614a72575f80fd5b614a7a6148bd565b9050614a85826149b5565b8152614a93602083016149cc565b6020820152614aa4604083016149cc565b6040820152614ab5606083016149cc565b6060820152608082013567ffffffffffffffff80821115614ad4575f80fd5b614ae0858386016149dc565b608084015260a0840135915080821115614af8575f80fd5b50614b05848285016149dc565b60a08301525092915050565b5f60208284031215614b21575f80fd5b813567ffffffffffffffff811115614b37575f80fd5b61163b84828501614a62565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614825575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614825575f80fd5b5f60208284031215614bb7575f80fd5b6113cd826149cc565b5f60208284031215614bd0575f80fd5b6113cd826149b5565b5f61067d3683614a62565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c17575f80fd5b830160208101925035905067ffffffffffffffff811115614c36575f80fd5b8060051b36038213156124f5575f80fd5b8183525f60208085019450825f5b85811015614482578135614c6881614238565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614c55565b60208082528181018390525f906040808401600586901b8501820187855b88811015614e1f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112614d0f575f80fd5b8b018035614d1c81614269565b63ffffffff16855280880135368290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41018112614d58575f80fd5b8589018890520167ffffffffffffffff614d71826149b5565b1687860152614d818882016149cc565b606060ff80831682890152614d978a85016149cc565b92506080818416818a0152614dad8386016149cc565b935060a09250818416838a0152614dc681860186614be4565b60c08b81015294509150614de1905061010089018483614c47565b925050614df081840184614be4565b93509050838783030160e0880152614e09828483614c47565b978a019796505050928701925050600101614cae565b509098975050505050505050565b604081525f614e3f60408301866145e8565b8281036020840152838152838560208301375f6020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b8135614e9a81614269565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135614eda81614238565b77ffffffffffffffffffffffffffffffffffffffff000000008160201b16837fffffffffffffffff0000000000000000000000000000000000000000000000008416171784555050505050565b60208082528181018390525f90604080840186845b87811015614fa6578135614f4f81614269565b63ffffffff90811684528286013590614f6782614269565b168386015281840135614f7981614238565b73ffffffffffffffffffffffffffffffffffffffff16838501526060928301929190910190600101614f3c565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526080810161163b6040830184805163ffffffff16825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6144f5606083018461448d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561067d5761067d615049565b5f60ff8316806150c6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b8082018082111561067d5761067d615049565b63ffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201525f61512860808301846145e8565b9695505050505050565b5f60208284031215615142575f80fd5b5051919050565b5f82601f830112615158575f80fd5b813567ffffffffffffffff81111561517257615172614890565b6151a360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614909565b8181528460208386010111156151b7575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e082360312156151e3575f80fd5b6151eb6148e6565b6151f4836149b5565b81526152026020840161427a565b602082015261521360408401614259565b60408201526152246060840161427a565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff811115615256575f80fd5b61526236828601615149565b60c08301525092915050565b5f835161527f8184602088016145c6565b8351908301906152938183602088016145c6565b01949350505050565b606081525f6152ae606083018661443d565b602083820360208501526152c2828761443d565b8481036040860152855180825260208088019450909101905f5b81811015614e1f578451835293830193918301916001016152dc565b5f8085851115615306575f80fd5b83861115615312575f80fd5b5050820193919092039150565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561535f5780818660020360031b1b83161692505b505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561535f5760019490940360031b84901b1690921692915050565b60ff818116838216019081111561067d5761067d615049565b63ffffffff8516815267ffffffffffffffff8416602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201525f61512860808301846145e8565b8281525f82516154278160208501602087016145c6565b919091016020019392505050565b6040815263ffffffff83511660408201525f602084015160a0606084015261546060e08401826145e8565b90506040850151608084015267ffffffffffffffff60608601511660a084015273ffffffffffffffffffffffffffffffffffffffff60808601511660c084015282810360208401526144f581856145e8565b5f84516154c38184602089016145c6565b8201838582375f930192835250909392505050565b8035602083101561067d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b166017840152506155f4601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea264697066735822122007106a9f1a4ad0c76a6c3862b682c6be555db12b22a4209a408302fac9b0046164736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002b7c38038062002b7c833981016040819052620000339162000139565b8080816001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000072573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000098919062000168565b3380620000be57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c981620000ea565b506001600160a01b0390911660805263ffffffff1660a052506200018d9050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156200014a575f80fd5b81516001600160a01b038116811462000161575f80fd5b9392505050565b5f6020828403121562000179575f80fd5b815163ffffffff8116811462000161575f80fd5b60805160a0516129c6620001b65f395f61036301525f818161048301526104e701526129c65ff3fe608060405234801561000f575f80fd5b5060043610610115575f3560e01c806343ea4fa9116100ad5780638da5cb5b1161007d578063c40ff83511610063578063c40ff835146102b6578063e084d952146102c9578063f2fde38b146102dc575f80fd5b80638da5cb5b1461026f5780639c33abf714610296575f80fd5b806343ea4fa91461022257806354fd4d50146102355780636750cd4c14610254578063715018a614610267575f80fd5b806320efd722116100e857806320efd7221461017857806329460b0b1461018b57806339e3f9381461019e5780633c782a52146101be575f80fd5b806301ffc9a7146101195780630223536e146101415780630894edf1146101565780631881d94d14610169575b5f80fd5b61012c610127366004611bf2565b6102ef565b60405190151581526020015b60405180910390f35b61015461014f366004611c92565b61034a565b005b610154610164366004611ceb565b61035c565b60016040516101389190611d33565b610154610186366004611dd6565b6104e5565b610154610199366004611e25565b610645565b6101b16101ac366004611e77565b610828565b6040516101389190611f69565b6102026101cc366004611f7b565b600260209081525f938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff909116602083015201610138565b6101b1610230366004611e77565b6109c3565b60408051600381525f6020820152600291810191909152606001610138565b61012c610262366004611fad565b610d74565b610154610d7e565b5f5460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610138565b6102a96102a4366004611fc6565b610d91565b6040516101389190611ffd565b6101546102c4366004612067565b610e31565b61012c6102d7366004612283565b610e41565b6101546102ea3660046122cd565b610e55565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0ab7be9f000000000000000000000000000000000000000000000000000000001480610344575061034482610eb8565b92915050565b61035684848484610f4e565b50505050565b61038783837f0000000000000000000000000000000000000000000000000000000000000000611060565b5f610392848461112e565b90505f61039f858561113f565b90505f6103ac83836109c3565b90506103d08187876040516103c29291906122e6565b604051809103902086611161565b5f60405180606001604052808463ffffffff1681526020016103f2898961130a565b81526020016104018989611322565b67ffffffffffffffff908116909152604080517fa825d747000000000000000000000000000000000000000000000000000000008152835163ffffffff1660048201526020840151602482015290830151909116604482015273ffffffffffffffffffffffffffffffffffffffff8681166064830152608482018890529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b1580156104c6575f80fd5b505af11580156104d8573d5f803e3d5ffd5b5050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610554576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156103565736838383818110610571576105716122f5565b90506020028101906105839190612322565b905061059a6105956020830183611fad565b611344565b60026105ac6040830160208401611fad565b63ffffffff16036105ec576105e76105c76020830183611fad565b866105d5604085018561235e565b8101906105e291906123bf565b61138b565b61063c565b6105fc6040820160208301611fad565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610556565b61064d6113e1565b5f5b818110156107ea573683838381811061066a5761066a6122f5565b905060200281019061067c91906123f1565b905060ff61068d6020830183612423565b61069e906040810190602001612455565b60ff16036106d8576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6106e76020830183612423565b6106f8906060810190604001612455565b60ff1603610732576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6107486020830183612423565b61075690602081019061246e565b67ffffffffffffffff1603610797576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b56107a76020830183612423565b6107b090612487565b611433565b6107e15f6107c66020840184611fad565b6107d36020850185612423565b6107dc90612487565b611484565b5060010161064f565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b560828260405161081c92919061253c565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561094557602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161091a575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156109b257602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610987575b505050505081525050905092915050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610a7257825467ffffffffffffffff168452610a91565b67ffffffffffffffff81811614610a915767ffffffffffffffff811684525b815468010000000000000000900460ff16610b4557825468010000000000000000900460ff1615610b405782600101805480602002602001604051908101604052809291908181526020018280548015610b1f57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610af4575b50505050506080850152825468010000000000000000900460ff1660208501525b610be1565b815468010000000000000000900460ff90811614610be15781600101805480602002602001604051908101604052809291908181526020018280548015610bc057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b95575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610cae5782546901000000000000000000900460ff1615610ca95782600201805480602002602001604051908101604052809291908181526020018280548015610c7157602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c46575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d62565b81546901000000000000000000900460ff90811614610d625781600201805480602002602001604051908101604052809291908181526020018280548015610d2a57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610cff575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d6b84611433565b50505092915050565b5f61034482611817565b610d866113e1565b610d8f5f61187d565b565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601610df057610dca83856109c3565b604051602001610dda9190611f69565b6040516020818303038152906040529050610e2a565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610633565b9392505050565b610e3c838383611060565b505050565b5f610e4d8484846118f1565b949350505050565b610e5d6113e1565b73ffffffffffffffffffffffffffffffffffffffff8116610eac576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610633565b610eb58161187d565b50565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061034457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610344565b6040805180820182526001815267ffffffffffffffff8316602082015290516002905f90610f7f90889088906122e6565b604080519182900390912082526020808301939093529081015f9081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916110529187908790869088906126d6565b60405180910390a150505050565b6051821461109a576040517fc9bf37b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016110a684846119f1565b60ff16146110e0576040517f3a9ae7b900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff166110f18484611a12565b63ffffffff1614610e3c576040517f42d2c97e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e2a61113c8484611a21565b90565b5f61114e600d60098486612759565b61115791612780565b60e01c9392505050565b61116c8383836118f1565b6111a2576040517f4c3118d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611257575f5b836020015160ff168160ff161015611255575f83815260026020908152604080832085845290915281206080860151805191929160ff85169081106111f8576111f86122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001690556001016111b1565b505b604083015160ff1615610e3c575f5b836040015160ff168160ff161015610356575f838152600260209081526040808320858452909152812060a0860151805191929160ff85169081106112ad576112ad6122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611266565b5f611319602d600d8486612759565b610e2a916127c8565b5f611331600960018486612759565b61133a91612804565b60c01c9392505050565b61134d81611817565b610eb5576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610633565b611396828483611484565b6113a082846109c3565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516113d49392919061284a565b60405180910390a1505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610d8f576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610633565b602081015160ff1615801561144d5750606081015160ff16155b15610eb5576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff908116148061149f5750602081015160ff16155b156114e657608081015151156114e1576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611565565b806020015160ff168160800151511415806115215750600261150a600160ff6128b1565b61151491906128ca565b60ff16816020015160ff16115b15611558576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115658160800151611a30565b604081015160ff90811614806115805750604081015160ff16155b156116065760a081015151156115c2576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611601576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd565b806040015160ff168160a00151511415806116415750600261162a600160ff6128b1565b61163491906128ca565b60ff16816040015160ff16115b15611678576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806116995750806040015160ff16816060015160ff16115b156116d0576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd8160a00151611a30565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a01000000000000000000009590911694909402939093178355608084015180518594936117f393908501920190611b56565b5060a0820151805161180f916002840191602090910190611b56565b505050505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff16151580610e2a5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60208301515f9060ff161561196f575f5b846020015160ff168160ff1610156119585761194385608001518260ff1681518110611930576119306122f5565b60200260200101518585885f0151611ac8565b611950575f915050610e2a565b600101611902565b50836040015160ff165f0361196f57506001610e2a565b60608401515f5b856040015160ff168160ff1610156119e6576119b78660a001518260ff16815181106119a4576119a46122f5565b60200260200101518686895f0151611ac8565b156119de57816119c681612910565b9250508160ff165f036119de57600192505050610e2a565b600101611976565b505f95945050505050565b5f6119ff6001828486612759565b611a089161294a565b60f81c9392505050565b5f61114e6031602d8486612759565b5f611319605160318486612759565b5f805b8251811015610e3c575f838281518110611a4f57611a4f6122f5565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611611abe576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101611a33565b5f838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff16938301939093529091611b4c57508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b828054828255905f5260205f20908101928215611bce579160200282015b82811115611bce57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190611b74565b50611bda929150611bde565b5090565b5b80821115611bda575f8155600101611bdf565b5f60208284031215611c02575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e2a575f80fd5b5f8083601f840112611c41575f80fd5b50813567ffffffffffffffff811115611c58575f80fd5b602083019150836020828501011115611c6f575f80fd5b9250929050565b803567ffffffffffffffff81168114611c8d575f80fd5b919050565b5f805f8060608587031215611ca5575f80fd5b843567ffffffffffffffff811115611cbb575f80fd5b611cc787828801611c31565b90955093505060208501359150611ce060408601611c76565b905092959194509250565b5f805f60408486031215611cfd575f80fd5b833567ffffffffffffffff811115611d13575f80fd5b611d1f86828701611c31565b909790965060209590950135949350505050565b6020810160038310611d6c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b803573ffffffffffffffffffffffffffffffffffffffff81168114611c8d575f80fd5b5f8083601f840112611da5575f80fd5b50813567ffffffffffffffff811115611dbc575f80fd5b6020830191508360208260051b8501011115611c6f575f80fd5b5f805f60408486031215611de8575f80fd5b611df184611d72565b9250602084013567ffffffffffffffff811115611e0c575f80fd5b611e1886828701611d95565b9497909650939450505050565b5f8060208385031215611e36575f80fd5b823567ffffffffffffffff811115611e4c575f80fd5b611e5885828601611d95565b90969095509350505050565b803563ffffffff81168114611c8d575f80fd5b5f8060408385031215611e88575f80fd5b611e9183611d72565b9150611e9f60208401611e64565b90509250929050565b5f815180845260208085019450602084015f5b83811015611eed57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611ebb565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152611f4760c0850182611ea8565b905060a083015184820360a0860152611f608282611ea8565b95945050505050565b602081525f610e2a6020830184611ef8565b5f805f60608486031215611f8d575f80fd5b8335925060208401359150611fa460408501611d72565b90509250925092565b5f60208284031215611fbd575f80fd5b610e2a82611e64565b5f805f60608486031215611fd8575f80fd5b611fe184611e64565b9250611fef60208501611d72565b9150611fa460408501611e64565b5f602080835283518060208501525f5b818110156120295785810183015185820160400152820161200d565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f805f60408486031215612079575f80fd5b833567ffffffffffffffff81111561208f575f80fd5b61209b86828701611c31565b9094509250611fa4905060208501611e64565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156120fe576120fe6120ae565b60405290565b803560ff81168114611c8d575f80fd5b5f82601f830112612123575f80fd5b8135602067ffffffffffffffff80831115612140576121406120ae565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715612183576121836120ae565b60405293845260208187018101949081019250878511156121a2575f80fd5b6020870191505b848210156121c9576121ba82611d72565b835291830191908301906121a9565b979650505050505050565b5f60c082840312156121e4575f80fd5b6121ec6120db565b90506121f782611c76565b815261220560208301612104565b602082015261221660408301612104565b604082015261222760608301612104565b6060820152608082013567ffffffffffffffff80821115612246575f80fd5b61225285838601612114565b608084015260a084013591508082111561226a575f80fd5b5061227784828501612114565b60a08301525092915050565b5f805f60608486031215612295575f80fd5b833567ffffffffffffffff8111156122ab575f80fd5b6122b7868287016121d4565b9660208601359650604090950135949350505050565b5f602082840312156122dd575f80fd5b610e2a82611d72565b818382375f9101908152919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112612354575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612391575f80fd5b83018035915067ffffffffffffffff8211156123ab575f80fd5b602001915036819003821315611c6f575f80fd5b5f602082840312156123cf575f80fd5b813567ffffffffffffffff8111156123e5575f80fd5b610e4d848285016121d4565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612354575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612354575f80fd5b5f60208284031215612465575f80fd5b610e2a82612104565b5f6020828403121561247e575f80fd5b610e2a82611c76565b5f61034436836121d4565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124c5575f80fd5b830160208101925035905067ffffffffffffffff8111156124e4575f80fd5b8060051b3603821315611c6f575f80fd5b8183525f60208085019450825f5b85811015611eed5773ffffffffffffffffffffffffffffffffffffffff61252983611d72565b1687529582019590820190600101612503565b60208082528181018390525f906040808401600586901b8501820187855b888110156126c8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c36030181126125bb575f80fd5b8b0163ffffffff6125cb82611e64565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612601575f80fd5b8589018890520167ffffffffffffffff61261a82611c76565b168786015261262a888201612104565b606060ff808316828901526126408a8501612104565b92506080818416818a0152612656838601612104565b935060a09250818416838a015261266f81860186612492565b60c08b8101529450915061268a9050610100890184836124f5565b92505061269981840184612492565b93509050838783030160e08801526126b28284836124f5565b978a01979650505092870192505060010161255a565b509098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a08301375f60a085830101525f60a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b5f8085851115612767575f80fd5b83861115612773575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156127c05780818660040360031b1b83161692505b505092915050565b80356020831015610344577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156127c05760089490940360031b84901b1690921692915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f611f606060830184611ef8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561034457610344612884565b5f60ff831680612901577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b5f60ff82168061292257612922612884565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156127c05760019490940360031b84901b169092169291505056fea264697066735822122049ae6e8c1120ac3b04c6e78fb5426f5903144b4cb03d43aa8492006a0cbef95864736f6c6343000816003360e060405234801562000010575f80fd5b5060405162005cb238038062005cb2833981016040819052620000339162000170565b82836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000071573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000979190620001ba565b3380620000bd57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c88162000109565b506001600160a01b0391821660805263ffffffff1660a05260c092909252600655600280546001600160a01b031916939091169290921790915550620001e6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016d575f80fd5b50565b5f805f806080858703121562000184575f80fd5b8451620001918162000158565b6020860151909450620001a48162000158565b6040860151606090960151949790965092505050565b5f60208284031215620001cb575f80fd5b815163ffffffff81168114620001df575f80fd5b9392505050565b60805160a05160c051615a7e620002345f395f81816121c00152612ffa01525f610e0f01525f81816107510152818161089401528181610a0f01528181610ff80152611cee0152615a7e5ff3fe60806040526004361061019c575f3560e01c80637620fd01116100dc578063d15b0d4911610087578063f0f4426011610062578063f0f442601461055b578063f2fde38b1461057a578063faaebd2114610599578063fd9be522146105c4575f80fd5b8063d15b0d49146104f1578063d80e9bd914610510578063ea69d69d1461053c575f80fd5b80639c33abf7116100b75780639c33abf714610487578063ab750e75146104b3578063c85f4b4e146104d2575f80fd5b80637620fd01146103d65780638da5cb5b146104325780638eb0bf301461045b575f80fd5b806320efd7221161014757806354fd4d501161012257806354fd4d5014610359578063594924da146103845780636750cd4c146103a3578063715018a6146103c2575f80fd5b806320efd722146102d15780633c782a52146102f05780634389e58f1461032c575f80fd5b80631881d94d116101775780631881d94d1461024b5780631fb5122514610266578063200175f7146102b0575f80fd5b806301ffc9a7146101a7578063052368ca146101db5780630e97289b146101fa575f80fd5b366101a357005b5f80fd5b3480156101b2575f80fd5b506101c66101c1366004614622565b6105e3565b60405190151581526020015b60405180910390f35b3480156101e6575f80fd5b506101c66101f5366004614661565b6106c7565b348015610205575f80fd5b506002546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b348015610256575f80fd5b5060026040516101d291906146b5565b348015610271575f80fd5b506102a261028036600461474f565b600360209081525f938452604080852082529284528284209052825290205481565b6040519081526020016101d2565b3480156102bb575f80fd5b506102cf6102ca366004614791565b6106e7565b005b3480156102dc575f80fd5b506102cf6102eb366004614817565b610892565b3480156102fb575f80fd5b506102a261030a366004614868565b600460209081525f938452604080852082529284528284209052825290205481565b348015610337575f80fd5b5061034b6103463660046148dc565b6109f8565b6040516101d29291906149c9565b348015610364575f80fd5b5060408051600a81525f60208201526002918101919091526060016101d2565b34801561038f575f80fd5b506102cf61039e3660046149ec565b610d8d565b3480156103ae575f80fd5b506101c66103bd366004614a39565b61105c565b3480156103cd575f80fd5b506102cf611066565b3480156103e1575f80fd5b5061040660075460065473ffffffffffffffffffffffffffffffffffffffff90911691565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d2565b34801561043d575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610226565b348015610466575f80fd5b5061047a610475366004614a52565b611079565b6040516101d29190614b52565b348015610492575f80fd5b506104a66104a1366004614b64565b6114bd565b6040516101d29190614b9d565b3480156104be575f80fd5b506102cf6104cd3660046149ec565b61155d565b3480156104dd575f80fd5b506102cf6104ec366004614baf565b6115e6565b3480156104fc575f80fd5b506102cf61050b366004614bee565b6117cd565b34801561051b575f80fd5b5061052f61052a3660046148dc565b61185b565b6040516101d29190614c05565b348015610547575f80fd5b5061047a610556366004614a52565b6119c4565b348015610566575f80fd5b506102cf610575366004614c1c565b611b7e565b348015610585575f80fd5b506102cf610594366004614c1c565b611bf9565b3480156105a4575f80fd5b506102a26105b3366004614c1c565b60056020525f908152604090205481565b3480156105cf575f80fd5b506102cf6105de366004614c37565b611c5c565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061067557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b806106c157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f6106dc6106d486614e6e565b858585611dcc565b90505b949350505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610738576040517f96830d1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107dc9190614e79565b73ffffffffffffffffffffffffffffffffffffffff1603610829576040517fb77f504400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610834838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610901576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156109f2573683838381811061091e5761091e614e94565b90506020028101906109309190614ec1565b90506109476109426020830183614a39565b611fac565b60016109596040830160208401614a39565b63ffffffff1603610999576109946109746020830183614a39565b866109826040850185614efd565b81019061098f9190614f5e565b611ff3565b6109e9565b6109a96040820160208301614a39565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610903565b50505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610a7c576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6080860135610aad610a946060890160408a01614c1c565b73ffffffffffffffffffffffffffffffffffffffff1690565b14610ae4576040517fa4884a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80610af188888861203c565b90925090505f80610b22610b0b60608c0160408d01614c1c565b610b1b60808d0160608e01614a39565b858a6120c1565b9092509050610b318284614fbd565b9250610b4060c08b018b614efd565b604051610b4e929190614fd0565b604051809103902060035f8c6040016020810190610b6c9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f90812090610ba460808e0160608f01614a39565b63ffffffff1681526020808201929092526040015f90812091610bc9908e018e614fdf565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f20819055505f610ce36040518060e001604052808d5f016020810190610c0f9190614fdf565b67ffffffffffffffff1681526020018d6060016020810190610c319190614a39565b63ffffffff1681526020018d6040016020810190610c4f9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff1681526020018d6020016020810190610c7d9190614a39565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610ca960c08f018f614efd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505091525061224b565b6002546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610d3e9084908e908e9060040161503f565b5f604051808303815f87803b158015610d55575f80fd5b505af1158015610d67573d5f803e3d5ffd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610dc7576040517f864d08b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001610dd385856122b0565b60ff1614610e0d576040517f7952a82f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610e3e85856122d1565b63ffffffff1614610e7b576040517f3e96df1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e8685856122f3565b90505f610e938686612304565b90505f610ea08787612313565b73ffffffffffffffffffffffffffffffffffffffff84165f90815260036020908152604080832063ffffffff87168452825280832067ffffffffffffffff851684529091529020549091508514610f23576040517f660e96ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610f2e8484611079565b9050610f53818989604051610f44929190614fd0565b60405180910390208888612335565b5f60405180606001604052808563ffffffff168152602001610f758b8b6124ca565b815267ffffffffffffffff858116602092830152604080517fa825d747000000000000000000000000000000000000000000000000000000008152845163ffffffff16600482015292840151602484015283015116604482015273ffffffffffffffffffffffffffffffffffffffff8781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b15801561103b575f80fd5b505af115801561104d573d5f803e3d5ffd5b50505050505050505050505050565b5f6106c1826124e2565b61106e612560565b6110775f6125b2565b565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88811685526001845286852092855291909252939091208054929391929091168061113057825473ffffffffffffffffffffffffffffffffffffffff16611132565b805b73ffffffffffffffffffffffffffffffffffffffff168452815474010000000000000000000000000000000000000000900460ff1661122257825474010000000000000000000000000000000000000000900460ff161561121d57826001018054806020026020016040519081016040528092919081815260200182805480156111f057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111c5575b50505050506080850152825474010000000000000000000000000000000000000000900460ff1660208501525b6112d6565b815474010000000000000000000000000000000000000000900460ff908116146112d657816001018054806020026020016040519081016040528092919081815260200182805480156112a957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161127e575b50505050506080850152815474010000000000000000000000000000000000000000900460ff1660208501525b81547501000000000000000000000000000000000000000000900460ff166113d35782547501000000000000000000000000000000000000000000900460ff16156113ce578260020180548060200260200160405190810160405280929190818152602001828054801561137e57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611353575b505050505060a0850152825460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114ab565b81547501000000000000000000000000000000000000000000900460ff908116146114ab578160020180548060200260200160405190810160405280929190818152602001828054801561145b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611430575b505050505060a0850152815460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114b484612626565b50505092915050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161151c576114f68385611079565b6040516020016115069190614b52565b6040516020818303038152906040529050611556565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff831660048201526024016109e0565b9392505050565b8060045f8686604051611571929190614fd0565b604080519182900390912082526020808301939093529081015f90812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a95258916115d891879087908790879061506e565b60405180910390a150505050565b6115ee612560565b5f5b8181101561178f573683838381811061160b5761160b614e94565b905060200281019061161d91906150b1565b905060ff61162e60208301836150e3565b61163f906040810190602001615115565b60ff1603611679576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff61168860208301836150e3565b611699906060810190604001615115565b60ff16036116d3576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f16116e360208301836150e3565b6116ec90614e6e565b612626565b5f6116ff60208301836150e3565b61170d906020810190614c1c565b73ffffffffffffffffffffffffffffffffffffffff160361175a576040517f76df55a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117865f61176b6020840184614a39565b61177860208501856150e3565b61178190614e6e565b612677565b506001016115f0565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f3482826040516117c19291906151da565b60405180910390a15050565b6117d5612560565b60065481111561181f576006546040517fb79d12630000000000000000000000000000000000000000000000000000000081526109e0918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f8061187a8686612a25565b90925090505f6118906060890160408a01614c1c565b90505f6118a360808a0160608b01614a39565b90505f6118b08383611079565b90505f6118df82856118c96118c48f61540c565b612c5b565b8e8060c001906118d99190614efd565b8a612d2f565b82516040517fc8f8dcd100000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063c8f8dcd1906119379087908a906004016154a7565b602060405180830381865afa158015611952573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197691906154d5565b6119809082614fbd565b90505f806119908686858d612efb565b909250905061199f8284614fbd565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8084165f90815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff7401000000000000000000000000000000000000000087048116828501527501000000000000000000000000000000000000000000870481168287015276010000000000000000000000000000000000000000000090960490951660608601529182018054845181840281018401909552808552929360808601939092830182828015611b0057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611ad5575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015611b6d57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611b42575b505050505081525050905092915050565b611b86612560565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f90602001611850565b611c01612560565b73ffffffffffffffffffffffffffffffffffffffff8116611c50576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b611c59816125b2565b50565b335f9081526005602052604090205480821115611caf576040517fb79d126300000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016109e0565b335f908152600560209081526040808320858503905580517fe1758bd800000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169263e1758bd892600480820193918290030181865afa158015611d48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190614e79565b9050611d7981858561303c565b6040805133815273ffffffffffffffffffffffffffffffffffffffff861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a6669883906060016115d8565b60208401515f9060ff1615611e80575f5b856020015160ff168160ff161015611e6957611e5486608001518260ff1681518110611e0b57611e0b614e94565b60200260200101518686865f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b611e61575f9150506106df565b600101611ddd565b50846040015160ff165f03611e80575060016106df565b60608501515f5b866040015160ff168160ff161015611f2d57611efe8760a001518260ff1681518110611eb557611eb5614e94565b60200260200101518787875f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b15611f255781611f0d816154ec565b9250508160ff165f03611f25576001925050506106df565b600101611e87565b505f9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611f86576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa773ffffffffffffffffffffffffffffffffffffffff8416838361306c565b505050565b611fb5816124e2565b611c59576040517f0ff03e5400000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526024016109e0565b611ffe828483612677565b6120088284611079565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e14282848360405161088593929190615526565b60605f805f61204b8686612a25565b90925090505f61207461206460608a0160408b01614c1c565b61047560808b0160608c01614a39565b80519091506120939061208d60608b0160408c01614c1c565b856130f9565b93505f806120a2838b86613227565b90925090506120b18287614fbd565b909a909950975050505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526007549192505f9182916121e89173ffffffffffffffffffffffffffffffffffffffff16907f0000000000000000000000000000000000000000000000000000000000000000908490876132ed565b915091506121f887878484613398565b9095509350841561223f5760075473ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604081208054879290612239908490614fbd565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a01519551939861229a986001989197919673ffffffffffffffffffffffffffffffffffffffff169501615560565b6040516020818303038152906040529050919050565b5f6122be6001828486615625565b6122c79161564c565b60f81c9392505050565b5f6122e06031602d8486615625565b6122e991615694565b60e01c9392505050565b5f611556612301848461340f565b90565b5f6122e0600d60098486615625565b5f612322600960018486615625565b61232b916156da565b60c01c9392505050565b61234184848484611dcc565b612377576040517f28ca4b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084015160ff161561241e575f5b846020015160ff168160ff16101561241c575f84815260046020908152604080832086845290915281206080870151805191929160ff85169081106123cd576123cd614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9055806001019050612386565b505b604084015160ff16156109f2575f5b846040015160ff168160ff1610156124c3575f848152600460209081526040808320868452909152812060a0870151805191929160ff851690811061247457612474614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f905580600101905061242d565b5050505050565b5f6124d9602d600d8486615625565b61155691615720565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805474010000000000000000000000000000000000000000900460ff16151580611556575054760100000000000000000000000000000000000000000000900460ff16151592915050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611077576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016109e0565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff161580156126405750606081015160ff16155b15611c59576040517f9b5f9f7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806126925750602081015160ff16155b156126d957608081015151156126d4576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758565b806020015160ff16816080015151141580612714575060026126fd600160ff61575c565b6127079190615775565b60ff16816020015160ff16115b1561274b576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758816080015161341e565b604081015160ff90811614806127735750604081015160ff16155b156127f95760a081015151156127b5576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16156127f4576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d0565b806040015160ff168160a00151511415806128345750600261281d600160ff61575c565b6128279190615775565b60ff16816040015160ff16115b1561286b576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16158061288c5750806040015160ff16816060015160ff16115b156128c3576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d08160a0015161341e565b73ffffffffffffffffffffffffffffffffffffffff8381165f90815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097167fffffffffffffffffffffff000000000000000000000000000000000000000000909116177401000000000000000000000000000000000000000060ff96871602177fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000968616969096027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16959095177601000000000000000000000000000000000000000000009490951693909302939093178255608084015180518594612a0193850192019061458f565b5060a08201518051612a1d91600284019160209091019061458f565b505050505050565b6060806002831015612a65576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b5f612a736002828688615625565b612a7c916157bb565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8201612c4457805f5b86831015612bd1575f612ac560018501858a8c615625565b612ace9161564c565b60f81c90505f819003612b0f576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b8160ff165f03612b2157809150612b5d565b8160ff168160ff1614612b5d57365f612b3c86868c8e615625565b91509150612b4d89898685856134b6565b9099509750859450919250829150505b60018401935f90612b7390600301868b8d615625565b612b7c916157bb565b60f01c90505f819003612bbe576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016109e0565b8060020161ffff16850194505050612aad565b828714612c0d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b6002871115612c3d57365f612c2485858b8d615625565b91509150612c3588888585856134b6565b909850965050505b5050612c52565b612c4f828787613629565b93505b50509250929050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d830152605182015260710161229a565b5f805f612d3b846138a4565b915091505f89604001518a60200151612d549190615801565b90505f5b8160ff168160ff161015612eed575f8b6020015160ff168260ff1610612dac5760a08c015160208d0151612d8c908461575c565b60ff1681518110612d9f57612d9f614e94565b6020026020010151612dce565b8b608001518260ff1681518110612dc557612dc5614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015612e3a578360ff16868281518110612e0157612e01614e94565b602002602001015160ff1603612e3257868181518110612e2357612e23614e94565b60200260200101519150612e3a565b600101612de2565b506040517ffdb9b0f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063fdb9b0f190612e95908f908f908f908f90889060040161581a565b602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed491906154d5565b612ede9088614fbd565b96505050806001019050612d58565b505050509695505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526007549192505f9182916130209173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086613b3e565b9150915061303087878484613398565b94509450505050610d84565b73ffffffffffffffffffffffffffffffffffffffff831661306157611fa78282613be5565b611fa7838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611fa7908490613ce7565b6040517fc015bb7d0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff85169063c015bb7d9061314f90869086906004016154a7565b6020604051808303815f875af115801561316b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061318f91906154d5565b905080156131d15773ffffffffffffffffffffffffffffffffffffffff84165f90815260056020526040812080548392906131cb908490614fbd565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff86168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b5f6060816132376118c48661540c565b90505f61324b6132468761540c565b613d86565b905060606132768861326289840160408b01614c1c565b8561327060c08c018c614efd565b8b613da3565b604051919650915061328e908490849060200161587b565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a00151836040516132da939291906158a9565b60405180910390a1505050935093915050565b5f6060863b80830361331257604080515f80825260208201909252925092505061338e565b5f805f8761ffff1667ffffffffffffffff81111561333257613332614c61565b6040519080825280601f01601f19166020018201604052801561335c576020820181803683370190505b5090505f80885160208a018c8f8ff191503d92508783111561337c578792505b828152825f602083013e909450925050505b9550959350505050565b5f808315806133a8575082516020115b156133b757505f905080610d84565b5f838060200190518101906133cc91906154d5565b905085156133dc57809150613405565b5f60065488116133ee576006546133f0565b875b90508082116133ff5781613401565b805b9350505b5094509492505050565b5f6124d9605160318486615625565b5f805b8251811015611fa7575f83828151811061343d5761343d614e94565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116134ac576040517fc0762a5d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101613421565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161355057865115613513578684846040516020016134ff93929190615905565b604051602081830303815290604052613549565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b965061361e565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016135e7578551156135aa5785848460405160200161359693929190615905565b6040516020818303038152906040526135e0565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b955061361e565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016109e0565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff85160161374e5760228214613690576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6136b06136a2602260028688615625565b6136ab91615720565b614072565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050611556565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff85160161386c576042821115806137895750606282115b156137c0576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6137d26136a2602260028688615625565b90505f6137e66136a2604260228789615625565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613819866042818a615625565b61382291615720565b60405160086020938403029190911c9250613853916001916011918391889183916031916002918b918b910161592b565b6040516020818303038152906040529350505050611556565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016109e0565b60608082515f036138b457915091565b5f6138be846140cb565b90508060ff1660010361396e5760408051600180825281830190925290816020015b60608152602001906001900390816138e057905050925083835f8151811061390a5761390a614e94565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506139428460036141ed565b825f8151811061395457613954614e94565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561398a5761398a614c61565b6040519080825280602002602001820160405280156139b3578160200160208202803683370190505b5091508060ff1667ffffffffffffffff8111156139d2576139d2614c61565b604051908082528060200260200182016040528015613a0557816020015b60608152602001906001900390816139f05790505b5092505f8060ff5b8651831015613ab5576001909201915f613a27888561426c565b6002949094019390505f613a3b89866141ed565b90508260ff1660ff03613a5057809250613aa6565b8260ff168160ff1614613aa6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f613a8e8b87846142eb565b9050613a9c8a8a8784614464565b5093909301929150815b5061ffff169290920191613a0d565b8183035f613ac48985846142eb565b9050613ad288888584614464565b5f5b8660ff168160ff161015613b3257878160ff1681518110613af757613af7614e94565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613ad4565b50505050505050915091565b5f6060853b808303613b6357604080515f808252602082019092529250925050610d84565b5f805f8761ffff1667ffffffffffffffff811115613b8357613b83614c61565b6040519080825280601f01601f191660200182016040528015613bad576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115613bcc578792505b828152825f602083013e90999098509650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216613c32576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114613c88576040519150601f19603f3d011682016040523d82523d5f602084013e613c8d565b606091505b5050905080611fa7576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016109e0565b5f8060205f8451602086015f885af180613d06576040513d5f823e3d81fd5b50505f513d91508115613d1d578060011415613d37565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016109e0565b60608160a001518260c0015160405160200161229a929190615a23565b5f60605f80613db1856138a4565b915091505f8a604001518b60200151613dca9190615801565b90508060ff1667ffffffffffffffff811115613de857613de8614c61565b604051908082528060200260200182016040528015613e11578160200160208202803683370190505b5093505f5b8160ff168160ff161015614063575f8c6020015160ff168260ff1610613e6a5760a08d015160208e0151613e4a908461575c565b60ff1681518110613e5d57613e5d614e94565b6020026020010151613e8c565b8c608001518260ff1681518110613e8357613e83614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015613ef8578360ff16868281518110613ebf57613ebf614e94565b602002602001015160ff1603613ef057868181518110613ee157613ee1614e94565b60200260200101519150613ef8565b600101613ea0565b508173ffffffffffffffffffffffffffffffffffffffff1663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b8152600401613f3a95949392919061581a565b6020604051808303815f875af1158015613f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7a91906154d5565b878460ff1681518110613f8f57613f8f614e94565b6020026020010181815250505f878460ff1681518110613fb157613fb1614e94565b6020026020010151111561405957868360ff1681518110613fd457613fd4614e94565b602002602001015160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546140279190614fbd565b92505081905550868360ff168151811061404357614043614e94565b6020026020010151886140569190614fbd565b97505b5050600101613e16565b50505050965096945050505050565b5f6fffffffffffffffffffffffffffffffff8211156140c7576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016109e0565b5090565b5f80805b83518210156141a9576001909101905f6140e9858461426c565b905060028301925060028161ffff161015614133576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b5f61413e86856141ed565b90508060ff1660ff0361417d576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b831661419a5760019485019460ff82161b831792505b5061ffff1691909101906140cf565b835182146141e6576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018390526024016109e0565b5050919050565b5f6141f9826001614fbd565b83511015614263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e64730000000000000000000000000060448201526064016109e0565b50016001015190565b5f614278826002614fbd565b835110156142e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e647300000000000000000000000060448201526064016109e0565b50016002015190565b6060816142f981601f614fbd565b1015614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b61436b8284614fbd565b845110156143d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b6060821580156143f35760405191505f82526020820160405261445b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561442c578051835260209283019201614414565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff036144a1576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144ad836001615801565b90505f5b8451811015612a1d575f8582815181106144cd576144cd614e94565b602002602001015190508060ff168360ff1603614542578682815181106144f6576144f6614e94565b60200260200101518460405160200161451092919061587b565b60405160208183030381529060405287838151811061453157614531614e94565b602002602001018190525050612a1d565b8060ff165f03614586578286838151811061455f5761455f614e94565b602002602001019060ff16908160ff16815250508387838151811061453157614531614e94565b506001016144b1565b828054828255905f5260205f20908101928215614607579160200282015b8281111561460757825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906145ad565b506140c79291505b808211156140c7575f815560010161460f565b5f60208284031215614632575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611556575f80fd5b5f805f8060808587031215614674575f80fd5b843567ffffffffffffffff81111561468a575f80fd5b850160c0818803121561469b575f80fd5b966020860135965060408601359560600135945092505050565b60208101600383106146ee577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b73ffffffffffffffffffffffffffffffffffffffff81168114611c59575f80fd5b8035614720816146f4565b919050565b803563ffffffff81168114614720575f80fd5b803567ffffffffffffffff81168114614720575f80fd5b5f805f60608486031215614761575f80fd5b833561476c816146f4565b925061477a60208501614725565b915061478860408501614738565b90509250925092565b5f805f606084860312156147a3575f80fd5b83356147ae816146f4565b925060208401356147be816146f4565b929592945050506040919091013590565b5f8083601f8401126147df575f80fd5b50813567ffffffffffffffff8111156147f6575f80fd5b6020830191508360208260051b8501011115614810575f80fd5b9250929050565b5f805f60408486031215614829575f80fd5b8335614834816146f4565b9250602084013567ffffffffffffffff81111561484f575f80fd5b61485b868287016147cf565b9497909650939450505050565b5f805f6060848603121561487a575f80fd5b83359250602084013591506040840135614893816146f4565b809150509250925092565b5f8083601f8401126148ae575f80fd5b50813567ffffffffffffffff8111156148c5575f80fd5b602083019150836020828501011115614810575f80fd5b5f805f80606085870312156148ef575f80fd5b843567ffffffffffffffff80821115614906575f80fd5b9086019060e08289031215614919575f80fd5b9094506020860135908082111561492e575f80fd5b5061493b8782880161489e565b90945092505060408501358015158114614953575f80fd5b939692955090935050565b5f5b83811015614978578181015183820152602001614960565b50505f910152565b5f815180845261499781602086016020860161495e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f6106df6060830184614980565b5f805f80606085870312156149ff575f80fd5b843567ffffffffffffffff811115614a15575f80fd5b614a218782880161489e565b90989097506020870135966040013595509350505050565b5f60208284031215614a49575f80fd5b61155682614725565b5f8060408385031215614a63575f80fd5b8235614a6e816146f4565b9150614a7c60208401614725565b90509250929050565b5f815180845260208085019450602084015f5b83811015614aca57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614a98565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152614b3060c0850182614a85565b905060a083015184820360a0860152614b498282614a85565b95945050505050565b602081525f6115566020830184614ad5565b5f805f60608486031215614b76575f80fd5b614b7f84614725565b92506020840135614b8f816146f4565b915061478860408501614725565b602081525f6115566020830184614980565b5f8060208385031215614bc0575f80fd5b823567ffffffffffffffff811115614bd6575f80fd5b614be2858286016147cf565b90969095509350505050565b5f60208284031215614bfe575f80fd5b5035919050565b8151815260208083015190820152604081016106c1565b5f60208284031215614c2c575f80fd5b8135611556816146f4565b5f8060408385031215614c48575f80fd5b8235614c53816146f4565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b60405290565b60405160e0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614d2157614d21614c61565b604052919050565b803560ff81168114614720575f80fd5b5f82601f830112614d48575f80fd5b8135602067ffffffffffffffff821115614d6457614d64614c61565b8160051b614d73828201614cda565b9283528481018201928281019087851115614d8c575f80fd5b83870192505b84831015614db4578235614da5816146f4565b82529183019190830190614d92565b979650505050505050565b5f60c08284031215614dcf575f80fd5b614dd7614c8e565b9050614de282614715565b8152614df060208301614d29565b6020820152614e0160408301614d29565b6040820152614e1260608301614d29565b6060820152608082013567ffffffffffffffff80821115614e31575f80fd5b614e3d85838601614d39565b608084015260a0840135915080821115614e55575f80fd5b50614e6284828501614d39565b60a08301525092915050565b5f6106c13683614dbf565b5f60208284031215614e89575f80fd5b8151611556816146f4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614ef3575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f30575f80fd5b83018035915067ffffffffffffffff821115614f4a575f80fd5b602001915036819003821315614810575f80fd5b5f60208284031215614f6e575f80fd5b813567ffffffffffffffff811115614f84575f80fd5b6106df84828501614dbf565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156106c1576106c1614f90565b818382375f9101908152919050565b5f60208284031215614fef575f80fd5b61155682614738565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f6150516040830186614980565b8281036020840152615064818587614ff8565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f61509d608083018688614ff8565b604083019490945250606001529392505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614ef3575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614ef3575f80fd5b5f60208284031215615125575f80fd5b61155682614d29565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615161575f80fd5b830160208101925035905067ffffffffffffffff811115615180575f80fd5b8060051b3603821315614810575f80fd5b8183525f60208085019450825f5b85811015614aca5781356151b2816146f4565b73ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161519f565b60208082528181018390525f906040808401600586901b8501820187855b88811015615374577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112615259575f80fd5b8b0163ffffffff61526982614725565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4182360301811261529f575f80fd5b8589018890520180356152b1816146f4565b73ffffffffffffffffffffffffffffffffffffffff16858801526152d6818901614d29565b606060ff808316828901526152ec8a8501614d29565b92506080818416818a0152615302838601614d29565b935060a09250818416838a015261531b8186018661512e565b60c08b81015294509150615336905061010089018483615191565b9250506153458184018461512e565b93509050838783030160e088015261535e828483615191565b978a0197965050509287019250506001016151f8565b509098975050505050505050565b5f82601f830112615391575f80fd5b813567ffffffffffffffff8111156153ab576153ab614c61565b6153dc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614cda565b8181528460208386010111156153f0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0823603121561541c575f80fd5b615424614cb7565b61542d83614738565b815261543b60208401614725565b602082015261544c60408401614715565b604082015261545d60608401614725565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff81111561548f575f80fd5b61549b36828601615382565b60c08301525092915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6106df6040830184614980565b5f602082840312156154e5575f80fd5b5051919050565b5f60ff8216806154fe576154fe614f90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6106dc6060830184614ad5565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d84015250846031830152836051830152825161561181607185016020870161495e565b919091016071019998505050505050505050565b5f8085851115615633575f80fd5b8386111561563f575f80fd5b5050820193919092039150565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561568c5780818660010360031b1b83161692505b505092915050565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561568c5760049490940360031b84901b1690921692915050565b7fffffffffffffffff000000000000000000000000000000000000000000000000813581811691600885101561568c5760089490940360031b84901b1690921692915050565b803560208310156106c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b60ff82811682821603908111156106c1576106c1614f90565b5f60ff8316806157ac577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561568c5760029490940360031b84901b1690921692915050565b60ff81811683821601908111156106c1576106c1614f90565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f6158486080830187614980565b828103604084015261585b818688614ff8565b9050828103606084015261586f8185614980565b98975050505050505050565b5f835161588c81846020880161495e565b8351908301906158a081836020880161495e565b01949350505050565b606081525f6158bb6060830186614a85565b602083820360208501526158cf8287614a85565b8481036040860152855180825260208088019450909101905f5b81811015615374578451835293830193918301916001016158e9565b5f845161591681846020890161495e565b8201838582375f930192835250909392505050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b16601784015250615a0b601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b50602881019190915260480198975050505050505050565b8281525f8251615a3a81602085016020870161495e565b91909101602001939250505056fea2646970667358221220bea5f362b07accaf075edb98d71a1b4a7df6e2ebc2aacf15c6426cab5ad7691964736f6c63430008160033608060405234801562000010575f80fd5b5060405162003af938038062003af983398101604081905262000033916200045e565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b038581169190911790915584908490612ee090859085908216156200008d576200008b5f8362000220565b505b5f5b8551811015620000f157620000e77f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d357620000d36200050c565b60200260200101516200022060201b60201c565b506001016200008f565b505f5b81518110156200014257620001387fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d357620000d36200050c565b50600101620000f4565b505060016004908155600680546001600160a01b0319166001600160a01b038d169081179091556040805163416ecebf60e01b8152905191965063416ecebf95508083019450602093509091908290030181865afa158015620001a7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001cd919062000520565b6006805463ffffffff92909216600160a01b0263ffffffff60a01b199092169190911790555050600780546001600160a01b039094166001600160a01b0319909416939093179092555062000586915050565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156200027157505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620002be57600180546015906200029990600160a81b90046001600160401b03166200054c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b620002ca8383620002d6565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1662000379575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003303390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620002d0565b505f620002d0565b80516001600160a01b038116811462000398575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620003c1575f80fd5b815160206001600160401b0380831115620003e057620003e06200039d565b8260051b604051601f19603f830116810181811084821117156200040857620004086200039d565b604052938452602081870181019490810192508785111562000428575f80fd5b6020870191505b848210156200045357620004438262000381565b835291830191908301906200042f565b979650505050505050565b5f805f805f8060c0878903121562000474575f80fd5b6200047f8762000381565b95506200048f6020880162000381565b60408801519095506001600160401b0380821115620004ac575f80fd5b620004ba8a838b01620003b1565b9550620004ca60608a0162000381565b9450620004da60808a0162000381565b935060a0890151915080821115620004f0575f80fd5b50620004ff89828a01620003b1565b9150509295509295509295565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121562000531575f80fd5b815163ffffffff8116811462000545575f80fd5b9392505050565b5f6001600160401b038281166002600160401b031981016200057c57634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b61356580620005945f395ff3fe608060405260043610610242575f3560e01c8063724e78da11610131578063c358de0a116100ac578063cd88b9031161007c578063d2ae210411610062578063d2ae2104146107ae578063d547741f14610800578063e395eb5c1461081f575f80fd5b8063cd88b9031461077c578063cfc325701461079b575f80fd5b8063c358de0a146106ee578063c416aa511461070d578063c7b2370b1461073e578063c8f8dcd11461075d575f80fd5b806391d1485411610101578063a217fddf116100e7578063a217fddf14610690578063c015bb7d146106a3578063c2803b2c146106c2575f80fd5b806391d14854146105675780639e944965146105b6575f80fd5b8063724e78da146104f6578063741bef1a146105155780637cd44734146105415780638624ba0714610554575f80fd5b80633146646a116101c1578063475b6d9e116101915780635e280f11116101775780635e280f1114610467578063709eb664146104b8578063717e8a42146104d7575f80fd5b8063475b6d9e1461043d5780635c975abb14610450575f80fd5b80633146646a146103cd57806336568abe146103ec5780633927c0751461040b5780633d85ac331461041e575f80fd5b806316c38b3c1161021657806326e67a37116101fc57806326e67a37146103635780632de113761461038f5780632f2ff15d146103ae575f80fd5b806316c38b3c14610308578063248a9ca314610327575f80fd5b8062bf2e801461024657806301e336671461029957806301ffc9a7146102ba5780631095b6d7146102e9575b5f80fd5b348015610251575f80fd5b50600154610281907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b3480156102a4575f80fd5b506102b86102b336600461267b565b610868565b005b3480156102c5575f80fd5b506102d96102d43660046126b4565b6108a3565b6040519015158152602001610290565b3480156102f4575f80fd5b506102b861030336600461267b565b61093b565b348015610313575f80fd5b506102b86103223660046126f3565b610ac4565b348015610332575f80fd5b50610355610341366004612712565b5f9081526020819052604090206001015490565b604051908152602001610290565b34801561036e575f80fd5b5061038261037d36600461273c565b610ae8565b6040516102909190612755565b34801561039a575f80fd5b506102d96103a936600461279b565b610b6b565b3480156103b9575f80fd5b506102b86103c83660046127b4565b610c4c565b3480156103d8575f80fd5b506102b86103e7366004612823565b610c70565b3480156103f7575f80fd5b506102b86104063660046127b4565b610d33565b6102b86104193660046128c2565b610d65565b348015610429575f80fd5b506102b8610438366004612a3b565b610e53565b6102b861044b366004612b50565b611035565b34801561045b575f80fd5b5060015460ff166102d9565b348015610472575f80fd5b506006546104939073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610290565b3480156104c3575f80fd5b506103556104d2366004612bca565b611089565b3480156104e2575f80fd5b506103556104f1366004612bca565b6111e5565b348015610501575f80fd5b506102b861051036600461279b565b611365565b348015610520575f80fd5b506002546104939073ffffffffffffffffffffffffffffffffffffffff1681565b6102b861054f366004612c34565b611402565b6102b8610562366004612cf0565b6114e1565b348015610572575f80fd5b506102d96105813660046127b4565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156105c1575f80fd5b506106436105d036600461273c565b60056020525f90815260409020805460019091015467ffffffffffffffff8083169261ffff68010000000000000000820416926fffffffffffffffffffffffffffffffff6a0100000000000000000000909204821692918116917001000000000000000000000000000000009091041685565b6040805167ffffffffffffffff968716815261ffff90951660208601526fffffffffffffffffffffffffffffffff938416908501529116606083015291909116608082015260a001610290565b34801561069b575f80fd5b506103555f81565b3480156106ae575f80fd5b506103556106bd366004612d5e565b611616565b3480156106cd575f80fd5b506007546104939073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f9575f80fd5b506102b8610708366004612dad565b6117a3565b348015610718575f80fd5b5060015461049390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b348015610749575f80fd5b506102b861075836600461279b565b611851565b348015610768575f80fd5b50610355610777366004612d5e565b6118f5565b348015610787575f80fd5b506102b8610796366004612dc6565b611a56565b6102b86107a9366004612e45565b611a9f565b3480156107b9575f80fd5b506001546107e7907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610290565b34801561080b575f80fd5b506102b861081a3660046127b4565b611b7d565b34801561082a575f80fd5b506006546108539074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610290565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561089281611ba1565b61089d848484611bae565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061093557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561096581611ba1565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff166109e2576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610a4f575f80fd5b505af1158015610a61573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b5f610ace81611ba1565b8115610ae057610adc611be3565b5050565b610adc611c62565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610b5f57602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b305790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610bbe57505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610c33575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610c4057506001919050565b505f919050565b919050565b5f82815260208190526040902060010154610c6681611ba1565b61089d8383611cb9565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610c9a81611ba1565b610ca2611d89565b6007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610cfc90879087908790600401612ec6565b5f604051808303815f87803b158015610d13575f80fd5b505af1158015610d25573d5f803e3d5ffd5b5050505061089d6001600455565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610d8f81611ba1565b610d97611d89565b610db788610da58686611dcc565b610daf8787611dee565b8a8a8a611e06565b506007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610e1290879087908790600401612ec6565b5f604051808303815f87803b158015610e29575f80fd5b505af1158015610e3b573d5f803e3d5ffd5b50505050610e496001600455565b5050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610e7d81611ba1565b5f5b8251811015610ff9575f838281518110610e9b57610e9b612ee9565b6020908102919091018101516040805160a080820183528385015167ffffffffffffffff908116835260608086015161ffff9081168589019081526080808901516fffffffffffffffffffffffffffffffff908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff165f9081526005909a5296909820945185549851945188166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff9590921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090991690841617979097179290921695909517825551600191820180549351909516700100000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931693169290921717909155919091019050610e7f565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc53826040516110299190612f16565b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561105f81611ba1565b611067611d89565b611075878787878787611e06565b506110806001600455565b50505050505050565b5f8461109481610b6b565b6110ca576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110d2611f73565b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a1660208084018290528a831684860152606084018a905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f434ee01600000000000000000000000000000000000000000000000000000000815292936101009091049091169163434ee0169161119a918591908a908a90600401612fbc565b602060405180830381865afa1580156111b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d99190613079565b98975050505050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61121081611ba1565b8561121a81610b6b565b611250576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8b1660208084018290528b831684860152606084018b905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f566ef76200000000000000000000000000000000000000000000000000000000815292936101009091049091169163566ef76291611318918591908b908b90600401612fbc565b6020604051808303815f875af1158015611334573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113589190613079565b9998505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561138f81611ba1565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561142c81611ba1565b611434611d89565b6006546040517f91d20fa100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906391d20fa1908490349061149c908f908f908f908f908f908f908f908f90600401613090565b5f604051808303818589803b1580156114b3575f80fd5b5088f11580156114c5573d5f803e3d5ffd5b5050505050506114d56001600455565b50505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561150b81611ba1565b611513611d89565b6006545f9061155190602085019074010000000000000000000000000000000000000000900463ffffffff16611549828761279b565b898989611e06565b90505f61155e8234613128565b60065490915073ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08601358360208801611593818a61279b565b60808a01356115a560a08c018c61313b565b6115b260c08e018e61313b565b6040518a63ffffffff1660e01b81526004016115d497969594939291906131d6565b5f604051808303818589803b1580156115eb575f80fd5b5088f11580156115fd573d5f803e3d5ffd5b505050505050505061160f6001600455565b5050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61164181611ba1565b8461164b81610b6b565b611681576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528881166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f65003784000000000000000000000000000000000000000000000000000000008152929361010090910490911691636500378491611758918591908b908b90600401613239565b6020604051808303815f875af1158015611774573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117989190613079565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756117cd81611ba1565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561187b81611ba1565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611029565b5f8361190081610b6b565b611936576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528781166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f337c7a9e00000000000000000000000000000000000000000000000000000000815292936101009091049091169163337c7a9e91611a0d918591908a908a90600401613239565b602060405180830381865afa158015611a28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4c9190613079565b9695505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a8081611ba1565b63ffffffff84165f90815260036020526040902061160f9084846125a0565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611ac981611ba1565b611ad1611d89565b60065473ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08401353460208601611b03818861279b565b6080880135611b1560a08a018a61313b565b611b2260c08c018c61313b565b6040518a63ffffffff1660e01b8152600401611b4497969594939291906131d6565b5f604051808303818589803b158015611b5b575f80fd5b5088f1158015611b6d573d5f803e3d5ffd5b505050505050610adc6001600455565b5f82815260208190526040902060010154611b9781611ba1565b61089d8383611fb2565b611bab8133612077565b50565b73ffffffffffffffffffffffffffffffffffffffff8316611bd857611bd38282612101565b505050565b611bd3838383612203565b611beb611f73565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611c6a612271565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611c38565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015611d1657505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15611d755760018054601590611d4e907501000000000000000000000000000000000000000000900467ffffffffffffffff166132e9565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836122ad565b5060019392505050565b600260045403611dc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600455565b5f611ddb6031602d848661330f565b611de491613336565b60e01c9392505050565b5f611dff611dfc84846123a6565b90565b9392505050565b5f808367ffffffffffffffff811115611e2157611e2161294f565b604051908082528060200260200182016040528015611e4a578160200160208202803683370190505b5090505f5b84811015611f26575f868683818110611e6a57611e6a612ee9565b905060400201803603810190611e80919061337e565b90505f815f015173ffffffffffffffffffffffffffffffffffffffff16826020015187906040515f60405180830381858888f193505050503d805f8114611ee2576040519150601f19603f3d011682016040523d82523d5f602084013e611ee7565b606091505b5050905080848481518110611efe57611efe612ee9565b911515602092830291909101820152820151611f1a90866133d3565b94505050600101611e4f565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c3468888888888886604051611f6096959493929190613422565b60405180910390a1509695505050505050565b60015460ff1615611fb0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561200e57505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b1561206d5760018054601590612046907501000000000000000000000000000000000000000000900467ffffffffffffffff166134b2565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836123be565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610adc576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661214e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146121a4576040519150601f19603f3d011682016040523d82523d5f602084013e6121a9565b606091505b5050905080611bd3576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016120f8565b73ffffffffffffffffffffffffffffffffffffffff8216612250576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bd373ffffffffffffffffffffffffffffffffffffffff84168383612477565b60015460ff16611fb0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561233d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610935565b505f610935565b5f6123b560516031848661330f565b611dff916134f3565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610935565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251611bd393879390925f9283929183919082885af180612520576040513d5f823e3d81fd5b50505f513d91508115612537578060011415612551565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561089d576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016120f8565b828054828255905f5260205f2090601f01602090048101928215612634579160200282015f5b8382111561260657833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026125c6565b80156126325782816101000a81549060ff02191690556001016020815f01049283019260010302612606565b505b50612640929150612644565b5090565b5b80821115612640575f8155600101612645565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f805f6060848603121561268d575f80fd5b61269684612658565b92506126a460208501612658565b9150604084013590509250925092565b5f602082840312156126c4575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611dff575f80fd5b5f60208284031215612703575f80fd5b81358015158114611dff575f80fd5b5f60208284031215612722575f80fd5b5035919050565b803563ffffffff81168114610c47575f80fd5b5f6020828403121561274c575f80fd5b611dff82612729565b602080825282518282018190525f9190848201906040850190845b8181101561278f57835160ff1683529284019291840191600101612770565b50909695505050505050565b5f602082840312156127ab575f80fd5b611dff82612658565b5f80604083850312156127c5575f80fd5b823591506127d560208401612658565b90509250929050565b5f8083601f8401126127ee575f80fd5b50813567ffffffffffffffff811115612805575f80fd5b60208301915083602082850101111561281c575f80fd5b9250929050565b5f805f60408486031215612835575f80fd5b833567ffffffffffffffff81111561284b575f80fd5b612857868287016127de565b909790965060209590950135949350505050565b5f6060828403121561287b575f80fd5b50919050565b5f8083601f840112612891575f80fd5b50813567ffffffffffffffff8111156128a8575f80fd5b6020830191508360208260061b850101111561281c575f80fd5b5f805f805f805f60e0888a0312156128d8575f80fd5b6128e2898961286b565b9650606088013567ffffffffffffffff808211156128fe575f80fd5b61290a8b838c01612881565b909850965060808a0135955060a08a0135915080821115612929575f80fd5b506129368a828b016127de565b989b979a5095989497959660c090950135949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff8111828210171561299f5761299f61294f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156129ec576129ec61294f565b604052919050565b803567ffffffffffffffff81168114610c47575f80fd5b803561ffff81168114610c47575f80fd5b80356fffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f6020808385031215612a4c575f80fd5b823567ffffffffffffffff80821115612a63575f80fd5b818501915085601f830112612a76575f80fd5b813581811115612a8857612a8861294f565b612a96848260051b016129a5565b818152848101925060c0918202840185019188831115612ab4575f80fd5b938501935b82851015612b445780858a031215612acf575f80fd5b612ad761297c565b612ae086612729565b8152612aed8787016129f4565b878201526040612afe8188016129f4565b908201526060612b0f878201612a0b565b908201526080612b20878201612a1c565b9082015260a0612b31878201612a1c565b9082015284529384019392850192612ab9565b50979650505050505050565b5f805f805f8060e08789031215612b65575f80fd5b612b6f888861286b565b9550612b7d60608801612729565b9450612b8b60808801612658565b935060a087013567ffffffffffffffff811115612ba6575f80fd5b612bb289828a01612881565b979a969950949794969560c090950135949350505050565b5f805f805f60808688031215612bde575f80fd5b612be786612729565b9450612bf560208701612658565b935060408601359250606086013567ffffffffffffffff811115612c17575f80fd5b612c23888289016127de565b969995985093965092949392505050565b5f805f805f805f805f60e08a8c031215612c4c575f80fd5b612c558a612658565b9850612c6360208b01612658565b975060408a01359650612c7860608b01612a0b565b955060808a013567ffffffffffffffff80821115612c94575f80fd5b612ca08d838e016127de565b909750955060a08c0135915080821115612cb8575f80fd5b50612cc58c828d016127de565b9a9d999c50979a9699959894979660c00135949350505050565b5f610100828403121561287b575f80fd5b5f805f8060608587031215612d03575f80fd5b843567ffffffffffffffff80821115612d1a575f80fd5b612d2688838901612881565b9096509450602087013593506040870135915080821115612d45575f80fd5b50612d5287828801612cdf565b91505092959194509250565b5f805f60408486031215612d70575f80fd5b612d7984612658565b9250602084013567ffffffffffffffff811115612d94575f80fd5b612da0868287016127de565b9497909650939450505050565b5f60208284031215612dbd575f80fd5b611dff82612a0b565b5f805f60408486031215612dd8575f80fd5b612de184612729565b9250602084013567ffffffffffffffff80821115612dfd575f80fd5b818601915086601f830112612e10575f80fd5b813581811115612e1e575f80fd5b8760208260051b8501011115612e32575f80fd5b6020830194508093505050509250925092565b5f60208284031215612e55575f80fd5b813567ffffffffffffffff811115612e6b575f80fd5b612e7784828501612cdf565b949350505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f612ed9604083018587612e7f565b9050826020830152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f919060409081850190868401855b82811015612faf578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c09093019290850190600101612f32565b5091979650505050505050565b845173ffffffffffffffffffffffffffffffffffffffff908116825260208087015163ffffffff1690830152604080870151909116818301526060808701519083015260808087015161ffff90811682850152865467ffffffffffffffff80821660a08701529381901c90911660c085015260501c6fffffffffffffffffffffffffffffffff90811660e08501526001870154908116610100850152901c166101208201525f610160806101408401526117988184018587612e7f565b5f60208284031215613089575f80fd5b5051919050565b5f73ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525087604083015261ffff8716606083015260c060808301526130d960c083018688612e7f565b82810360a08401526130ec818587612e7f565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610935576109356130fb565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261316e575f80fd5b83018035915067ffffffffffffffff821115613188575f80fd5b60200191503681900382131561281c575f80fd5b63ffffffff6131aa82612729565b1682526020810135602083015267ffffffffffffffff6131cc604083016129f4565b1660408301525050565b6131e0818961319c565b73ffffffffffffffffffffffffffffffffffffffff8716606082015285608082015260e060a08201525f61321860e083018688612e7f565b82810360c084015261322b818587612e7f565b9a9950505050505050505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff8088511684528060208901511660208501525061ffff60408801511660408401526132d56060840187805467ffffffffffffffff808216845261ffff8260401c1660208501526fffffffffffffffffffffffffffffffff808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b806101008401526117988184018587612e7f565b5f67ffffffffffffffff808316818103613305576133056130fb565b6001019392505050565b5f808585111561331d575f80fd5b83861115613329575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156133765780818660040360031b1b83161692505b505092915050565b5f6040828403121561338e575f80fd5b6040516040810181811067ffffffffffffffff821117156133b1576133b161294f565b6040526133bd83612658565b8152602083013560208201528091505092915050565b80820180821115610935576109356130fb565b5f815180845260208085019450602084015f5b838110156134175781511515875295820195908201906001016133f9565b509495945050505050565b5f60e08201613431838a61319c565b63ffffffff8816606084015273ffffffffffffffffffffffffffffffffffffffff878116608085015260e060a085015290859052859061010084015f5b8781101561349f578261348085612658565b168252602084810135908301526040938401939091019060010161346e565b5084810360c08601526130ec81876133e6565b5f67ffffffffffffffff8216806134cb576134cb6130fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b80356020831015610935577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b169291505056fea2646970667358221220bf4067662d56dc81125eda238718adb88046662d26b0b352f03d651c8af9702b64736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b5038038062001b508339810160408190526200003391620000cf565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000080565b5063ffffffff1660a052670de0b6b3a7640000608052620000fb565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215620000e0575f80fd5b815163ffffffff81168114620000f4575f80fd5b9392505050565b60805160a051611a2c620001245f395f818161023a01526102ee01525f61083d0152611a2c5ff3fe608060405260043610610096575f3560e01c8063566ef76211610066578063715018a61161004c578063715018a6146101715780638da5cb5b14610185578063f2fde38b146101b8575f80fd5b8063566ef762146101335780636500378414610152575f80fd5b806301e33667146100a1578063337c7a9e146100c2578063434ee016146100f457806354fd4d5014610113575f80fd5b3661009d57005b5f80fd5b3480156100ac575f80fd5b506100c06100bb366004611549565b6101d7565b005b3480156100cd575f80fd5b506100e16100dc3660046115dd565b6101ef565b6040519081526020015b60405180910390f35b3480156100ff575f80fd5b506100e161010e366004611644565b610408565b34801561011e575f80fd5b506040805160018082526020820152016100eb565b34801561013e575f80fd5b506100e161014d366004611644565b61060a565b34801561015d575f80fd5b506100e161016c3660046115dd565b610620565b34801561017c575f80fd5b506100c061062d565b348015610190575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100eb565b3480156101c3575f80fd5b506100c06101d236600461168d565b610640565b6101df6106a3565b6101ea8383836106f5565b505050565b5f6101fd60208501856116ad565b67ffffffffffffffff165f0361026c576040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024015b60405180910390fd5b5f80806102a960018261028260208b018b6116ad565b61029260a08c0160808d016116ad565b6102a260808d0160608e016116f1565b8b8b610725565b919450925090505f8080806102c160208d018d61168d565b6040517f88a4124c00000000000000000000000000000000000000000000000000000000815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152871660248201526044810188905273ffffffffffffffffffffffffffffffffffffffff91909116906388a4124c90606401608060405180830381865afa158015610360573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610384919061170c565b929650909450925090506103ce846103a260408e0160208f0161175e565b8e60400160208101906103b5919061175e565b8e60400160208101906103c891906116f1565b856107b5565b97506103ee8784848f60400160208101906103e9919061175e565b6108ab565b6103f890896117ac565b9c9b505050505050505050505050565b5f61041660208501856116ad565b67ffffffffffffffff165f036104715761043660408601602087016117c5565b6040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610263565b5f806104c38161048f61048a60408b0160208c016117c5565b505f90565b61049c60208a018a6116ad565b6104ac60a08b0160808c016116ad565b6104bc60808c0160608d016116f1565b8a8a610725565b5090925090505f8080806104da60208c018c61168d565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61050560408e0160208f016117c5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff91909116600482015260608e0135602482015260448101889052606401608060405180830381865afa15801561056e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610592919061170c565b929650909450925090506105d6846105b060408d0160208e0161175e565b8d60800160208101906105c3919061175e565b8d60400160208101906103c891906116f1565b96506105f18684848e60800160208101906103e9919061175e565b6105fb90886117ac565b9b9a5050505050505050505050565b5f61061785858585610408565b95945050505050565b5f610617858585856101ef565b6106356106a3565b61063e5f610911565b565b6106486106a3565b73ffffffffffffffffffffffffffffffffffffffff8116610697576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610263565b6106a081610911565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461063e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610263565b73ffffffffffffffffffffffffffffffffffffffff831661071a576101ea8282610985565b6101ea838383610a87565b5f805f8061073686868d8d8b610af5565b805160608201516080830151919650935090915061075e9067ffffffffffffffff8a166117e8565b60208201516107779067ffffffffffffffff8c166117ac565b61078191906117ac565b92508060400151156107a757606461079a8460666117e8565b6107a491906117ff565b92505b509750975097945050505050565b5f8061ffff8616156107c757856107c9565b845b90505f6127106107dd61ffff84168a6117e8565b6107e791906117ff565b90506fffffffffffffffffffffffffffffffff8416158061081857506fffffffffffffffffffffffffffffffff8516155b156108265791506106179050565b5f88856fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000886fffffffffffffffffffffffffffffffff1661087991906117e8565b61088391906117ff565b61088d91906117ac565b905081811161089c578161089e565b805b9998505050505050505050565b5f8415610909576127108261ffff16846fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff16886108eb91906117e8565b6108f591906117ff565b6108ff91906117e8565b61061791906117ff565b949350505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166109d2576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610a28576040519150601f19603f3d011682016040523d82523d5f602084013e610a2d565b606091505b50509050806101ea576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610263565b73ffffffffffffffffffffffffffffffffffffffff8216610ad4576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101ea73ffffffffffffffffffffffffffffffffffffffff8416838361110f565b610b2a6040518060a001604052805f81526020015f81526020015f151581526020015f63ffffffff1681526020015f81525090565b5f859003610b63576040517e575ea100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80805b87831015610fbc575f368180610b7e8d8d8961119c565b9950919550935091508690507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff851601610ca6578a15610bf1576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610bfd85856111f1565b915091508b8015610c1f57505f816fffffffffffffffffffffffffffffffff16115b15610c5b576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff87166004820152602401610263565b806fffffffffffffffffffffffffffffffff168a5f01818151610c7e91906117ac565b905250610c9d6fffffffffffffffffffffffffffffffff8316896117ac565b97505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff851601610d48578a15610d0d576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f610d18848461126c565b509050806fffffffffffffffffffffffffffffffff16895f01818151610d3e91906117ac565b905250610fb39050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff851601610e75578915610daf576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610dbb85856112c1565b9250925050816fffffffffffffffffffffffffffffffff165f03610e0b576040517fa169d0e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806fffffffffffffffffffffffffffffffff168a5f01818151610e2e91906117ac565b90525060208a0180516fffffffffffffffffffffffffffffffff84169190610e579083906117ac565b90525060808a01805190610e6a82611837565b815250505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60ff851601610eab5760016040890152610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff851601610f7c578a610f11576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f805f610f1e868661134b565b925092509250806fffffffffffffffffffffffffffffffff168b5f01818151610f4791906117ac565b905250610f666fffffffffffffffffffffffffffffffff84168a6117ac565b9850610f72828961186e565b9750505050610fb3565b6040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b50505050610b67565b828814610ff8576040517f990776ea00000000000000000000000000000000000000000000000000000000815260048101849052602401610263565b83516fffffffffffffffffffffffffffffffff861610156110625783516040517e84ce0200000000000000000000000000000000000000000000000000000000815260048101919091526fffffffffffffffffffffffffffffffff86166024820152604401610263565b815f0361109b576040517fe5eb8f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8680156110ac575063ffffffff8116155b156110e3576040517f6cc33f0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81846020018181516110f591906117ac565b90525063ffffffff16606084015250909695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526101ea9084906113cc565b5f368160018401816111af888884611471565b6002929092019190506111c3888884611497565b94506001820161ffff821683016111dc81838b8d611892565b979b909a50969850505061ffff160193505050565b5f8060108314801590611205575060208314155b1561123c576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124784845f6114bb565b915060208314611257575f611263565b611263848460106114bb565b90509250929050565b5f80603083146112a8576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112b384845f6114bb565b9150611263848460106114e1565b5f8080601284148015906112d6575060228414155b1561130d576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61131885855f611471565b9250611326858560026114bb565b915060228414611336575f611342565b611342858560126114bb565b90509250925092565b5f808060148414801590611360575060248414155b15611397576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113a285855f6114bb565b92506113b0858560106114fb565b9150602484146113c0575f611342565b611342858560146114bb565b5f8060205f8451602086015f885af1806113eb576040513d5f823e3d81fd5b50505f513d9150811561140257806001141561141c565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561146b576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610263565b50505050565b5f6002820161148281848688611892565b61148b916118b9565b60f01c95945050505050565b5f8383838181106114aa576114aa611901565b919091013560f81c95945050505050565b5f601082016114cc81848688611892565b6114d59161192e565b60801c95945050505050565b5f602082016114f281848688611892565b61061791611974565b5f6004820161150c81848688611892565b611515916119b0565b60e01c95945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611544575f80fd5b919050565b5f805f6060848603121561155b575f80fd5b61156484611521565b925061157260208501611521565b9150604084013590509250925092565b5f60a08284031215611592575f80fd5b50919050565b5f8083601f8401126115a8575f80fd5b50813567ffffffffffffffff8111156115bf575f80fd5b6020830191508360208285010111156115d6575f80fd5b9250929050565b5f805f808486036101208112156115f2575f80fd5b60608112156115ff575f80fd5b508493506116108660608701611582565b925061010085013567ffffffffffffffff81111561162c575f80fd5b61163887828801611598565b95989497509550505050565b5f805f806101608587031215611658575f80fd5b6116628686611582565b93506116718660a08701611582565b925061014085013567ffffffffffffffff81111561162c575f80fd5b5f6020828403121561169d575f80fd5b6116a682611521565b9392505050565b5f602082840312156116bd575f80fd5b813567ffffffffffffffff811681146116a6575f80fd5b6fffffffffffffffffffffffffffffffff811681146106a0575f80fd5b5f60208284031215611701575f80fd5b81356116a6816116d4565b5f805f806080858703121561171f575f80fd5b845193506020850151611731816116d4565b6040860151909350611742816116d4565b6060860151909250611753816116d4565b939692955090935050565b5f6020828403121561176e575f80fd5b813561ffff811681146116a6575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156117bf576117bf61177f565b92915050565b5f602082840312156117d5575f80fd5b813563ffffffff811681146116a6575f80fd5b80820281158282048414176117bf576117bf61177f565b5f82611832577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118675761186761177f565b5060010190565b63ffffffff81811683821601908082111561188b5761188b61177f565b5092915050565b5f80858511156118a0575f80fd5b838611156118ac575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156118f95780818660020360031b1b83161692505b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156118f95760109490940360031b84901b1690921692915050565b803560208310156117bf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156118f95760049490940360031b84901b169092169291505056fea2646970667358221220ca9d45c801b5ccbb302dcb12078bab5268980f6f82de99fc1d137bac6c0848e664736f6c6343000816003360c060405234801562000010575f80fd5b5060405162004aae38038062004aae8339810160408190526200003391620004ca565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b03861617905582828686612ee05f865f5b8551811015620000d357620000c97f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000b557620000b5620005a5565b60200260200101516200027860201b60201c565b5060010162000071565b505f5b815181101562000124576200011a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000b557620000b5620005a5565b50600101620000d6565b505050505050806001600160401b03165f036200015457604051635f86e17760e01b815260040160405180910390fd5b806001600160401b0316825110156200019a5781516040516378e2c15760e11b81526001600160401b039182166004820152908216602482015260440160405180910390fd5b5f805b835181101562000229575f848281518110620001bd57620001bd620005a5565b60200260200101519050826001600160a01b0316816001600160a01b031611620001fa576040516305fa937f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600460205260409020805460ff19166001908117909155909250016200019d565b50509051600580546001600160401b0393841668010000000000000000026001600160801b0319909116939092169290921717905550505063ffffffff92831660805250501660a052620005f3565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015620002c957505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620003165760018054601590620002f190600160a81b90046001600160401b0316620005b9565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200032283836200032e565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff16620003d1575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003883390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000328565b505f62000328565b805163ffffffff81168114620003ed575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b0381168114620003ed575f80fd5b5f82601f8301126200042d575f80fd5b815160206001600160401b03808311156200044c576200044c620003f2565b8260051b604051601f19603f83011681018181108482111715620004745762000474620003f2565b604052938452602081870181019490810192508785111562000494575f80fd5b6020870191505b84821015620004bf57620004af8262000406565b835291830191908301906200049b565b979650505050505050565b5f805f805f805f60e0888a031215620004e1575f80fd5b620004ec88620003d9565b9650620004fc60208901620003d9565b60408901519096506001600160401b038082111562000519575f80fd5b620005278b838c016200041d565b96506200053760608b0162000406565b955060808a01519150808211156200054d575f80fd5b6200055b8b838c016200041d565b945060a08a01519150808216821462000572575f80fd5b60c08a01519193508082111562000587575f80fd5b50620005968a828b016200041d565b91505092959891949750929550565b634e487b7160e01b5f52603260045260245ffd5b5f6001600160401b038281166002600160401b03198101620005e957634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b60805160a05161447d620006315f395f818161090e0152818161253401526126c301525f818161084f0152818161173901526122a4015261447d5ff3fe6080604052600436106102c0575f3560e01c806395d376d711610170578063cd88b903116100d1578063e395eb5c11610087578063f42ed2ed11610062578063f42ed2ed1461096e578063fd62e75014610981578063fdb9b0f1146109a1575f80fd5b8063e395eb5c146108fd578063f010cb2314610930578063f3b4ebd01461094f575f80fd5b8063d2ae2104116100b7578063d2ae210414610886578063d547741f146108bf578063dafe0ccc146108de575f80fd5b8063cd88b9031461081f578063cf34c7681461083e575f80fd5b8063c358de0a11610126578063c5e193cd1161010c578063c5e193cd146107b4578063c7a823e0146107d3578063c7b2370b14610800575f80fd5b8063c358de0a14610764578063c416aa5114610783575f80fd5b8063a217fddf11610156578063a217fddf14610704578063aef18bf714610717578063b143044b14610745575f80fd5b806395d376d71461064e5780639e94496514610661575f80fd5b806330bb3aac116102255780635c975abb116101db578063741bef1a116101b6578063741bef1a1461058f5780638585c945146105e057806391d14854146105ff575f80fd5b80635c975abb1461052b578063724e78da14610542578063736c0d5b14610561575f80fd5b806336568abe1161020b57806336568abe146104ce57806352d3b871146104ed5780635553fb8e1461050c575f80fd5b806330bb3aac1461049057806331cb6105146104af575f80fd5b80631703a0181161027a57806326e67a371161026057806326e67a37146104265780632de11376146104525780632f2ff15d14610471575f80fd5b80631703a018146103a5578063248a9ca3146103ea575f80fd5b806301ffc9a7116102aa57806301ffc9a7146103385780631095b6d71461036757806316c38b3c14610386575f80fd5b8062bf2e80146102c457806301e3366714610317575b5f80fd5b3480156102cf575f80fd5b506001546102ff907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b348015610322575f80fd5b50610336610331366004613597565b6109c0565b005b348015610343575f80fd5b506103576103523660046135d5565b6109fb565b604051901515815260200161030e565b348015610372575f80fd5b50610336610381366004613597565b610a93565b348015610391575f80fd5b506103366103a036600461362a565b610c1d565b3480156103b0575f80fd5b506005546103d19068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161030e565b3480156103f5575f80fd5b50610418610404366004613643565b5f9081526020819052604090206001015490565b60405190815260200161030e565b348015610431575f80fd5b5061044561044036600461366d565b610c41565b60405161030e9190613686565b34801561045d575f80fd5b5061035761046c3660046136cc565b610cc4565b34801561047c575f80fd5b5061033661048b3660046136e7565b610da5565b34801561049b575f80fd5b506104186104aa366004613771565b610ef4565b3480156104ba575f80fd5b506103366104c93660046137e4565b611067565b3480156104d9575f80fd5b506103366104e83660046136e7565b6110aa565b3480156104f8575f80fd5b50610336610507366004613817565b6110dc565b348015610517575f80fd5b50610418610526366004613897565b6112a5565b348015610536575f80fd5b5060015460ff16610357565b34801561054d575f80fd5b5061033661055c3660046136cc565b611418565b34801561056c575f80fd5b5061035761057b3660046136cc565b60046020525f908152604090205460ff1681565b34801561059a575f80fd5b506002546105bb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030e565b3480156105eb575f80fd5b506103366105fa3660046138ea565b6114bd565b34801561060a575f80fd5b506103576106193660046136e7565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61041861065c366004613919565b611502565b34801561066c575f80fd5b506106c961067b36600461366d565b60066020525f908152604090205467ffffffffffffffff81169068010000000000000000810461ffff16906a010000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff909416845261ffff90921660208401526fffffffffffffffffffffffffffffffff169082015260600161030e565b34801561070f575f80fd5b506104185f81565b348015610722575f80fd5b50610357610731366004613643565b60076020525f908152604090205460ff1681565b348015610750575f80fd5b5061033661075f3660046139be565b6116d7565b34801561076f575f80fd5b5061033661077e3660046139fd565b6119db565b34801561078e575f80fd5b506001546105bb90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156107bf575f80fd5b506104186107ce366004613897565b611a89565b3480156107de575f80fd5b506107f26107ed366004613a16565b611c62565b60405161030e929190613a7e565b34801561080b575f80fd5b5061033661081a3660046136cc565b611e65565b34801561082a575f80fd5b50610336610839366004613ac9565b611f09565b348015610849575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161030e565b348015610891575f80fd5b506001546103d1907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b3480156108ca575f80fd5b506103366108d93660046136e7565b611f59565b3480156108e9575f80fd5b506103366108f8366004613597565b61206e565b348015610908575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b34801561093b575f80fd5b5061041861094a366004613b0b565b61219e565b34801561095a575f80fd5b50610336610969366004613b71565b6121d9565b61041861097c366004613bab565b61244a565b34801561098c575f80fd5b506005546103d19067ffffffffffffffff1681565b3480156109ac575f80fd5b506104186109bb366004613bab565b612603565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109ea81612790565b6109f584848461279a565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610a8d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610abd81612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16610b3a576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610ba7575f80fd5b505af1158015610bb9573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b5f610c2781612790565b8115610c3957610c356127cf565b5050565b610c3561284e565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cb857602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610c895790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610d1757505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610d8c575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610d9957506001919050565b505f919050565b919050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480610df357507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610e1d57507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b15610e6057303314610e5b576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eea565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb057610e5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6040517f94fdc372000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b6109f583836128a5565b5f83610eff81610cc4565b610f35576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a16602080840182905267ffffffffffffffff808c16858701528a8416606086015260055468010000000000000000900416608085015260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660a08601525f92835260069091529084902093517f7bfa20a9000000000000000000000000000000000000000000000000000000008152929361010090910490911691637bfa20a99161101c918591908a908a90600401613c97565b602060405180830381865afa158015611037573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105b9190613d63565b98975050505050505050565b3033146110a0576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c358282612975565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561110681612790565b5f5b82811015611266573684848381811061112357611123613d7a565b9050608002019050604051806060016040528082602001602081019061114991906138ea565b67ffffffffffffffff16815260200161116860608401604085016139fd565b61ffff1681526020016111816080840160608501613dc6565b6fffffffffffffffffffffffffffffffff16905260065f6111a5602085018561366d565b63ffffffff16815260208082019290925260409081015f20835181549385015194909201516fffffffffffffffffffffffffffffffff166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff61ffff90951668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941667ffffffffffffffff90931692909217929092179290921691909117905550600101611108565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051611298929190613ddf565b60405180910390a1505050565b5f816112b081610cc4565b6112e6576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808a16602080850182905267ffffffffffffffff808b168688015289851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517f7bfa20a9000000000000000000000000000000000000000000000000000000008152939461010090920490921692637bfa20a9926113ce928692600401613edd565b602060405180830381865afa1580156113e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140d9190613d63565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561144281612790565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146114f6576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ff81612b73565b50565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61152d81612790565b61153d60a08601608087016136cc565b61154681610cc4565b61157c576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810190915260025473ffffffffffffffffffffffffffffffffffffffff1681525f906020808201906115b6908a018a61366d565b63ffffffff1681526020016115d160808a0160608b016138ea565b67ffffffffffffffff1681526020016115f060a08a0160808b016136cc565b73ffffffffffffffffffffffffffffffffffffffff908116825260055468010000000000000000900467ffffffffffffffff166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff16604090940193909352929350610100909104169063df2b057e9083906006905f90611681908d018d61366d565b63ffffffff1663ffffffff1681526020019081526020015f2089896040518563ffffffff1660e01b81526004016116bb9493929190613c97565b6020604051808303815f875af11580156113e9573d5f803e3d5ffd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561170181612790565b5f5b828110156109f5573684848381811061171e5761171e613d7a565b90506020028101906117309190613fb2565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611766602083018361366d565b63ffffffff161461177757506119d3565b4281606001351161178857506119d3565b5f6117c0611799602084018461366d565b6117a960408501602086016136cc565b6117b66040860186613fee565b866060013561219e565b90505f6117d4826107ed6080860186613fee565b50905080611817576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a15050506119d3565b5f6118366118286040860186613fee565b6118319161404f565b612c8a565b905080156118cd575f8381526007602052604090205460ff1615611896577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab9784846040516118859291906140f7565b60405180910390a1505050506119d3565b5f83815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b5f806118df60408701602088016136cc565b73ffffffffffffffffffffffffffffffffffffffff166119026040880188613fee565b6040516119109291906141bc565b5f604051808303815f865af19150503d805f8114611949576040519150601f19603f3d011682016040523d82523d5f602084013e61194e565b606091505b5091509150816119cc578215611992575f85815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516119c39291906141cb565b60405180910390a15b5050505050505b600101611703565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a0581612790565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d906020016114b1565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de611ab481612790565b82611abe81610cc4565b611af4576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808b16602080850182905267ffffffffffffffff808c16868801528a851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517fdf2b057e00000000000000000000000000000000000000000000000000000000815293946101009092049092169263df2b057e92611bdc928692600401613edd565b6020604051808303815f875af1158015611bf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c1c9190613d63565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef84604051611c4f91815260200190565b60405180910390a1505050949350505050565b6005545f908190611c8a9068010000000000000000900467ffffffffffffffff166041614210565b8314611c9b57505f90506001611e5d565b5f611cf2866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290525f90605c01604051602081830303815290604052805190602001209050919050565b90505f805b60055468010000000000000000900467ffffffffffffffff16811015611e5257365f8888611d26856041614210565b90611d32866001614227565b611d3d906041614210565b92611d4a9392919061423a565b915091505f80611d8f8785858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612d7292505050565b5090925090505f816003811115611da857611da8613a51565b14611dc0575f60019850985050505050505050611e5d565b8573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611611e06575f60029850985050505050505050611e5d565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205460ff16611e45575f60039850985050505050505050611e5d565b5093505050600101611cf7565b5060015f9350935050505b935093915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611e8f81612790565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e0906020016114b1565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611f3381612790565b63ffffffff84165f908152600360205260409020611f529084846134be565b5050505050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480611fa757507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80611fd157507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b156120145730331461200f576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612064565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb05761200f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6109f58383612dbb565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561209881612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16612115576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f07b18bde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906307b18bde906044015f604051808303815f87803b158015612182575f80fd5b505af1158015612194573d5f803e3d5ffd5b5050505050505050565b5f85858386866040516020016121b8959493929190614261565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511612216576040517f0bbaf26300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3061222760408301602084016136cc565b73ffffffffffffffffffffffffffffffffffffffff161461229d5761225260408201602083016136cc565b6040517f1ce0bfcd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610ee1565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166122d1602083018361366d565b63ffffffff1614612324576122e9602082018261366d565b6040517f2697e1c200000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610ee1565b5f612335611799602084018461366d565b90505f612349826107ed6080860186613fee565b50905080612383576040517f15ecadee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526007602052604090205460ff16156123ce576040517f9d6a45a600000000000000000000000000000000000000000000000000000000815260048101839052602401610ee1565b5f828152600760205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556109f5907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217759061243890860186613fee565b81019061244591906136cc565b6128a5565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61247581612790565b8861247f81610cc4565b6124b5576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528c811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fbbc5a33b00000000000000000000000000000000000000000000000000000000815292936101009091049091169163bbc5a33b916125b4918591908d908d908d908d906004016142d2565b6020604051808303815f875af11580156125d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f49190613d63565b9b9a5050505050505050505050565b5f8761260e81610cc4565b612644576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528b811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fd358b30000000000000000000000000000000000000000000000000000000000815292936101009091049091169163d358b30091612743918591908c908c908c908c906004016142d2565b602060405180830381865afa15801561275e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127829190613d63565b9a9950505050505050505050565b6114ff8133612e80565b73ffffffffffffffffffffffffffffffffffffffff83166127c4576127bf8282612f05565b505050565b6127bf838383613007565b6127d7613075565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6128566130b4565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612824565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561290257505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15612961576001805460159061293a907501000000000000000000000000000000000000000000900467ffffffffffffffff16614397565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836130f0565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205481151560ff9091161515036129fb576040517f58c8d2a000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201528115156024820152604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260046020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001683151517905581612a6c57600554612a679060019067ffffffffffffffff166143bd565b612a84565b600554612a849067ffffffffffffffff1660016143e5565b60055490915067ffffffffffffffff680100000000000000009091048116908216811115612af2576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808416600483015282166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff84161790556040805173ffffffffffffffffffffffffffffffffffffffff8616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610c0f565b8067ffffffffffffffff165f03612bb6576040517f5f86e17700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff908116908216811015612c15576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808316600483015283166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a23249906020016114b1565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0223536e0000000000000000000000000000000000000000000000000000000014801590612d1f57507fffffffff0000000000000000000000000000000000000000000000000000000082167fab750e750000000000000000000000000000000000000000000000000000000014155b8015610a8d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f704316e500000000000000000000000000000000000000000000000000000000141592915050565b5f805f8351604103612da9576020840151604085015160608601515f1a612d9b888285856131e9565b955095509550505050612db4565b505081515f91506002905b9250925092565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015612e1757505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b15612e765760018054601590612e4f907501000000000000000000000000000000000000000000900467ffffffffffffffff16614406565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836132dc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c35576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216612f52576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612fa8576040519150601f19603f3d011682016040523d82523d5f602084013e612fad565b606091505b50509050806127bf576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216613054576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127bf73ffffffffffffffffffffffffffffffffffffffff84168383613395565b60015460ff16156130b2576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60015460ff166130b2576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556131803390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610a8d565b505f610a8d565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561322257505f915060039050826132d2565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613273573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166132c957505f9250600191508290506132d2565b92505f91508190505b9450945094915050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610a8d565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017815282516127bf93879390925f9283929183919082885af18061343e576040513d5f823e3d81fd5b50505f513d9150811561345557806001141561346f565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ee1565b828054828255905f5260205f2090601f01602090048101928215613552579160200282015f5b8382111561352457833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026134e4565b80156135505782816101000a81549060ff02191690556001016020815f01049283019260010302613524565b505b5061355e929150613562565b5090565b5b8082111561355e575f8155600101613563565b73ffffffffffffffffffffffffffffffffffffffff811681146114ff575f80fd5b5f805f606084860312156135a9575f80fd5b83356135b481613576565b925060208401356135c481613576565b929592945050506040919091013590565b5f602082840312156135e5575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114613614575f80fd5b9392505050565b80358015158114610da0575f80fd5b5f6020828403121561363a575f80fd5b6136148261361b565b5f60208284031215613653575f80fd5b5035919050565b803563ffffffff81168114610da0575f80fd5b5f6020828403121561367d575f80fd5b6136148261365a565b602080825282518282018190525f9190848201906040850190845b818110156136c057835160ff16835292840192918401916001016136a1565b50909695505050505050565b5f602082840312156136dc575f80fd5b813561361481613576565b5f80604083850312156136f8575f80fd5b82359150602083013561370a81613576565b809150509250929050565b803567ffffffffffffffff81168114610da0575f80fd5b5f8083601f84011261373c575f80fd5b50813567ffffffffffffffff811115613753575f80fd5b60208301915083602082850101111561376a575f80fd5b9250929050565b5f805f805f60808688031215613785575f80fd5b61378e8661365a565b945061379c60208701613715565b935060408601356137ac81613576565b9250606086013567ffffffffffffffff8111156137c7575f80fd5b6137d38882890161372c565b969995985093965092949392505050565b5f80604083850312156137f5575f80fd5b823561380081613576565b915061380e6020840161361b565b90509250929050565b5f8060208385031215613828575f80fd5b823567ffffffffffffffff8082111561383f575f80fd5b818501915085601f830112613852575f80fd5b813581811115613860575f80fd5b8660208260071b8501011115613874575f80fd5b60209290920196919550909350505050565b803561ffff81168114610da0575f80fd5b5f805f80608085870312156138aa575f80fd5b6138b385613886565b93506138c160208601613886565b92506138cf60408601613715565b915060608501356138df81613576565b939692955090935050565b5f602082840312156138fa575f80fd5b61361482613715565b5f60a08284031215613913575f80fd5b50919050565b5f805f6040848603121561392b575f80fd5b833567ffffffffffffffff80821115613942575f80fd5b61394e87838801613903565b94506020860135915080821115613963575f80fd5b506139708682870161372c565b9497909650939450505050565b5f8083601f84011261398d575f80fd5b50813567ffffffffffffffff8111156139a4575f80fd5b6020830191508360208260051b850101111561376a575f80fd5b5f80602083850312156139cf575f80fd5b823567ffffffffffffffff8111156139e5575f80fd5b6139f18582860161397d565b90969095509350505050565b5f60208284031215613a0d575f80fd5b61361482613886565b5f805f60408486031215613a28575f80fd5b83359250602084013567ffffffffffffffff811115613a45575f80fd5b6139708682870161372c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b82151581526040810160048310613abc577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8260208301529392505050565b5f805f60408486031215613adb575f80fd5b613ae48461365a565b9250602084013567ffffffffffffffff811115613aff575f80fd5b6139708682870161397d565b5f805f805f60808688031215613b1f575f80fd5b613b288661365a565b94506020860135613b3881613576565b9350604086013567ffffffffffffffff811115613b53575f80fd5b613b5f8882890161372c565b96999598509660600135949350505050565b5f60208284031215613b81575f80fd5b813567ffffffffffffffff811115613b97575f80fd5b613ba384828501613903565b949350505050565b5f805f805f805f6080888a031215613bc1575f80fd5b8735613bcc81613576565b9650602088013567ffffffffffffffff80821115613be8575f80fd5b613bf48b838c0161372c565b909850965060408a0135915080821115613c0c575f80fd5b613c188b838c0161372c565b909650945060608a0135915080821115613c30575f80fd5b50613c3d8a828b0161372c565b989b979a50959850939692959293505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f610140613d0e838873ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613d4f60c08401875467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8061012084015261140d8184018587613c50565b5f60208284031215613d73575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80356fffffffffffffffffffffffffffffffff81168114610da0575f80fd5b5f60208284031215613dd6575f80fd5b61361482613da7565b60208082528181018390525f90604080840186845b87811015613e6f5763ffffffff613e0a8361365a565b16835267ffffffffffffffff613e21868401613715565b168584015261ffff613e34858401613886565b168484015260606fffffffffffffffffffffffffffffffff613e57828501613da7565b16908401526080928301929190910190600101613df4565b5090979650505050505050565b5f81518084525f5b81811015613ea057602081850181015186830182015201613e84565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f610140613f54838773ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613f9560c08401865467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b80610120840152613fa881840185613e7c565b9695505050505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613fe4575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614021575f80fd5b83018035915067ffffffffffffffff82111561403b575f80fd5b60200191503681900382131561376a575f80fd5b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561408f5780818660040360031b1b83161692505b505092915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126140ca575f80fd5b830160208101925035905067ffffffffffffffff8111156140e9575f80fd5b80360382131561376a575f80fd5b6040815263ffffffff6141098461365a565b1660408201525f602084013561411e81613576565b73ffffffffffffffffffffffffffffffffffffffff1660608301526141466040850185614097565b60a0608085015261415b60e085018284613c50565b915050606085013560a08401526141756080860186614097565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08584030160c08601526141aa838284613c50565b93505050508260208301529392505050565b818382375f9101908152919050565b828152604060208201525f613ba36040830184613e7c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610a8d57610a8d6141e3565b80820180821115610a8d57610a8d6141e3565b5f8085851115614248575f80fd5b83861115614254575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008660e01b1681527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008560601b166004820152836018820152818360388301375f9101603801908152949350505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff808a511684528060208b01511660208501525067ffffffffffffffff60408a015116604084015261ffff60608a015116606084015261436160808401895467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8060e08401526143748184018789613c50565b905082810361010084015261438a818587613c50565b9998505050505050505050565b5f67ffffffffffffffff8083168181036143b3576143b36141e3565b6001019392505050565b67ffffffffffffffff8281168282160390808211156143de576143de6141e3565b5092915050565b67ffffffffffffffff8181168382160190808211156143de576143de6141e3565b5f67ffffffffffffffff82168061441f5761441f6141e3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019291505056fea26469706673582212208293bcc557e204de553c5250d4aeaa3a84335fc59a6c7b5a242fbc34745baa1464736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002470380380620024708339810160408190526200003391620000c8565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000079565b5063ffffffff90911660a052608052620000fe565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8060408385031215620000da575f80fd5b825163ffffffff81168114620000ee575f80fd5b6020939093015192949293505050565b60805160a0516123426200012e5f395f81816107ac015261082601525f81816109120152610cb901526123425ff3fe6080604052600436106100e7575f3560e01c80638da5cb5b11610087578063de0a93c311610057578063de0a93c314610322578063df2b057e14610396578063f2fde38b146103a9578063f5ff608f146103c8575f80fd5b80638da5cb5b1461029e5780639ac23d28146102d1578063bbc5a33b146102f0578063d358b30014610303575f80fd5b806339f26dfc116100c257806339f26dfc1461022c57806354fd4d501461024b578063715018a61461026b5780637bfa20a91461027f575f80fd5b806301e33667146100f257806310b65f76146101135780632565c24514610157575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5061011161010c366004611a78565b6103e7565b005b34801561011e575f80fd5b5061014461012d366004611ac2565b63ffffffff165f9081526001602052604090205490565b6040519081526020015b60405180910390f35b348015610162575f80fd5b506101ec610171366004611ac2565b60036020525f908152604090205463ffffffff8082169167ffffffffffffffff64010000000082048116926c0100000000000000000000000083049091169174010000000000000000000000000000000000000000810482169178010000000000000000000000000000000000000000000000009091041685565b6040805163ffffffff968716815267ffffffffffffffff95861660208201529390941693830193909352831660608201529116608082015260a00161014e565b348015610237575f80fd5b50610111610246366004611b13565b6103ff565b348015610256575f80fd5b5060408051600180825260208201520161014e565b348015610276575f80fd5b506101116104af565b34801561028a575f80fd5b50610144610299366004611bae565b6104c2565b3480156102a9575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b3480156102dc575f80fd5b506101116102eb366004611c15565b61068a565b6101446102fe366004611cd2565b610747565b34801561030e575f80fd5b5061014461031d366004611cd2565b610761565b34801561032d575f80fd5b50600254604080516effffffffffffffffffffffffffffff80841682526f0100000000000000000000000000000084041660208201527e0100000000000000000000000000000000000000000000000000000000000090920461ffff169082015260600161014e565b6101446103a4366004611bae565b61099c565b3480156103b4575f80fd5b506101116103c3366004611d67565b6109b2565b3480156103d3575f80fd5b506101116103e2366004611d80565b610a15565b6103ef610a8e565b6103fa838383610ae0565b505050565b610407610a8e565b6002805461ffff9092167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6effffffffffffffffffffffffffffff9485166f01000000000000000000000000000000027fffff00000000000000000000000000000000000000000000000000000000000090941694909516939093179190911792909216179055565b6104b7610a8e565b6104c05f610b10565b565b5f6104d06020850185611e04565b67ffffffffffffffff165f03610530576104f06040860160208701611ac2565b6040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b61053a8383610b84565b505f61055e61054f60a0880160808901611e04565b67ffffffffffffffff16610c25565b90505f8061056f6020890189611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61059a60408b0160208c01611ac2565b856105a860208c018c611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa158015610617573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063b9190611e3c565b93505050915061067e828860200160208101906106589190611e8e565b61066860c08c0160a08d01611e8e565b61067860608c0160408d01611ea7565b85610c32565b98975050505050505050565b610692610a8e565b8281146106cb576040517fb54ecc3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b83811015610740578282828181106106e7576106e7611ec2565b905060a0020160035f87878581811061070257610702611ec2565b90506020020160208101906107179190611ac2565b63ffffffff16815260208101919091526040015f206107368282611efb565b50506001016106cd565b5050505050565b5f610756878787878787610761565b979650505050505050565b5f61076f6020870187611e04565b67ffffffffffffffff165f036107d9576040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152602401610527565b6107e38383610b84565b505f6107f861054f60608a0160408b01611e04565b90505f8061080960208b018b611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c7f00000000000000000000000000000000000000000000000000000000000000008561085360208e018e611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa1580156108c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e69190611e3c565b9350505091505f6108f78989610d27565b90505f6fffffffffffffffffffffffffffffffff83166109377f0000000000000000000000000000000000000000000000000000000000000000846120c4565b6109419190612108565b905061098c610950828661211b565b61096060408e0160208f01611e8e565b8e60600160208101906109739190611e8e565b8e60400160208101906109869190611ea7565b87610c32565b9c9b505050505050505050505050565b5f6109a9858585856104c2565b95945050505050565b6109ba610a8e565b73ffffffffffffffffffffffffffffffffffffffff8116610a09576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610527565b610a1281610b10565b50565b610a1d610a8e565b5f5b818110156103fa57828282818110610a3957610a39611ec2565b9050604002016020013560015f015f858585818110610a5a57610a5a611ec2565b610a709260206040909202019081019150611ac2565b63ffffffff16815260208101919091526040015f2055600101610a1f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146104c0576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610527565b73ffffffffffffffffffffffffffffffffffffffff8316610b05576103fa8282610e0f565b6103fa838383610f11565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808215610bde575f80610b99868685610f7f565b6040517f7085244b00000000000000000000000000000000000000000000000000000000815260ff851660048201529096509294508593505060249091019050610527565b808314610c1a576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610527565b5f9150505b92915050565b5f610c1f82610120610fd8565b5f8061ffff861615610c445785610c46565b845b90505f612710610c5a61ffff84168a6120c4565b610c649190612108565b90506fffffffffffffffffffffffffffffffff84161580610c9557506fffffffffffffffffffffffffffffffff8516155b15610ca35791506109a99050565b5f846fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000876fffffffffffffffffffffffffffffffff16610cf591906120c4565b610cff9190612108565b610d09908a61211b565b9050818111610d185781610d1a565b805b9998505050505050505050565b5f80610d36848461103c61124b565b6002548151919250610d5f916effffffffffffffffffffffffffffff9091169061ffff1661212e565b6effffffffffffffffffffffffffffff169150806020015115610dca5760025461271090610db3907e01000000000000000000000000000000000000000000000000000000000000900461ffff16846120c4565b610dbd9190612108565b610dc7908361211b565b91505b806040015115610e0857600254610e05906f0100000000000000000000000000000090046effffffffffffffffffffffffffffff168361211b565b91505b5092915050565b73ffffffffffffffffffffffffffffffffffffffff8216610e5c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610eb2576040519150601f19603f3d011682016040523d82523d5f602084013e610eb7565b606091505b50509050806103fa576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610527565b73ffffffffffffffffffffffffffffffffffffffff8216610f5e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103fa73ffffffffffffffffffffffffffffffffffffffff8416838361185d565b5f36816001840181610f928888846118ea565b6002830192909150610faa9089908990600301611910565b94506002820161ffff82168301610fc381838b8d612161565b979b909a50969850505061ffff160193505050565b5f80610fe56041856120c4565b9050610ff2602082612188565b1561101a57611002602082612188565b61100c908261219b565b61101790602061211b565b90505b806110278461010461211b565b611031919061211b565b610e0590602061211b565b61104860018583611934565b6110556001856002611975565b156112455763ffffffff8085165f90815260036020908152604091829020825160a0810184529054808516825267ffffffffffffffff64010000000082048116938301939093526c01000000000000000000000000810490921692810192909252740100000000000000000000000000000000000000008104831660608301527801000000000000000000000000000000000000000000000000900490911660808201528284156111a957816020015167ffffffffffffffff168467ffffffffffffffff16111561116657815160208301516103e89163ffffffff169061113c90876121ae565b61114691906121cf565b61115091906121f3565b826040015161115f9190612219565b90506111a9565b6103e8825f015163ffffffff1685846020015161118391906121ae565b61118d91906121cf565b61119791906121f3565b82604001516111a691906121ae565b90505b42826060015163ffffffff16826111c09190612219565b67ffffffffffffffff1610806111f3575060808201516111e69063ffffffff164261211b565b8167ffffffffffffffff16115b15611242576040517f0c5a8d2300000000000000000000000000000000000000000000000000000000815263ffffffff8716600482015267ffffffffffffffff82166024820152604401610527565b50505b50505050565b604080516060810182525f80825260208201819052918101829052908085818661127682600261211b565b9261128393929190612161565b61128c9161223a565b60f01c905061129c60028361211b565b915061ffff81166001146112dc576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112e760028361211b565b91505f8683876112f882600261211b565b9261130593929190612161565b61130e9161223a565b60f01c905061131e60028461211b565b92508061ffff165f0361135d576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff168352505f5b825f015161ffff168161ffff1610156115c6575f86868481811061138c5761138c611ec2565b919091013560f81c91506113a3905060018461211b565b925060ff81166001146113e2576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113ed60028461211b565b92505f8784886113fe82600261211b565b9261140b93929190612161565b6114149161223a565b60f01c905061142460028561211b565b93507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff82160161158a575f88858961146082600261211b565b9261146d93929190612161565b6114769161223a565b60f01c905061148660028661211b565b9450845f8a828b61149882600461211b565b926114a593929190612161565b6114ae91612280565b60e01c90506114be60048361211b565b91505f8b8b848181106114d3576114d3611ec2565b600192013560f81c821492506114eb9190508461211b565b92505f8c848d6114fc82600861211b565b9261150993929190612161565b611512916122c6565b60c01c90506115278383835f8f63ffffffff16565b508a925061153c91505061ffff83168761211b565b1115611574576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158261ffff82168661211b565b9450506115bc565b6040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600101611366565b508381101561181c575f8585838181106115e2576115e2611ec2565b919091013560f81c91506115f9905060018361211b565b915060ff8116600114611638576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86838761164782600261211b565b9261165493929190612161565b61165d9161223a565b60f01c905061166d60028461211b565b925061ffff81166001146116ad576040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787858181106116c0576116c0611ec2565b919091013560f81c91506116d7905060018561211b565b935060ff81166116ed576001602086015261175c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff821601611723576001604086015261175c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff82160161158a5760016020860181905260408601525b5f88858961176b82600461211b565b9261177893929190612161565b61178191612280565b60e01c905061179160048661211b565b94505f8989878181106117a6576117a6611ec2565b600192013560f81c821492506117be9190508761211b565b95505f8a878b6117cf82600861211b565b926117dc93929190612161565b6117e5916122c6565b60c01c90506117f560088861211b565b965061180883838360018d63ffffffff16565b61181360168861211b565b96505050505050505b808414611855576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526103fa9084906119a2565b5f600282016118fb81848688612161565b6119049161223a565b60f01c95945050505050565b5f83838381811061192357611923611ec2565b919091013560f81c95945050505050565b61193f838383611975565b6103fa576040517f50fae9eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8083165f90815260208590526040812054909161199a91908490611a4116565b949350505050565b5f8060205f8451602086015f885af1806119c1576040513d5f823e3d81fd5b50505f513d915081156119d85780600114156119f2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611245576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610527565b600160ff919091161b16151590565b803573ffffffffffffffffffffffffffffffffffffffff81168114611a73575f80fd5b919050565b5f805f60608486031215611a8a575f80fd5b611a9384611a50565b9250611aa160208501611a50565b9150604084013590509250925092565b63ffffffff81168114610a12575f80fd5b5f60208284031215611ad2575f80fd5b8135611add81611ab1565b9392505050565b80356effffffffffffffffffffffffffffff81168114611a73575f80fd5b803561ffff81168114611a73575f80fd5b5f805f60608486031215611b25575f80fd5b611b2e84611ae4565b9250611b3c60208501611ae4565b9150611b4a60408501611b02565b90509250925092565b5f60608284031215611b63575f80fd5b50919050565b5f8083601f840112611b79575f80fd5b50813567ffffffffffffffff811115611b90575f80fd5b602083019150836020828501011115611ba7575f80fd5b9250929050565b5f805f80848603610140811215611bc3575f80fd5b60c0811215611bd0575f80fd5b50849350611be18660c08701611b53565b925061012085013567ffffffffffffffff811115611bfd575f80fd5b611c0987828801611b69565b95989497509550505050565b5f805f8060408587031215611c28575f80fd5b843567ffffffffffffffff80821115611c3f575f80fd5b818701915087601f830112611c52575f80fd5b813581811115611c60575f80fd5b8860208260051b8501011115611c74575f80fd5b602092830196509450908601359080821115611c8e575f80fd5b818701915087601f830112611ca1575f80fd5b813581811115611caf575f80fd5b88602060a083028501011115611cc3575f80fd5b95989497505060200194505050565b5f805f805f80868803610120811215611ce9575f80fd5b6080811215611cf6575f80fd5b50869550611d078860808901611b53565b945060e087013567ffffffffffffffff80821115611d23575f80fd5b611d2f8a838b01611b69565b9096509450610100890135915080821115611d48575f80fd5b50611d5589828a01611b69565b979a9699509497509295939492505050565b5f60208284031215611d77575f80fd5b611add82611a50565b5f8060208385031215611d91575f80fd5b823567ffffffffffffffff80821115611da8575f80fd5b818501915085601f830112611dbb575f80fd5b813581811115611dc9575f80fd5b8660208260061b8501011115611ddd575f80fd5b60209290920196919550909350505050565b67ffffffffffffffff81168114610a12575f80fd5b5f60208284031215611e14575f80fd5b8135611add81611def565b6fffffffffffffffffffffffffffffffff81168114610a12575f80fd5b5f805f8060808587031215611e4f575f80fd5b845193506020850151611e6181611e1f565b6040860151909350611e7281611e1f565b6060860151909250611e8381611e1f565b939692955090935050565b5f60208284031215611e9e575f80fd5b611add82611b02565b5f60208284031215611eb7575f80fd5b8135611add81611e1f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8135610c1f81611ab1565b8135611f0681611ab1565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135611f4681611def565b6bffffffffffffffff000000008160201b16905080837fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008416171784556040850135611f9181611def565b73ffffffffffffffff0000000000000000000000008160601b169050837fffffffffffffffffffffffff000000000000000000000000000000000000000084161793508084831717855560608601359250611feb83611ab1565b77ffffffff00000000000000000000000000000000000000008360a01b167fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff8516831782171785555050505061209361204660808401611eef565b82547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1660c09190911b7bffffffff00000000000000000000000000000000000000000000000016178255565b5050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610c1f57610c1f612097565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612116576121166120db565b500490565b80820180821115610c1f57610c1f612097565b6effffffffffffffffffffffffffffff81811683821602808216919082811461215957612159612097565b505092915050565b5f808585111561216f575f80fd5b8386111561217b575f80fd5b5050820193919092039150565b5f82612196576121966120db565b500690565b81810381811115610c1f57610c1f612097565b67ffffffffffffffff828116828216039080821115610e0857610e08612097565b67ffffffffffffffff81811683821602808216919082811461215957612159612097565b5f67ffffffffffffffff8084168061220d5761220d6120db565b92169190910492915050565b67ffffffffffffffff818116838216019080821115610e0857610e08612097565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156121595760029490940360031b84901b1690921692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156121595760049490940360031b84901b1690921692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156121595760089490940360031b84901b169092169291505056fea2646970667358221220cccc97c15d4a10960156cf1d97eac992ad00f3710384385711595e0370e0871a64736f6c6343000816003360e060405234801562000010575f80fd5b5060405162001e1538038062001e15833981016040819052620000339162000172565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b62000064816200010b565b50600180546001600160a01b0319166001600160a01b0384811691909117909155811660808190525f60a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620000ca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000f09190620001af565b63ffffffff1660c052505060636003556064600455620001db565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016f575f80fd5b50565b5f806040838503121562000184575f80fd5b825162000191816200015a565b6020840151909250620001a4816200015a565b809150509250929050565b5f60208284031215620001c0575f80fd5b815163ffffffff81168114620001d4575f80fd5b9392505050565b60805160a05160c051611bf3620002225f395f6103fc01525f61036f01525f818161033c015281816106e90152818161081201528181610a5c0152610cc30152611bf35ff3fe60806040526004361061018e575f3560e01c8063715018a6116100d5578063996f79c01161007e578063dabca06311610058578063dabca0631461051f578063f2fde38b1461053e578063fd9be5221461055d57610195565b8063996f79c0146104bf578063aec336e6146104d4578063d80e9bd9146104f357610195565b80638da5cb5b116100af5780638da5cb5b146104545780638f58aa7a1461047d578063909532381461049c57610195565b8063715018a6146103d757806372607537146103eb57806372d713221461043357610195565b80634389e58f1161013757806361d027b31161011157806361d027b31461035e5780636251b637146103915780636750cd4c146103b757610195565b80634389e58f146102d357806354fd4d50146103015780635e280f111461032b57610195565b80631881d94d116101685780631881d94d1461026d5780631c7c294e14610288578063334993ff146102b457610195565b806301ffc9a7146101c75780630e97289b146101fb57806312cc947f1461024c57610195565b3661019557005b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156101d2575f80fd5b506101e66101e136600461127f565b61057c565b60405190151581526020015b60405180910390f35b348015610206575f80fd5b506001546102279073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f2565b348015610257575f80fd5b5061026b6102663660046112fc565b610614565b005b348015610278575f80fd5b5060026040516101f2919061133b565b348015610293575f80fd5b506002546102279073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102bf575f80fd5b5061026b6102ce36600461137a565b6107e7565b3480156102de575f80fd5b506102f26102ed3660046114c1565b6107fa565b6040516101f29392919061159b565b34801561030c575f80fd5b50604080515f80825260208201526002918101919091526060016101f2565b348015610336575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b348015610369575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b34801561039c575f80fd5b506103a5600181565b60405160ff90911681526020016101f2565b3480156103c2575f80fd5b506101e66103d13660046115ed565b50600190565b3480156103e2575f80fd5b5061026b610965565b3480156103f6575f80fd5b5061041e7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101f2565b34801561043e575f80fd5b50610447610978565b6040516101f29190611606565b34801561045f575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610227565b348015610488575f80fd5b5061026b610497366004611644565b610a04565b3480156104a7575f80fd5b506104b160035481565b6040519081526020016101f2565b3480156104ca575f80fd5b506104b160045481565b3480156104df575f80fd5b5061026b6104ee36600461166e565b610b5c565b3480156104fe575f80fd5b5061051261050d366004611689565b610bab565b6040516101f291906116ff565b34801561052a575f80fd5b5061026b610539366004611716565b610beb565b348015610549575f80fd5b5061026b61055836600461166e565b610c03565b348015610568575f80fd5b5061026b610577366004611644565b610c6b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061060e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff1615801590610653575060025473ffffffffffffffffffffffffffffffffffffffff163314155b1561068a576040517f70b216ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60405180606001604052806106a08585610d5b565b63ffffffff1681526020016106b58585610d7d565b81526020016106c48585610d9c565b67ffffffffffffffff169052905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a825d747826107198686610dbe565b6107238787610dcf565b604051610731929190611750565b6040805191829003822060e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168352845163ffffffff1660048401526020850151602484015293015167ffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091166064820152608481019190915260a4015f604051808303815f87803b1580156107cc575f80fd5b505af11580156107de573d5f803e3d5ffd5b50505050505050565b6107ef610dea565b600491909155600355565b604080518082019091525f80825260208201526060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461087f576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61089061088b87611776565b610e3c565b915084515f146108a0578461092a565b600580546108ad90611811565b80601f01602080910402602001604051908101604052809291908181526020018280546108d990611811565b80156109245780601f106108fb57610100808354040283529160200191610924565b820191905f5260205f20905b81548152906001019060200180831161090757829003601f168201915b50505050505b90506109368282610ea1565b6040518060400160405280600454815260200185610954575f610958565b6003545b9052969195509350915050565b61096d610dea565b6109765f610f2a565b565b6005805461098590611811565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190611811565b80156109fc5780601f106109d3576101008083540402835291602001916109fc565b820191905f5260205f20905b8154815290600101906020018083116109df57829003601f168201915b505050505081565b610a0c610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610a59576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae7919061185c565b905073ffffffffffffffffffffffffffffffffffffffff8116610b36576040517f54c1781b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff82168484610f9e565b505050565b610b64610dea565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b604080518082019091525f80825260208201526040518060400160405280600454815260200183610bdc575f610be0565b6003545b905295945050505050565b610bf3610dea565b6005610bff82826118c2565b5050565b610c0b610dea565b73ffffffffffffffffffffffffffffffffffffffff8116610c5f576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610c6881610f2a565b50565b610c73610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610cc0576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4e919061185c565b9050610b5781848461102b565b5f610d6a600d600984866119da565b610d7391611a01565b60e01c9392505050565b5f610d8c602d600d84866119da565b610d9591611a49565b9392505050565b5f610dab6009600184866119da565b610db491611a85565b60c01c9392505050565b5f610d95610dcc848461105b565b90565b365f610dde83605181876119da565b915091505b9250929050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610976576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c56565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610e8b986001989197919673ffffffffffffffffffffffffffffffffffffffff169501611acb565b6040516020818303038152906040529050919050565b6001546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063faed6c5890610ef99085908590600401611b90565b5f604051808303815f87803b158015610f10575f80fd5b505af1158015610f22573d5f803e3d5ffd5b505050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b5790849061106a565b73ffffffffffffffffffffffffffffffffffffffff831661105057610b57828261110f565b610b57838383611211565b5f610d8c6051603184866119da565b5f8060205f8451602086015f885af180611089576040513d5f823e3d81fd5b50505f513d915081156110a05780600114156110ba565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611109576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c56565b50505050565b73ffffffffffffffffffffffffffffffffffffffff821661115c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146111b2576040519150601f19603f3d011682016040523d82523d5f602084013e6111b7565b606091505b5050905080610b57576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c56565b73ffffffffffffffffffffffffffffffffffffffff821661125e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff84168383610f9e565b5f6020828403121561128f575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d95575f80fd5b5f8083601f8401126112ce575f80fd5b50813567ffffffffffffffff8111156112e5575f80fd5b602083019150836020828501011115610de3575f80fd5b5f806020838503121561130d575f80fd5b823567ffffffffffffffff811115611323575f80fd5b61132f858286016112be565b90969095509350505050565b6020810160038310611374577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f806040838503121561138b575f80fd5b50508035926020909101359150565b5f60e082840312156113aa575f80fd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff81118282101715611400576114006113b0565b60405290565b5f82601f830112611415575f80fd5b813567ffffffffffffffff80821115611430576114306113b0565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611476576114766113b0565b8160405283815286602085880101111561148e575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803580151581146114bc575f80fd5b919050565b5f805f606084860312156114d3575f80fd5b833567ffffffffffffffff808211156114ea575f80fd5b6114f68783880161139a565b9450602086013591508082111561150b575f80fd5b5061151886828701611406565b925050611527604085016114ad565b90509250925092565b5f5b8381101561154a578181015183820152602001611532565b50505f910152565b5f8151808452611569816020860160208601611530565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8351815260208085015190820152608060408201525f6115be6080830185611552565b82810360608401526115d08185611552565b9695505050505050565b803563ffffffff811681146114bc575f80fd5b5f602082840312156115fd575f80fd5b610d95826115da565b602081525f610d956020830184611552565b73ffffffffffffffffffffffffffffffffffffffff81168114610c68575f80fd5b80356114bc81611618565b5f8060408385031215611655575f80fd5b823561166081611618565b946020939093013593505050565b5f6020828403121561167e575f80fd5b8135610d9581611618565b5f805f806060858703121561169c575f80fd5b843567ffffffffffffffff808211156116b3575f80fd5b6116bf8883890161139a565b955060208701359150808211156116d4575f80fd5b506116e1878288016112be565b90945092506116f49050604086016114ad565b905092959194509250565b81518152602080830151908201526040810161060e565b5f60208284031215611726575f80fd5b813567ffffffffffffffff81111561173c575f80fd5b61174884828501611406565b949350505050565b818382375f9101908152919050565b803567ffffffffffffffff811681146114bc575f80fd5b5f60e08236031215611786575f80fd5b61178e6113dd565b6117978361175f565b81526117a5602084016115da565b60208201526117b660408401611639565b60408201526117c7606084016115da565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156117f9575f80fd5b61180536828601611406565b60c08301525092915050565b600181811c9082168061182557607f821691505b6020821081036113aa577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6020828403121561186c575f80fd5b8151610d9581611618565b601f821115610b5757805f5260205f20601f840160051c8101602085101561189c5750805b601f840160051c820191505b818110156118bb575f81556001016118a8565b5050505050565b815167ffffffffffffffff8111156118dc576118dc6113b0565b6118f0816118ea8454611811565b84611877565b602080601f831160018114611942575f841561190c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610f22565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561198e5788860151825594840194600190910190840161196f565b50858210156119ca57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b5f80858511156119e8575f80fd5b838611156119f4575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611a415780818660040360031b1b83161692505b505092915050565b8035602083101561060e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015611a415760089490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611b7c816071850160208701611530565b919091016071019998505050505050505050565b604081525f611ba26040830185611552565b8281036020840152611bb48185611552565b9594505050505056fea2646970667358221220153f6a8e912d5720c2f1c4bf884b915b03d8f933123bf4fbba154ab615acb52564736f6c6343000816003360c060405234801562000010575f80fd5b5060405162003f7b38038062003f7b8339810160408190526200003391620002c2565b83838383838360128484818181818d6001600160a01b0381166200007057604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200007b8162000191565b506001600160a01b038083166080528116620000aa57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b158015620000ef575f80fd5b505af115801562000102573d5f803e3d5ffd5b50505050505050506200011a620001e060201b60201c565b60ff168360ff16101562000141576040516301e9714b60e41b815260040160405180910390fd5b6200014e60068462000360565b6200015b90600a6200047b565b60a052506008915062000171905083826200051c565b5060096200018082826200051c565b5050505050505050505050620005e8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000209575f80fd5b81516001600160401b0380821115620002265762000226620001e5565b604051601f8301601f19908116603f01168101908282118183101715620002515762000251620001e5565b81604052838152602092508660208588010111156200026e575f80fd5b5f91505b8382101562000291578582018301518183018401529082019062000272565b5f602085830101528094505050505092915050565b80516001600160a01b0381168114620002bd575f80fd5b919050565b5f805f8060808587031215620002d6575f80fd5b84516001600160401b0380821115620002ed575f80fd5b620002fb88838901620001f9565b9550602087015191508082111562000311575f80fd5b506200032087828801620001f9565b9350506200033160408601620002a6565b91506200034160608601620002a6565b905092959194509250565b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156200037c576200037c6200034c565b92915050565b600181815b80851115620003c257815f1904821115620003a657620003a66200034c565b80851615620003b457918102915b93841c939080029062000387565b509250929050565b5f82620003da575060016200037c565b81620003e857505f6200037c565b81600181146200040157600281146200040c576200042c565b60019150506200037c565b60ff8411156200042057620004206200034c565b50506001821b6200037c565b5060208310610133831016604e8410600b841016171562000451575081810a6200037c565b6200045d838362000382565b805f19048211156200047357620004736200034c565b029392505050565b5f6200048b60ff841683620003ca565b9392505050565b600181811c90821680620004a757607f821691505b602082108103620004c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200051757805f5260205f20601f840160051c81016020851015620004f35750805b601f840160051c820191505b8181101562000514575f8155600101620004ff565b50505b505050565b81516001600160401b03811115620005385762000538620001e5565b620005508162000549845462000492565b84620004cc565b602080601f83116001811462000586575f84156200056e5750858301515b5f19600386901b1c1916600185901b178555620005e0565b5f85815260208120601f198616915b82811015620005b65788860151825594840194600190910190840162000595565b5085821015620005d457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60805160a05161392b620006505f395f81816106f301528181611f9b0152818161200d015261229a01525f81816105a301528181610b5901528181611296015281816115bc01528181611a17015281816123ee0152818161251301526125fb015261392b5ff3fe6080604052600436106102d7575f3560e01c80637d25a05e1161017b578063bb0b6a53116100d1578063d045a0dc11610087578063f2fde38b11610062578063f2fde38b146108d0578063fc0c546a1461052c578063ff7bd03d146108ef575f80fd5b8063d045a0dc1461084d578063d424388514610860578063dd62ed3e1461087f575f80fd5b8063bd815db0116100b7578063bd815db0146107fa578063c7c7f5b31461080d578063ca5eb5e11461082e575f80fd5b8063bb0b6a53146107b0578063bc70b354146107db575f80fd5b8063963efcaa11610131578063a9059cbb1161010c578063a9059cbb14610746578063b731ea0a14610765578063b98bd07014610791575f80fd5b8063963efcaa146106e25780639dc29fac146107155780639f68b96414610734575f80fd5b8063857749b011610161578063857749b0146106925780638da5cb5b146106a557806395d89b41146106ce575f80fd5b80637d25a05e1461063957806382413eac14610673575f80fd5b8063313ce567116102305780635535d461116101e65780636fc1b31e116101c15780636fc1b31e146105c557806370a08231146105e4578063715018a614610625575f80fd5b80635535d4611461053e5780635a0dfe4d1461055d5780635e280f1114610592575f80fd5b80633b6f743b116102165780633b6f743b146104e157806340c10f191461050d57806352ae28791461052c575f80fd5b8063313ce567146104a15780633400288b146104c2575f80fd5b8063134d4f251161029057806318160ddd1161026b57806318160ddd146104505780631f5e13341461046e57806323b872dd14610482575f80fd5b8063134d4f25146103c8578063156a0d0f146103ef57806317442b701461042f575f80fd5b80630d35b415116102c05780630d35b41514610334578063111ecdad1461036257806313137d65146103b3575f80fd5b806306fdde03146102db578063095ea7b314610305575b5f80fd5b3480156102e6575f80fd5b506102ef61090e565b6040516102fc91906127f6565b60405180910390f35b348015610310575f80fd5b5061032461031f366004612829565b61099e565b60405190151581526020016102fc565b34801561033f575f80fd5b5061035361034e366004612869565b6109b7565b6040516102fc9392919061289b565b34801561036d575f80fd5b5060045461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102fc565b6103c66103c13660046129a5565b610b57565b005b3480156103d3575f80fd5b506103dc600281565b60405161ffff90911681526020016102fc565b3480156103fa575f80fd5b50604080517f02e49c2c00000000000000000000000000000000000000000000000000000000815260016020820152016102fc565b34801561043a575f80fd5b50604080516001815260026020820152016102fc565b34801561045b575f80fd5b506007545b6040519081526020016102fc565b348015610479575f80fd5b506103dc600181565b34801561048d575f80fd5b5061032461049c366004612a3e565b610c56565b3480156104ac575f80fd5b5060125b60405160ff90911681526020016102fc565b3480156104cd575f80fd5b506103c66104dc366004612a94565b610c7b565b3480156104ec575f80fd5b506105006104fb366004612abb565b610c91565b6040516102fc9190612b0a565b348015610518575f80fd5b506103c6610527366004612829565b610cf5565b348015610537575f80fd5b503061038e565b348015610549575f80fd5b506102ef610558366004612b32565b610cff565b348015610568575f80fd5b50610324610577366004612a94565b63ffffffff919091165f908152600160205260409020541490565b34801561059d575f80fd5b5061038e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d0575f80fd5b506103c66105df366004612b63565b610da1565b3480156105ef575f80fd5b506104606105fe366004612b63565b73ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604090205490565b348015610630575f80fd5b506103c6610e23565b348015610644575f80fd5b5061065a610653366004612a94565b5f92915050565b60405167ffffffffffffffff90911681526020016102fc565b34801561067e575f80fd5b5061032461068d366004612b7e565b610e36565b34801561069d575f80fd5b5060066104b0565b3480156106b0575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661038e565b3480156106d9575f80fd5b506102ef610e58565b3480156106ed575f80fd5b506104607f000000000000000000000000000000000000000000000000000000000000000081565b348015610720575f80fd5b506103c661072f366004612829565b610e67565b34801561073f575f80fd5b505f610324565b348015610751575f80fd5b50610324610760366004612829565b610e71565b348015610770575f80fd5b5060025461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561079c575f80fd5b506103c66107ab366004612c22565b610e7e565b3480156107bb575f80fd5b506104606107ca366004612c61565b60016020525f908152604090205481565b3480156107e6575f80fd5b506102ef6107f5366004612c7a565b610e98565b6103c6610808366004612c22565b611052565b61082061081b366004612cd7565b611216565b6040516102fc929190612d5e565b348015610839575f80fd5b506103c6610848366004612b63565b611249565b6103c661085b3660046129a5565b6112f0565b34801561086b575f80fd5b506103c661087a366004612b63565b611338565b34801561088a575f80fd5b50610460610899366004612db0565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260066020908152604080832093909416825291909152205490565b3480156108db575f80fd5b506103c66108ea366004612b63565b6113b3565b3480156108fa575f80fd5b50610324610909366004612ddc565b611416565b60606008805461091d90612df6565b80601f016020809104026020016040519081016040528092919081815260200182805461094990612df6565b80156109945780601f1061096b57610100808354040283529160200191610994565b820191905f5260205f20905b81548152906001019060200180831161097757829003601f168201915b5050505050905090565b5f336109ab81858561144a565b60019150505b92915050565b604080518082019091525f808252602082015260606109e760405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a569190612e41565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac29190612e5c565b604080518082018252848152602080820184905282515f80825291810190935290975091925090610b15565b604080518082019091525f815260606020820152815260200190600190039081610aee5790505b5093505f80610b39604089013560608a0135610b3460208c018c612c61565b61145c565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610bcd576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b60208701803590610be790610be2908a612c61565b6114b0565b14610c3e57610bf96020880188612c61565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610bc4565b610c4d87878787878787611504565b50505050505050565b5f33610c63858285611695565b610c6e858585611762565b60019150505b9392505050565b610c8361180b565b610c8d828261185d565b5050565b604080518082019091525f80825260208201525f610cbf60408501356060860135610b346020880188612c61565b9150505f80610cce86846118b1565b9092509050610ceb610ce36020880188612c61565b838388611a02565b9695505050505050565b610c8d8282611aed565b600360209081525f928352604080842090915290825290208054610d2290612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4e90612df6565b8015610d995780601f10610d7057610100808354040283529160200191610d99565b820191905f5260205f20905b815481529060010190602001808311610d7c57829003601f168201915b505050505081565b610da961180b565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610e2b61180b565b610e345f611b47565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b60606009805461091d90612df6565b610c8d8282611bbb565b5f336109ab818585611762565b610e8661180b565b610c8d610e938284612f80565b611c15565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ecb90612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef790612df6565b8015610f425780601f10610f1957610100808354040283529160200191610f42565b820191905f5260205f20905b815481529060010190602001808311610f2557829003601f168201915b5050505050905080515f03610f905783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610e509350505050565b5f839003610f9f579050610e50565b6002831061101c57610fe584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611d1692505050565b80610ff38460028188613089565b604051602001611005939291906130b0565b604051602081830303815290604052915050610e50565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc492919061311d565b5f5b81811015611155573683838381811061106f5761106f613130565b9050602002810190611081919061315d565b90506110b36110936020830183612c61565b602083013563ffffffff919091165f908152600160205260409020541490565b6110bd575061114d565b3063d045a0dc60c08301358360a08101356110dc610100830183613199565b6110ed610100890160e08a01612b63565b6110fb6101208a018a613199565b6040518963ffffffff1660e01b815260040161111d979695949392919061320f565b5f604051808303818588803b158015611134575f80fd5b505af1158015611146573d5f803e3d5ffd5b5050505050505b600101611054565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa15801561119e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111e391908101906132a2565b6040517f8351eea7000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b61121e612747565b604080518082019091525f808252602082015261123c858585611d5b565b915091505b935093915050565b61125161180b565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b1580156112d7575f80fd5b505af11580156112e9573d5f803e3d5ffd5b5050505050565b333014611329576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c4d87878787878787610c3e565b61134061180b565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610e18565b6113bb61180b565b73ffffffffffffffffffffffffffffffffffffffff811661140a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b61141381611b47565b50565b5f60208201803590600190839061142d9086612c61565b63ffffffff16815260208101919091526040015f20541492915050565b6114578383836001611e53565b505050565b5f8061146785611f98565b915081905083811015611241576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610bc4565b63ffffffff81165f90815260016020526040812054806109b1576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610bc4565b5f6115156115128787611fce565b90565b90505f6115408261152e6115298a8a611fe5565b612007565b61153b60208d018d612c61565b61203c565b90506028861115611626575f61157c61155f60608c0160408d0161330b565b61156c60208d018d612c61565b846115778c8c612070565b6120ba565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906115f79086908d905f908790600401613326565b5f604051808303815f87803b15801561160e575f80fd5b505af1158015611620573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61166c60208d018d612c61565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600660209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461175c578181101561174e576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610bc4565b61175c84848484035f611e53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166117b1576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8216611800576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b6114578383836120ec565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610e34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610bc4565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61190c85602001356118c686612293565b6118d360a0890189613199565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061230692505050565b90935090505f8161191e576001611921565b60025b90506119416119336020880188612c61565b826107f560808a018a613199565b60045490935073ffffffffffffffffffffffffffffffffffffffff1680156119f8576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906119b79088908890600401613364565b602060405180830381865afa1580156119d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f69190613388565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff168152602001611a71896114b0565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611aa69291906133a3565b6040805180830381865afa158015611ac0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae49190613474565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611b3c576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d5f83836120ec565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611c0a576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d825f836120ec565b5f5b8151811015611ce657611c46828281518110611c3557611c35613130565b602002602001015160400151611d16565b818181518110611c5857611c58613130565b60200260200101516040015160035f848481518110611c7957611c79613130565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611cb057611cb0613130565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611cdd91906134d2565b50600101611c17565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610e1891906135ee565b600281015161ffff8116600314610c8d57816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b611d63612747565b604080518082019091525f80825260208201525f80611d9833604089013560608a0135611d9360208c018c612c61565b612398565b915091505f80611da889846118b1565b9092509050611dd4611dbd60208b018b612c61565b8383611dce368d90038d018d613695565b8b6123bd565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611e22908d018d612c61565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff8416611ea2576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8316611ef1576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600660209081526040808320938716835292905220829055801561175c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611f8a91815260200190565b60405180910390a350505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000611fc481846136f2565b6109b1919061372a565b5f611fdc6020828486613089565b610c7491613741565b5f611ff4602860208486613089565b611ffd9161377d565b60c01c9392505050565b5f6109b17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff841661372a565b5f73ffffffffffffffffffffffffffffffffffffffff841661205e5761dead93505b6120688484611aed565b509092915050565b606061207f8260288186613089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b6060848484846040516020016120d394939291906137c5565b6040516020818303038152906040529050949350505050565b73ffffffffffffffffffffffffffffffffffffffff8316612123578060075f8282546121189190613842565b909155506121d39050565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260056020526040902054818110156121a8576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610bc4565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526005602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166121fc57600780548290039055612227565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526005602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161228691815260200190565b60405180910390a3505050565b5f806122bf7f0000000000000000000000000000000000000000000000000000000000000000846136f2565b905067ffffffffffffffff8111156109b1576040517fe2ce941300000000000000000000000000000000000000000000000000000000815260048101829052602401610bc4565b805160609015158061236757848460405160200161235392919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b60405160208183030381529060405261238e565b8484338560405160200161237e9493929190613855565b6040516020818303038152906040525b9150935093915050565b5f806123a585858561145c565b90925090506123b48683611bbb565b94509492505050565b6123c5612747565b5f6123d2845f01516124d0565b6020850151909150156123ec576123ec8460200151612510565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff1681526020016124498c6114b0565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b81526004016124849291906133a3565b60806040518083038185885af11580156124a0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906124c591906138ad565b979650505050505050565b5f81341461250c576040517f9f704120000000000000000000000000000000000000000000000000000000008152346004820152602401610bc4565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259e9190612e41565b905073ffffffffffffffffffffffffffffffffffffffff81166125ed576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805133602482018190527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff81811660448501526064808501889052855180860390910181526084909401909452602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001781528451610c8d96881695899361175c9388935f9283929091839182885af1806126c7576040513d5f823e3d81fd5b50505f513d915081156126de5780600114156126f8565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561175c576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610bc4565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161278660405180604001604052805f81526020015f81525090565b905290565b5f5b838110156127a557818101518382015260200161278d565b50505f910152565b5f81518084526127c481602086016020860161278b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610c7460208301846127ad565b73ffffffffffffffffffffffffffffffffffffffff81168114611413575f80fd5b5f806040838503121561283a575f80fd5b823561284581612808565b946020939093013593505050565b5f60e08284031215612863575f80fd5b50919050565b5f60208284031215612879575f80fd5b813567ffffffffffffffff81111561288f575f80fd5b610e5084828501612853565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612932578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261291f878901826127ad565b97505093820193908201906001016128d5565b50508751606088015250505060208501516080850152509050610e50565b5f60608284031215612863575f80fd5b5f8083601f840112612970575f80fd5b50813567ffffffffffffffff811115612987575f80fd5b60208301915083602082850101111561299e575f80fd5b9250929050565b5f805f805f805f60e0888a0312156129bb575f80fd5b6129c58989612950565b965060608801359550608088013567ffffffffffffffff808211156129e8575f80fd5b6129f48b838c01612960565b909750955060a08a01359150612a0982612808565b90935060c08901359080821115612a1e575f80fd5b50612a2b8a828b01612960565b989b979a50959850939692959293505050565b5f805f60608486031215612a50575f80fd5b8335612a5b81612808565b92506020840135612a6b81612808565b929592945050506040919091013590565b803563ffffffff81168114612a8f575f80fd5b919050565b5f8060408385031215612aa5575f80fd5b61284583612a7c565b8015158114611413575f80fd5b5f8060408385031215612acc575f80fd5b823567ffffffffffffffff811115612ae2575f80fd5b612aee85828601612853565b9250506020830135612aff81612aae565b809150509250929050565b8151815260208083015190820152604081016109b1565b803561ffff81168114612a8f575f80fd5b5f8060408385031215612b43575f80fd5b612b4c83612a7c565b9150612b5a60208401612b21565b90509250929050565b5f60208284031215612b73575f80fd5b8135610c7481612808565b5f805f8060a08587031215612b91575f80fd5b612b9b8686612950565b9350606085013567ffffffffffffffff811115612bb6575f80fd5b612bc287828801612960565b9094509250506080850135612bd681612808565b939692955090935050565b5f8083601f840112612bf1575f80fd5b50813567ffffffffffffffff811115612c08575f80fd5b6020830191508360208260051b850101111561299e575f80fd5b5f8060208385031215612c33575f80fd5b823567ffffffffffffffff811115612c49575f80fd5b612c5585828601612be1565b90969095509350505050565b5f60208284031215612c71575f80fd5b610c7482612a7c565b5f805f8060608587031215612c8d575f80fd5b612c9685612a7c565b9350612ca460208601612b21565b9250604085013567ffffffffffffffff811115612cbf575f80fd5b612ccb87828801612960565b95989497509550505050565b5f805f8385036080811215612cea575f80fd5b843567ffffffffffffffff811115612d00575f80fd5b612d0c87828801612853565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612d3e575f80fd5b506020840191506060840135612d5381612808565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff60208501511660208301526040840151612d99604084018280518252602090810151910152565b5082516080830152602083015160a0830152610c74565b5f8060408385031215612dc1575f80fd5b8235612dcc81612808565b91506020830135612aff81612808565b5f60608284031215612dec575f80fd5b610c748383612950565b600181811c90821680612e0a57607f821691505b602082108103612863577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208284031215612e51575f80fd5b8151610c7481612808565b5f60208284031215612e6c575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715612ec357612ec3612e73565b60405290565b6040805190810167ffffffffffffffff81118282101715612ec357612ec3612e73565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f3357612f33612e73565b604052919050565b5f67ffffffffffffffff821115612f5457612f54612e73565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612f9a57612f9a612e73565b8360051b6020612fab818301612eec565b868152918501918181019036841115612fc2575f80fd5b865b8481101561307d57803586811115612fda575f80fd5b88016060368290031215612fec575f80fd5b612ff4612ea0565b612ffd82612a7c565b815261300a868301612b21565b8682015260408083013589811115613020575f80fd5b929092019136601f840112613033575f80fd5b823561304661304182612f3b565b612eec565b8181523689838701011115613059575f80fd5b818986018a8301375f91810189019190915290820152845250918301918301612fc4565b50979650505050505050565b5f8085851115613097575f80fd5b838611156130a3575f80fd5b5050820193919092039150565b5f84516130c181846020890161278b565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610e506020830184866130d6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261318f575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126131cc575f80fd5b83018035915067ffffffffffffffff8211156131e6575f80fd5b60200191503681900382131561299e575f80fd5b67ffffffffffffffff81168114611413575f80fd5b63ffffffff61321d89612a7c565b168152602088013560208201525f6040890135613239816131fa565b67ffffffffffffffff811660408401525087606083015260e0608083015261326560e0830187896130d6565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c08401526132948185876130d6565b9a9950505050505050505050565b5f602082840312156132b2575f80fd5b815167ffffffffffffffff8111156132c8575f80fd5b8201601f810184136132d8575f80fd5b80516132e661304182612f3b565b8181528560208385010111156132fa575f80fd5b611ae482602083016020860161278b565b5f6020828403121561331b575f80fd5b8135610c74816131fa565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f610ceb60808301846127ad565b604081525f61337660408301856127ad565b8281036020840152611ae481856127ad565b5f60208284031215613398575f80fd5b8151610c7481612aae565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a060808401526133d860e08401826127ad565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a085015261341382826127ad565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215613456575f80fd5b61345e612ec9565b9050815181526020820151602082015292915050565b5f60408284031215613484575f80fd5b610c748383613446565b601f82111561145757805f5260205f20601f840160051c810160208510156134b35750805b601f840160051c820191505b818110156112e9575f81556001016134bf565b815167ffffffffffffffff8111156134ec576134ec612e73565b613500816134fa8454612df6565b8461348e565b602080601f831160018114613552575f841561351c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556135e6565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561359e5788860151825594840194600190910190840161357f565b50858210156135da57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015613687578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052613673818601836127ad565b968901969450505090860190600101613615565b509098975050505050505050565b5f604082840312156136a5575f80fd5b6136ad612ec9565b82358152602083013560208201528091505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f82613725577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109b1576109b16136c5565b803560208310156109b1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156137bd5780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161383281602c85016020870161278b565b91909101602c0195945050505050565b808201808211156109b1576109b16136c5565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f825161389d81604885016020870161278b565b9190910160480195945050505050565b5f608082840312156138bd575f80fd5b6138c5612ea0565b8251815260208301516138d7816131fa565b60208201526138e98460408501613446565b6040820152939250505056fea2646970667358221220a7e78c28d4976391911497373c3bfff426de060fa72d1fbc537e431a0fece95964736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b1c38038062001b1c833981016040819052620000339162000240565b808383600362000044838262000351565b50600462000053828262000351565b5050505f8062000069836200009b60201b60201c565b91509150816200007b5760126200007d565b805b60ff1660a05250506001600160a01b03166080525062000452915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691620000e3916200041d565b5f60405180830381855afa9150503d805f81146200011d576040519150601f19603f3d011682016040523d82523d5f602084013e62000122565b606091505b50915091508180156200013757506020815110155b156200016e575f818060200190518101906200015491906200043a565b905060ff81116200016c576001969095509350505050565b505b505f9485945092505050565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015620001aa57818101518382015260200162000190565b50505f910152565b5f82601f830112620001c2575f80fd5b81516001600160401b0380821115620001df57620001df6200017a565b604051601f8301601f19908116603f011681019082821181831017156200020a576200020a6200017a565b8160405283815286602085880101111562000223575f80fd5b620002368460208301602089016200018e565b9695505050505050565b5f805f6060848603121562000253575f80fd5b83516001600160401b03808211156200026a575f80fd5b6200027887838801620001b2565b945060208601519150808211156200028e575f80fd5b506200029d86828701620001b2565b604086015190935090506001600160a01b0381168114620002bc575f80fd5b809150509250925092565b600181811c90821680620002dc57607f821691505b602082108103620002fb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200034c57805f5260205f20601f840160051c81016020851015620003285750805b601f840160051c820191505b8181101562000349575f815560010162000334565b50505b505050565b81516001600160401b038111156200036d576200036d6200017a565b62000385816200037e8454620002c7565b8462000301565b602080601f831160018114620003bb575f8415620003a35750858301515b5f19600386901b1c1916600185901b17855562000415565b5f85815260208120601f198616915b82811015620003eb57888601518255948401946001909101908401620003ca565b50858210156200040957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251620004308184602087016200018e565b9190910192915050565b5f602082840312156200044b575f80fd5b5051919050565b60805160a051611693620004895f395f6105d301525f818161027c0152818161043101528181610a880152610bd601526116935ff3fe608060405234801561000f575f80fd5b50600436106101b0575f3560e01c806370a08231116100f3578063ba08765211610093578063ce96cb771161006e578063ce96cb77146103c3578063d905777e146103d6578063dd62ed3e146103e9578063ef8b30f7146103b0575f80fd5b8063ba0876521461039d578063c63d75b6146102a6578063c6e6f592146103b0575f80fd5b80639dc29fac116100ce5780639dc29fac14610351578063a9059cbb14610364578063b3d7f6b914610377578063b460af941461038a575f80fd5b806370a082311461030157806394bf804d1461033657806395d89b4114610349575f80fd5b806323b872dd1161015e578063402d267d11610139578063402d267d146102a657806340c10f19146102d95780634cdad506146101e45780636e553f65146102ee575f80fd5b806323b872dd14610235578063313ce5671461024857806338d52e0f14610262575f80fd5b8063095ea7b31161018e578063095ea7b3146101f75780630a28a4771461021a57806318160ddd1461022d575f80fd5b806301e1d114146101b457806306fdde03146101cf57806307a2d13a146101e4575b5f80fd5b6101bc61042e565b6040519081526020015b60405180910390f35b6101d76104e3565b6040516101c69190611222565b6101bc6101f236600461128c565b610573565b61020a6102053660046112cb565b610584565b60405190151581526020016101c6565b6101bc61022836600461128c565b61059b565b6002546101bc565b61020a6102433660046112f3565b6105a7565b6102506105cc565b60405160ff90911681526020016101c6565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c6565b6101bc6102b436600461132c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b6102ec6102e73660046112cb565b6105f7565b005b6101bc6102fc366004611345565b610605565b6101bc61030f36600461132c565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b6101bc610344366004611345565b610655565b6101d761068f565b6102ec61035f3660046112cb565b61069e565b61020a6103723660046112cb565b6106a8565b6101bc61038536600461128c565b6106b5565b6101bc61039836600461136f565b6106c1565b6101bc6103ab36600461136f565b610750565b6101bc6103be36600461128c565b6107d6565b6101bc6103d136600461132c565b6107e1565b6101bc6103e436600461132c565b610810565b6101bc6103f73660046113a8565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b5f7f00000000000000000000000000000000000000000000000000000000000000006040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa1580156104ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104de91906113d0565b905090565b6060600380546104f2906113e7565b80601f016020809104026020016040519081016040528092919081815260200182805461051e906113e7565b80156105695780601f1061054057610100808354040283529160200191610569565b820191905f5260205f20905b81548152906001019060200180831161054c57829003601f168201915b5050505050905090565b5f61057e825f61083a565b92915050565b5f33610591818585610872565b5060019392505050565b5f61057e826001610884565b5f336105b48582856108b3565b6105bf858585610980565b60019150505b9392505050565b5f6104de817f0000000000000000000000000000000000000000000000000000000000000000611465565b6106018282610a29565b5050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610635565b60405180910390fd5b5f61063f856107d6565b905061064d33858784610a83565b949350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f610681856106b5565b905061064d33858388610a83565b6060600480546104f2906113e7565b6106018282610b2f565b5f33610591818585610980565b5f61057e82600161083a565b5f806106cc836107e1565b90508085111561072e576040517ffe9cceec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107388661059b565b90506107473386868985610b89565b95945050505050565b5f8061075b83610810565b9050808511156107bd576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107c786610573565b9050610747338686848a610b89565b5f61057e825f610884565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e905f61083a565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e565b5f6105c561084661042e565b61085190600161147e565b61085c5f600a6115af565b600254610869919061147e565b85919085610c8a565b61087f8383836001610ccc565b505050565b5f6105c561089382600a6115af565b6002546108a0919061147e565b6108a861042e565b61086990600161147e565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461097a578181101561096c576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018290526044810183905260640161062c565b61097a84848484035f610ccc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109cf576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8216610a1e576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b61087f838383610e03565b73ffffffffffffffffffffffffffffffffffffffff8216610a78576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b6106015f8383610e03565b610aaf7f0000000000000000000000000000000000000000000000000000000000000000853085610faa565b610ab98382610a29565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051610b21929190918252602082015260400190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b7e576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b610601825f83610e03565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610bc757610bc78386836108b3565b610bd18382610b2f565b610bfc7f00000000000000000000000000000000000000000000000000000000000000008584611033565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051610c7b929190918252602082015260400190565b60405180910390a45050505050565b5f610cb7610c9783611071565b8015610cb257505f8480610cad57610cad6115bd565b868809115b151590565b610cc286868661109d565b610747919061147e565b73ffffffffffffffffffffffffffffffffffffffff8416610d1b576040517fe602df050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8316610d6a576040517f94280d620000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600160209081526040808320938716835292905220829055801561097a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b2191815260200190565b73ffffffffffffffffffffffffffffffffffffffff8316610e3a578060025f828254610e2f919061147e565b90915550610eea9050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020819052604090205481811015610ebf576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602481018290526044810183905260640161062c565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610f1357600280548290039055610f3e565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f9d91815260200190565b60405180910390a3505050565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283811660448301526064820183905261097a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611172565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261087f91859182169063a9059cbb90606401610fec565b5f6002826003811115611086576110866115ea565b6110909190611617565b60ff166001149050919050565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f036110f0578382816110e6576110e66115bd565b04925050506105c5565b808411611107576111076003851502601118611211565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f8060205f8451602086015f885af180611191576040513d5f823e3d81fd5b50505f513d915081156111a85780600114156111c2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561097a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161062c565b634e487b715f52806020526024601cfd5b5f602080835283518060208501525f5b8181101561124e57858101830151858201604001528201611232565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f6020828403121561129c575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112c6575f80fd5b919050565b5f80604083850312156112dc575f80fd5b6112e5836112a3565b946020939093013593505050565b5f805f60608486031215611305575f80fd5b61130e846112a3565b925061131c602085016112a3565b9150604084013590509250925092565b5f6020828403121561133c575f80fd5b6105c5826112a3565b5f8060408385031215611356575f80fd5b82359150611366602084016112a3565b90509250929050565b5f805f60608486031215611381575f80fd5b83359250611391602085016112a3565b915061139f604085016112a3565b90509250925092565b5f80604083850312156113b9575f80fd5b6113c2836112a3565b9150611366602084016112a3565b5f602082840312156113e0575f80fd5b5051919050565b600181811c908216806113fb57607f821691505b602082108103611432577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff818116838216019081111561057e5761057e611438565b8082018082111561057e5761057e611438565b600181815b808511156114ea57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156114d0576114d0611438565b808516156114dd57918102915b93841c9390800290611496565b509250929050565b5f826115005750600161057e565b8161150c57505f61057e565b8160018114611522576002811461152c57611548565b600191505061057e565b60ff84111561153d5761153d611438565b50506001821b61057e565b5060208310610133831016604e8410600b841016171561156b575081810a61057e565b6115758383611491565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156115a7576115a7611438565b029392505050565b5f6105c560ff8416836114f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff83168061164e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff8416069150509291505056fea2646970667358221220e4c7204716e83cc6436d4c089c98eaebf1301b2ac725b313f068e28e347d110264736f6c6343000816003360e060405234801562000010575f80fd5b506040516200355f3803806200355f833981016040819052620000339162000240565b828282826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000099919062000287565b8282818181813380620000c557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000d081620001d0565b506001600160a01b038083166080528116620000ff57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b15801562000144575f80fd5b505af115801562000157573d5f803e3d5ffd5b50505050505050506200016f6200021f60201b60201c565b60ff168360ff16101562000196576040516301e9714b60e41b815260040160405180910390fd5b620001a3600684620002c4565b620001b090600a620003df565b60a0525050506001600160a01b0390921660c05250620003ef9350505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b80516001600160a01b03811681146200023b575f80fd5b919050565b5f805f6060848603121562000253575f80fd5b6200025e8462000224565b92506200026e6020850162000224565b91506200027e6040850162000224565b90509250925092565b5f6020828403121562000298575f80fd5b815160ff81168114620002a9575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b60ff8281168282160390811115620002e057620002e0620002b0565b92915050565b600181815b808511156200032657815f19048211156200030a576200030a620002b0565b808516156200031857918102915b93841c9390800290620002eb565b509250929050565b5f826200033e57506001620002e0565b816200034c57505f620002e0565b8160018114620003655760028114620003705762000390565b6001915050620002e0565b60ff841115620003845762000384620002b0565b50506001821b620002e0565b5060208310610133831016604e8410600b8410161715620003b5575081810a620002e0565b620003c18383620002e6565b805f1904821115620003d757620003d7620002b0565b029392505050565b5f620002a960ff8416836200032e565b60805160a05160c0516130f16200046e5f395f818161069e015281816119b40152611b9001525f8181610514015281816118f10152818161196a0152611a6601525f81816104110152818161088301528181610f6d015281816112810152818161156601528181611bf201528181611de90152611ee001526130f15ff3fe6080604052600436106101f5575f3560e01c806382413eac11610117578063bc70b354116100ac578063d045a0dc1161007c578063f2fde38b11610062578063f2fde38b14610671578063fc0c546a14610690578063ff7bd03d146106c2575f80fd5b8063d045a0dc1461063f578063d424388514610652575f80fd5b8063bc70b354146105cd578063bd815db0146105ec578063c7c7f5b3146105ff578063ca5eb5e114610620575f80fd5b80639f68b964116100e75780639f68b96414610544578063b731ea0a14610557578063b98bd07014610583578063bb0b6a53146105a2575f80fd5b806382413eac146104a0578063857749b0146104bf5780638da5cb5b146104da578063963efcaa14610503575f80fd5b80633b6f743b1161018d5780635e280f111161015d5780635e280f11146104005780636fc1b31e14610433578063715018a6146104525780637d25a05e14610466575f80fd5b80633b6f743b1461035157806352ae28791461037d5780635535d4611461038f5780635a0dfe4d146103bb575f80fd5b8063156a0d0f116101c8578063156a0d0f146102bd57806317442b70146102fd5780631f5e13341461031e5780633400288b14610332575f80fd5b80630d35b415146101f9578063111ecdad1461023057806313137d6514610281578063134d4f2514610296575b5f80fd5b348015610204575f80fd5b50610218610213366004611ffe565b6106e1565b6040516102279392919061209b565b60405180910390f35b34801561023b575f80fd5b5060045461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610227565b61029461028f3660046121c6565b610881565b005b3480156102a1575f80fd5b506102aa600281565b60405161ffff9091168152602001610227565b3480156102c8575f80fd5b50604080517f02e49c2c0000000000000000000000000000000000000000000000000000000081526001602082015201610227565b348015610308575f80fd5b5060408051600181526002602082015201610227565b348015610329575f80fd5b506102aa600181565b34801561033d575f80fd5b5061029461034c366004612277565b610980565b34801561035c575f80fd5b5061037061036b3660046122ac565b610996565b60405161022791906122fb565b348015610388575f80fd5b503061025c565b34801561039a575f80fd5b506103ae6103a9366004612323565b6109fc565b6040516102279190612354565b3480156103c6575f80fd5b506103f06103d5366004612277565b63ffffffff919091165f908152600160205260409020541490565b6040519015158152602001610227565b34801561040b575f80fd5b5061025c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043e575f80fd5b5061029461044d366004612366565b610a9e565b34801561045d575f80fd5b50610294610b20565b348015610471575f80fd5b50610487610480366004612277565b5f92915050565b60405167ffffffffffffffff9091168152602001610227565b3480156104ab575f80fd5b506103f06104ba366004612381565b610b33565b3480156104ca575f80fd5b5060405160068152602001610227565b3480156104e5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661025c565b34801561050e575f80fd5b506105367f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610227565b34801561054f575f80fd5b5060016103f0565b348015610562575f80fd5b5060025461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561058e575f80fd5b5061029461059d366004612425565b610b55565b3480156105ad575f80fd5b506105366105bc366004612464565b60016020525f908152604090205481565b3480156105d8575f80fd5b506103ae6105e736600461247d565b610b6f565b6102946105fa366004612425565b610d29565b61061261060d3660046124da565b610eed565b604051610227929190612561565b34801561062b575f80fd5b5061029461063a366004612366565b610f20565b61029461064d3660046121c6565b610fc7565b34801561065d575f80fd5b5061029461066c366004612366565b61100f565b34801561067c575f80fd5b5061029461068b366004612366565b61108a565b34801561069b575f80fd5b507f000000000000000000000000000000000000000000000000000000000000000061025c565b3480156106cd575f80fd5b506103f06106dc3660046125b3565b6110ed565b604080518082019091525f8082526020820152606061071160405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078091906125cd565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ec91906125e8565b604080518082018252848152602080820184905282515f8082529181019093529097509192509061083f565b604080518082019091525f8152606060208201528152602001906001900390816108185790505b5093505f80610863604089013560608a013561085e60208c018c612464565b611121565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146108f7576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b602087018035906109119061090c908a612464565b611175565b14610968576109236020880188612464565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602088013560248201526044016108ee565b610977878787878787876111c9565b50505050505050565b61098861135a565b61099282826113ac565b5050565b604080518082019091525f80825260208201525f6109c46040850135606086013561085e6020880188612464565b9150505f806109d38684611400565b90925090506109f06109e86020880188612464565b838388611551565b93505050505b92915050565b600360209081525f928352604080842090915290825290208054610a1f9061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4b9061262c565b8015610a965780601f10610a6d57610100808354040283529160200191610a96565b820191905f5260205f20905b815481529060010190602001808311610a7957829003601f168201915b505050505081565b610aa661135a565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610b2861135a565b610b315f61163c565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b610b5d61135a565b610992610b6a8284612757565b6116b0565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ba29061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bce9061262c565b8015610c195780601f10610bf057610100808354040283529160200191610c19565b820191905f5260205f20905b815481529060010190602001808311610bfc57829003601f168201915b5050505050905080515f03610c675783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610b4d9350505050565b5f839003610c76579050610b4d565b60028310610cf357610cbc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506117b192505050565b80610cca8460028188612860565b604051602001610cdc93929190612887565b604051602081830303815290604052915050610b4d565b83836040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9291906128f4565b5f5b81811015610e2c5736838383818110610d4657610d46612907565b9050602002810190610d589190612934565b9050610d8a610d6a6020830183612464565b602083013563ffffffff919091165f908152600160205260409020541490565b610d945750610e24565b3063d045a0dc60c08301358360a0810135610db3610100830183612970565b610dc4610100890160e08a01612366565b610dd26101208a018a612970565b6040518963ffffffff1660e01b8152600401610df497969594939291906129e6565b5f604051808303818588803b158015610e0b575f80fd5b505af1158015610e1d573d5f803e3d5ffd5b5050505050505b600101610d2b565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015610e75573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610eba9190810190612a79565b6040517f8351eea70000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b610ef5611fa4565b604080518082019091525f8082526020820152610f138585856117f6565b915091505b935093915050565b610f2861135a565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b158015610fae575f80fd5b505af1158015610fc0573d5f803e3d5ffd5b5050505050565b333014611000576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097787878787878787610968565b61101761135a565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610b15565b61109261135a565b73ffffffffffffffffffffffffffffffffffffffff81166110e1576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016108ee565b6110ea8161163c565b50565b5f6020820180359060019083906111049086612464565b63ffffffff16815260208101919091526040015f20541492915050565b5f8061112c856118ee565b915081905083811015610f18576040517f71c4efed00000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016108ee565b63ffffffff81165f90815260016020526040812054806109f6576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff841660048201526024016108ee565b5f6111da6111d78787611924565b90565b90505f611205826111f36111ee8a8a611942565b611964565b61120060208d018d612464565b611999565b905060288611156112eb575f61124161122460608c0160408d01612ae2565b61123160208d018d612464565b8461123c8c8c6119e3565b611a2d565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112bc9086908d905f908790600401612afd565b5f604051808303815f87803b1580156112d3575f80fd5b505af11580156112e5573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61133160208d018d612464565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b31576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016108ee565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61145b856020013561141586611a5f565b61142260a0890189612970565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611ad292505050565b90935090505f8161146d576001611470565b60025b90506114906114826020880188612464565b826105e760808a018a612970565b60045490935073ffffffffffffffffffffffffffffffffffffffff168015611547576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906115069088908890600401612b45565b602060405180830381865afa158015611521573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115459190612b69565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff1681526020016115c089611175565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016115f5929190612b84565b6040805180830381865afa15801561160f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116339190612c55565b95945050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b8151811015611781576116e18282815181106116d0576116d0612907565b6020026020010151604001516117b1565b8181815181106116f3576116f3612907565b60200260200101516040015160035f84848151811061171457611714612907565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f84848151811061174b5761174b612907565b60200260200101516020015161ffff1661ffff1681526020019081526020015f2090816117789190612cb3565b506001016116b2565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610b159190612dcf565b600281015161ffff811660031461099257816040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b6117fe611fa4565b604080518082019091525f80825260208201525f8061183333604089013560608a013561182e60208c018c612464565b611b64565b915091505f806118438984611400565b909250905061186f61185860208b018b612464565b8383611869368d90038d018d612e76565b8b611bc1565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118bd908d018d612464565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b5f7f000000000000000000000000000000000000000000000000000000000000000061191a8184612ea6565b6109f69190612ede565b5f6119326020828486612860565b61193b91612f1a565b9392505050565b5f611951602860208486612860565b61195a91612f56565b60c01c9392505050565b5f6109f67f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff8416612ede565b5f6119db73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585611cd4565b509092915050565b60606119f28260288186612860565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606084848484604051602001611a469493929190612f9e565b6040516020818303038152906040529050949350505050565b5f80611a8b7f000000000000000000000000000000000000000000000000000000000000000084612ea6565b905067ffffffffffffffff8111156109f6576040517fe2ce9413000000000000000000000000000000000000000000000000000000008152600481018290526024016108ee565b8051606090151580611b33578484604051602001611b1f92919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b604051602081830303815290604052611b5a565b84843385604051602001611b4a949392919061301b565b6040516020818303038152906040525b9150935093915050565b5f80611b71858585611121565b9092509050611bb873ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016873085611d5a565b94509492505050565b611bc9611fa4565b5f611bd6845f0151611da6565b602085015190915015611bf057611bf08460200151611de6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff168152602001611c4d8c611175565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b8152600401611c88929190612b84565b60806040518083038185885af1158015611ca4573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611cc99190613073565b979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052611d5591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611f05565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052611da09186918216906323b872dd90608401611d0e565b50505050565b5f813414611de2576040517f9f7041200000000000000000000000000000000000000000000000000000000081523460048201526024016108ee565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7491906125cd565b905073ffffffffffffffffffffffffffffffffffffffff8116611ec3576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61099273ffffffffffffffffffffffffffffffffffffffff8216337f000000000000000000000000000000000000000000000000000000000000000085611d5a565b5f8060205f8451602086015f885af180611f24576040513d5f823e3d81fd5b50505f513d91508115611f3b578060011415611f55565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611da0576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016108ee565b60405180606001604052805f80191681526020015f67ffffffffffffffff168152602001611fe360405180604001604052805f81526020015f81525090565b905290565b5f60e08284031215611ff8575f80fd5b50919050565b5f6020828403121561200e575f80fd5b813567ffffffffffffffff811115612024575f80fd5b610b4d84828501611fe8565b5f5b8381101561204a578181015183820152602001612032565b50505f910152565b5f8151808452612069816020860160208601612030565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612132578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261211f87890182612052565b97505093820193908201906001016120d5565b50508751606088015250505060208501516080850152509050610b4d565b5f60608284031215611ff8575f80fd5b5f8083601f840112612170575f80fd5b50813567ffffffffffffffff811115612187575f80fd5b60208301915083602082850101111561219e575f80fd5b9250929050565b73ffffffffffffffffffffffffffffffffffffffff811681146110ea575f80fd5b5f805f805f805f60e0888a0312156121dc575f80fd5b6121e68989612150565b965060608801359550608088013567ffffffffffffffff80821115612209575f80fd5b6122158b838c01612160565b909750955060a08a0135915061222a826121a5565b90935060c0890135908082111561223f575f80fd5b5061224c8a828b01612160565b989b979a50959850939692959293505050565b803563ffffffff81168114612272575f80fd5b919050565b5f8060408385031215612288575f80fd5b6122918361225f565b946020939093013593505050565b80151581146110ea575f80fd5b5f80604083850312156122bd575f80fd5b823567ffffffffffffffff8111156122d3575f80fd5b6122df85828601611fe8565b92505060208301356122f08161229f565b809150509250929050565b8151815260208083015190820152604081016109f6565b803561ffff81168114612272575f80fd5b5f8060408385031215612334575f80fd5b61233d8361225f565b915061234b60208401612312565b90509250929050565b602081525f61193b6020830184612052565b5f60208284031215612376575f80fd5b813561193b816121a5565b5f805f8060a08587031215612394575f80fd5b61239e8686612150565b9350606085013567ffffffffffffffff8111156123b9575f80fd5b6123c587828801612160565b90945092505060808501356123d9816121a5565b939692955090935050565b5f8083601f8401126123f4575f80fd5b50813567ffffffffffffffff81111561240b575f80fd5b6020830191508360208260051b850101111561219e575f80fd5b5f8060208385031215612436575f80fd5b823567ffffffffffffffff81111561244c575f80fd5b612458858286016123e4565b90969095509350505050565b5f60208284031215612474575f80fd5b61193b8261225f565b5f805f8060608587031215612490575f80fd5b6124998561225f565b93506124a760208601612312565b9250604085013567ffffffffffffffff8111156124c2575f80fd5b6124ce87828801612160565b95989497509550505050565b5f805f83850360808112156124ed575f80fd5b843567ffffffffffffffff811115612503575f80fd5b61250f87828801611fe8565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612541575f80fd5b506020840191506060840135612556816121a5565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff6020850151166020830152604084015161259c604084018280518252602090810151910152565b5082516080830152602083015160a083015261193b565b5f606082840312156125c3575f80fd5b61193b8383612150565b5f602082840312156125dd575f80fd5b815161193b816121a5565b5f602082840312156125f8575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b600181811c9082168061264057607f821691505b602082108103611ff8577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b6040516060810167ffffffffffffffff8111828210171561269a5761269a6125ff565b60405290565b6040805190810167ffffffffffffffff8111828210171561269a5761269a6125ff565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561270a5761270a6125ff565b604052919050565b5f67ffffffffffffffff82111561272b5761272b6125ff565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612771576127716125ff565b8360051b60206127828183016126c3565b868152918501918181019036841115612799575f80fd5b865b84811015612854578035868111156127b1575f80fd5b880160603682900312156127c3575f80fd5b6127cb612677565b6127d48261225f565b81526127e1868301612312565b86820152604080830135898111156127f7575f80fd5b929092019136601f84011261280a575f80fd5b823561281d61281882612712565b6126c3565b8181523689838701011115612830575f80fd5b818986018a8301375f9181018901919091529082015284525091830191830161279b565b50979650505050505050565b5f808585111561286e575f80fd5b8386111561287a575f80fd5b5050820193919092039150565b5f8451612898818460208901612030565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610b4d6020830184866128ad565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112612966575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129a3575f80fd5b83018035915067ffffffffffffffff8211156129bd575f80fd5b60200191503681900382131561219e575f80fd5b67ffffffffffffffff811681146110ea575f80fd5b63ffffffff6129f48961225f565b168152602088013560208201525f6040890135612a10816129d1565b67ffffffffffffffff811660408401525087606083015260e06080830152612a3c60e0830187896128ad565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c0840152612a6b8185876128ad565b9a9950505050505050505050565b5f60208284031215612a89575f80fd5b815167ffffffffffffffff811115612a9f575f80fd5b8201601f81018413612aaf575f80fd5b8051612abd61281882612712565b818152856020838501011115612ad1575f80fd5b611633826020830160208601612030565b5f60208284031215612af2575f80fd5b813561193b816129d1565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f612b3b6080830184612052565b9695505050505050565b604081525f612b576040830185612052565b82810360208401526116338185612052565b5f60208284031215612b79575f80fd5b815161193b8161229f565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a06080840152612bb960e0840182612052565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a0850152612bf48282612052565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215612c37575f80fd5b612c3f6126a0565b9050815181526020820151602082015292915050565b5f60408284031215612c65575f80fd5b61193b8383612c27565b601f821115611d5557805f5260205f20601f840160051c81016020851015612c945750805b601f840160051c820191505b81811015610fc0575f8155600101612ca0565b815167ffffffffffffffff811115612ccd57612ccd6125ff565b612ce181612cdb845461262c565b84612c6f565b602080601f831160018114612d33575f8415612cfd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612dc7565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612d7f57888601518255948401946001909101908401612d60565b5085821015612dbb57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015612e68578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612e5481860183612052565b968901969450505090860190600101612df6565b509098975050505050505050565b5f60408284031215612e86575f80fd5b612e8e6126a0565b82358152602083013560208201528091505092915050565b5f82612ed9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109f6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b803560208310156109f6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015612f965780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161300b81602c850160208701612030565b91909101602c0195945050505050565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f8251613063816048850160208701612030565b9190910160480195945050505050565b5f60808284031215613083575f80fd5b61308b612677565b82518152602083015161309d816129d1565b60208201526130af8460408501612c27565b6040820152939250505056fea26469706673582212201d2eeb249efab86d32800173e736d788fc450154b978b7660829bc5ead288d1364736f6c6343000816003361016060405234801562000011575f80fd5b50604051620024be380380620024be833981016040819052620000349162000608565b60015f556001600160a01b03808416608052821660a081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa15801562000087573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000659565b6001600160a01b0390811660c052811660e081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa158015620000fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000122919062000659565b6001600160a01b0316610100816001600160a01b03168152505060a0516001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a1919062000659565b6001600160a01b03166101208190526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620001ea573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200021091906200067e565b63ffffffff1661014052608051610100516001600160a01b039081169116146200026c576101005160805160405163070bc55b60e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b6080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d1919062000659565b6001600160a01b031660c0516001600160a01b031614620003815760c0516080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000354919062000659565b60405163ba9d665f60e01b81526001600160a01b0392831660048201529116602482015260440162000263565b60e0516001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e69190620006a3565b620004145760e051604051637e0a8a5760e11b81526001600160a01b03909116600482015260240162000263565b60c05160405163095ea7b360e01b81526001600160a01b0385811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af115801562000465573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200048b9190620006a3565b506101005160405163095ea7b360e01b81526001600160a01b0383811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620004de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005049190620006a3565b50816001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000542573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005689190620006a3565b15620005e75760c05160405163095ea7b360e01b81526001600160a01b0384811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620005bf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005e59190620006a3565b505b505050620006c4565b6001600160a01b038116811462000605575f80fd5b50565b5f805f606084860312156200061b575f80fd5b83516200062881620005f0565b60208501519093506200063b81620005f0565b60408501519092506200064e81620005f0565b809150509250925092565b5f602082840312156200066a575f80fd5b81516200067781620005f0565b9392505050565b5f602082840312156200068f575f80fd5b815163ffffffff8116811462000677575f80fd5b5f60208284031215620006b4575f80fd5b8151801515811462000677575f80fd5b60805160a05160c05160e051610100516101205161014051611d246200079a5f395f81816102a5015261111301525f8181610200015261096b01525f818161027201528181610375015261119101525f818161018701528181610a1d0152610d4d01525f81816101540152818161031101526111b701525f818160e2015281816103be015281816108dd015281816109c601528181610da7015261113e01525f81816101ba015281816104560152818161055701528181610627015281816107230152818161104201526113290152611d245ff3fe6080604052600436106100c6575f3560e01c80636fad06f511610071578063a99ecc541161004c578063a99ecc5414610261578063aa72fe3f14610294578063d0a10260146102dc575f80fd5b80636fad06f5146101ef5780637e6e1e10146102225780639a6b198c1461024e575f80fd5b8063369caf83116100a1578063369caf8314610176578063411557d1146101a957806353174fa4146101dc575f80fd5b80630bfec755146100d157806319197ec61461012e5780631df34fa314610143575f80fd5b366100cd57005b5f80fd5b3480156100dc575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c36600461160e565b6102ef565b005b34801561014e575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b348015610181575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b4575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b6101416101ea36600461160e565b610353565b3480156101fa575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561022d575f80fd5b5061024161023c366004611661565b6103a9565b60405161012591906116c5565b61014161025c3660046116dc565b610843565b34801561026c575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561029f575f80fd5b506102c77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610125565b6101416102ea36600461177c565b610953565b6102f7610c50565b61033973ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d20565b61034e60015f55565b505050565b61035b610c50565b61039d73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d7a565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036105e0576040517fd905777e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063d905777e90602401602060405180830381865afa15801561049d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c19190611813565b905080841115610528576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716600482015260248101859052604481018290526064015b60405180910390fd5b6040517f4cdad506000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634cdad50690602401602060405180830381865afa1580156105b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d59190611813565b6040840152506107a8565b6040517f402d267d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063402d267d90602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611813565b9050808411156106f4576040517f79012fb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602481018590526044810182905260640161051f565b6040517fef8b30f7000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef8b30f790602401602060405180830381865afa15801561077d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a19190611813565b6040840152505b6040517f3b6f743b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690633b6f743b906107fc9085905f9060040161190a565b6040805180830381865afa158015610816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a919061197a565b95945050505050565b33301461087e576040517fa19dbf0000000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b5f808380602001905181019061089491906119e9565b91509150803410156108db576040517f7cb769dc0000000000000000000000000000000000000000000000000000000081526004810182905234602482015260440161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361093f5761093a85848432610d20565b61094b565b61094b85848432610d7a565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146109c4576040517f91ac5e4f00000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015610a6c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15610abb576040517f84fb3f0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816600482015260240161051f565b5f610ac68686610dcd565b90505f610ad38787610dee565b90505f610ae08888610dfd565b6040517f9a6b198c0000000000000000000000000000000000000000000000000000000081529091503090639a6b198c903490610b27908e90889087908990600401611ad0565b5f604051808303818588803b158015610b3e575f80fd5b505af193505050508015610b50575060015b610c19573d808015610b7d576040519150601f19603f3d011682016040523d82523d5f602084013e610b82565b606091505b507f7cb769dc00000000000000000000000000000000000000000000000000000000610bad82611b15565b7fffffffff000000000000000000000000000000000000000000000000000000001603610bdc57805181602001fd5b610be98b8a8a8632610e47565b6040518a907ffe509803c09416b28ff3d8f690c8b0c61462a892c46d5430c8fb20abe472daf0905f90a250610c44565b60405189907f27b5aea9f5736c02241d8a0272e9ec988ea44cf85c4b4760329431aa19678394905f90a25b50505050505050505050565b60025f5403610c8b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052610d1a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610f6c565b50505050565b5f610d2b858561100b565b9050610d3b8184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5050505050565b5f610d8585856112eb565b9050610d958184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5f610ddc604c602c8486611b64565b610de591611b8b565b90505b92915050565b5f610ddc602c600c8486611b64565b6060610e0c82604c8186611b64565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b610e8c6040518060e001604052805f63ffffffff1681526020015f80191681526020015f81526020015f81526020016060815260200160608152602001606081525090565b610e96858561136d565b63ffffffff168152610ea88585610dcd565b602080830191909152604080830185905280518082018252348082525f9382019390935290517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89169263c7c7f5b3929091610f219186918890600401611bc7565b60c06040518083038185885af1158015610f3d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f629190611c16565b5050505050505050565b5f8060205f8451602086015f885af180610f8b576040513d5f823e3d81fd5b50505f513d91508115610fa2578060011415610fbc565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610d1a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161051f565b6040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018290523060248201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636e553f65906044015b6020604051808303815f875af115801561109e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de59190611813565b80821015611106576040517f71c4efed000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161051f565b5050565b815163ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116911603611242575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146111b5577f00000000000000000000000000000000000000000000000000000000000000006111d7565b7f00000000000000000000000000000000000000000000000000000000000000005b90503415611211576040517f7578d2bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1a61121f846020015190565b604085015173ffffffffffffffffffffffffffffffffffffffff8416919061138f565b604080518082018252348082525f602083015291517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169263c7c7f5b39290916112aa9187918790600401611bc7565b60c06040518083038185885af11580156112c6573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d739190611c16565b6040517fba08765200000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ba08765290606401611082565b5f61137c600c60088486611b64565b61138591611ca6565b60e01c9392505050565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261034e91859182169063a9059cbb90606401610cd3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff8111828210171561141d5761141d6113cd565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561146a5761146a6113cd565b604052919050565b63ffffffff81168114611483575f80fd5b50565b803561149181611472565b919050565b5f67ffffffffffffffff8211156114af576114af6113cd565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126114ea575f80fd5b81356114fd6114f882611496565b611423565b818152846020838601011115611511575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0828403121561153d575f80fd5b6115456113fa565b905061155082611486565b8152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff8082111561158a575f80fd5b611596858386016114db565b608084015260a08401359150808211156115ae575f80fd5b6115ba858386016114db565b60a084015260c08401359150808211156115d2575f80fd5b506115df848285016114db565b60c08301525092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611491575f80fd5b5f805f60608486031215611620575f80fd5b83359250602084013567ffffffffffffffff81111561163d575f80fd5b6116498682870161152d565b925050611658604085016115eb565b90509250925092565b5f805f8060808587031215611674575f80fd5b61167d856115eb565b935061168b602086016115eb565b925060408501359150606085013567ffffffffffffffff8111156116ad575f80fd5b6116b98782880161152d565b91505092959194509250565b815181526020808301519082015260408101610de8565b5f805f80608085870312156116ef575f80fd5b6116f8856115eb565b935060208501359250604085013567ffffffffffffffff81111561171a575f80fd5b611726878288016114db565b949793965093946060013593505050565b5f8083601f840112611747575f80fd5b50813567ffffffffffffffff81111561175e575f80fd5b602083019150836020828501011115611775575f80fd5b9250929050565b5f805f805f805f60a0888a031215611792575f80fd5b61179b886115eb565b965060208801359550604088013567ffffffffffffffff808211156117be575f80fd5b6117ca8b838c01611737565b90975095508591506117de60608b016115eb565b945060808a01359150808211156117f3575f80fd5b506118008a828b01611737565b989b979a50959850939692959293505050565b5f60208284031215611823575f80fd5b5051919050565b5f5b8381101561184457818101518382015260200161182c565b50505f910152565b5f815180845261186381602086016020860161182a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526118d760e085018261184c565b905060a083015184820360a08601526118f0828261184c565b91505060c083015184820360c086015261083a828261184c565b604081525f61191c6040830185611895565b905082151560208301529392505050565b5f6040828403121561193d575f80fd5b6040516040810181811067ffffffffffffffff82111715611960576119606113cd565b604052825181526020928301519281019290925250919050565b5f6040828403121561198a575f80fd5b610de5838361192d565b805161149181611472565b5f82601f8301126119ae575f80fd5b81516119bc6114f882611496565b8181528460208386010111156119d0575f80fd5b6119e182602083016020870161182a565b949350505050565b5f80604083850312156119fa575f80fd5b825167ffffffffffffffff80821115611a11575f80fd5b9084019060e08287031215611a24575f80fd5b611a2c6113fa565b611a3583611994565b8152602083015160208201526040830151604082015260608301516060820152608083015182811115611a66575f80fd5b611a728882860161199f565b60808301525060a083015182811115611a89575f80fd5b611a958882860161199f565b60a08301525060c083015182811115611aac575f80fd5b611ab88882860161199f565b60c08301525060209590950151949694955050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f611b04608083018561184c565b905082606083015295945050505050565b5f815160208301517fffffffff0000000000000000000000000000000000000000000000000000000080821693506004831015611b5c5780818460040360031b1b83161693505b505050919050565b5f8085851115611b72575f80fd5b83861115611b7e575f80fd5b5050820193919092039150565b80356020831015610de8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b608081525f611bd96080830186611895565b9050611bf2602083018580518252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff83166060830152949350505050565b5f8082840360c0811215611c28575f80fd5b6080811215611c35575f80fd5b506040516060810167ffffffffffffffff8282108183111715611c5a57611c5a6113cd565b8160405285518352602086015191508082168214611c76575f80fd5b506020820152611c89856040860161192d565b60408201529150611c9d846080850161192d565b90509250929050565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611ce65780818660040360031b1b83161692505b50509291505056fea26469706673582212203c210af0c85b10469f135dd49d1274fa8e04b8bee0c2069213c4acfe2a3036b564736f6c63430008160033608060405234801561000f575f80fd5b50610a8c8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e5c5e9a31461002d575b5f80fd5b61004061003b3660046106f8565b610057565b60405161004e9291906107cf565b60405180910390f35b606080610064848461006f565b915091509250929050565b60608060028310156100b4576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f6100c260028286886107fc565b6100cb91610823565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161029357805f5b86831015610220575f61011460018501858a8c6107fc565b61011d9161086b565b60f81c90505f81900361015e576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016100ab565b8160ff165f03610170578091506101ac565b8160ff168160ff16146101ac57365f61018b86868c8e6107fc565b9150915061019c89898685856102aa565b9099509750859450919250829150505b60018401935f906101c290600301868b8d6107fc565b6101cb91610823565b60f01c90505f81900361020d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016100ab565b8060020161ffff168501945050506100fc565b82871461025c576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016100ab565b600287111561028c57365f61027385858b8d6107fc565b9150915061028488888585856102aa565b909850965050505b50506102a1565b61029e82878761041d565b93505b50509250929050565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161034457865115610307578684846040516020016102f3939291906108b1565b60405160208183030381529060405261033d565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650610412565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016103db5785511561039e5785848460405160200161038a939291906108b1565b6040516020818303038152906040526103d4565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550610412565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016100ab565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff8516016105425760228214610484576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6104a46104966022600286886107fc565b61049f916108d7565b61069f565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050610698565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff8516016106605760428211158061057d5750606282115b156105b4576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c66104966022600286886107fc565b90505f6105da6104966042602287896107fc565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe850161060d866042818a6107fc565b610616916108d7565b60405160086020938403029190911c9250610647916001916011918391889183916031916002918b918b9101610914565b6040516020818303038152906040529350505050610698565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016100ab565b9392505050565b5f6fffffffffffffffffffffffffffffffff8211156106f4576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016100ab565b5090565b5f8060208385031215610709575f80fd5b823567ffffffffffffffff80821115610720575f80fd5b818501915085601f830112610733575f80fd5b813581811115610741575f80fd5b866020828501011115610752575f80fd5b60209290920196919550909350505050565b5f5b8381101561077e578181015183820152602001610766565b50505f910152565b5f815180845261079d816020860160208601610764565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f6107e16040830185610786565b82810360208401526107f38185610786565b95945050505050565b5f808585111561080a575f80fd5b83861115610816575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156108635780818660020360031b1b83161692505b505092915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156108635760019490940360031b84901b1690921692915050565b5f84516108c2818460208901610764565b8201838582375f930192835250909392505050565b8035602083101561090e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b165b92915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008b60f01b166001840152808a60f81b1660038401527fffffffffffffffffffffffffffffffff000000000000000000000000000000008960801b166004840152808860f81b166014840152506109dc601583018760f01b7fffff000000000000000000000000000000000000000000000000000000000000169052565b610a0d601783018660f81b7fff00000000000000000000000000000000000000000000000000000000000000169052565b610a3e601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea26469706673582212204c5336eb5e4cfed89d8f0ececad030c194802d04a3053cab299816b06066820764736f6c6343000816003375736572412073686f756c64206861766520616c6c20746f6b656e73206166746572206c7a52656365697665206f6e20706f6c79676f6e207368617265206f6674636f6d706f736572416464726573732073686f756c64206861766520746865206e6f20746f6b656e73206166746572206c7a436f6d706f7365206f6e20617262a2646970667358221220624bf08ba3b294a72f8ba16258cca4fcbff0f0b7c646032698cd3f7741ffdfa564736f6c63430008160033608060405234801561000f575f80fd5b50610a8c8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e5c5e9a31461002d575b5f80fd5b61004061003b3660046106f8565b610057565b60405161004e9291906107cf565b60405180910390f35b606080610064848461006f565b915091509250929050565b60608060028310156100b4576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f6100c260028286886107fc565b6100cb91610823565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161029357805f5b86831015610220575f61011460018501858a8c6107fc565b61011d9161086b565b60f81c90505f81900361015e576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016100ab565b8160ff165f03610170578091506101ac565b8160ff168160ff16146101ac57365f61018b86868c8e6107fc565b9150915061019c89898685856102aa565b9099509750859450919250829150505b60018401935f906101c290600301868b8d6107fc565b6101cb91610823565b60f01c90505f81900361020d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016100ab565b8060020161ffff168501945050506100fc565b82871461025c576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016100ab565b600287111561028c57365f61027385858b8d6107fc565b9150915061028488888585856102aa565b909850965050505b50506102a1565b61029e82878761041d565b93505b50509250929050565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161034457865115610307578684846040516020016102f3939291906108b1565b60405160208183030381529060405261033d565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650610412565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016103db5785511561039e5785848460405160200161038a939291906108b1565b6040516020818303038152906040526103d4565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550610412565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016100ab565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff8516016105425760228214610484576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6104a46104966022600286886107fc565b61049f916108d7565b61069f565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050610698565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff8516016106605760428211158061057d5750606282115b156105b4576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c66104966022600286886107fc565b90505f6105da6104966042602287896107fc565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe850161060d866042818a6107fc565b610616916108d7565b60405160086020938403029190911c9250610647916001916011918391889183916031916002918b918b9101610914565b6040516020818303038152906040529350505050610698565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016100ab565b9392505050565b5f6fffffffffffffffffffffffffffffffff8211156106f4576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016100ab565b5090565b5f8060208385031215610709575f80fd5b823567ffffffffffffffff80821115610720575f80fd5b818501915085601f830112610733575f80fd5b813581811115610741575f80fd5b866020828501011115610752575f80fd5b60209290920196919550909350505050565b5f5b8381101561077e578181015183820152602001610766565b50505f910152565b5f815180845261079d816020860160208601610764565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f6107e16040830185610786565b82810360208401526107f38185610786565b95945050505050565b5f808585111561080a575f80fd5b83861115610816575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156108635780818660020360031b1b83161692505b505092915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156108635760019490940360031b84901b1690921692915050565b5f84516108c2818460208901610764565b8201838582375f930192835250909392505050565b8035602083101561090e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b165b92915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008b60f01b166001840152808a60f81b1660038401527fffffffffffffffffffffffffffffffff000000000000000000000000000000008960801b166004840152808860f81b166014840152506109dc601583018760f01b7fffff000000000000000000000000000000000000000000000000000000000000169052565b610a0d601783018660f81b7fff00000000000000000000000000000000000000000000000000000000000000169052565b610a3e601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea26469706673582212204c5336eb5e4cfed89d8f0ececad030c194802d04a3053cab299816b06066820764736f6c63430008160033",
+ "sourceMap": "1105:3578:136:-:0;;;;;3126:44:90;;;3166:4;-1:-1:-1;;3126:44:90;;;;;;;;1065:26:101;;;;;;;;;;;738:20:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;710:48:73;;;-1:-1:-1;;;;;710:48:73;;;;;;-1:-1:-1;;;;;;710:48:73;;;;;;;;;4586:43:74;;;-1:-1:-1;;;;;;4586:43:74;4620:9;4586:43;;;987:21:135;;;-1:-1:-1;;987:21:135;1007:1;987:21;;;1493:17;;;;;;;;;;;;-1:-1:-1;;;1493:17:135;;;;;;:8;:17::i;:::-;1470:40;;;-1:-1:-1;;;;;;1470:40:135;-1:-1:-1;;;;;1470:40:135;;;;;;;;;;1539:17;;;;;;;;;;;;-1:-1:-1;;;1539:17:135;;;;;;:8;:17::i;:::-;1516:40;;;-1:-1:-1;;;;;;1516:40:135;-1:-1:-1;;;;;1516:40:135;;;;;;;;;;1624:23;;;;;;;;;;;;-1:-1:-1;;;1624:23:135;;;;;;:8;:23::i;:::-;1595:52;;;-1:-1:-1;;;;;;1595:52:135;-1:-1:-1;;;;;1595:52:135;;;;;;;;;;1691:66;1746:7;-1:-1:-1;1691:27:135;1370:24:62;;;-1:-1:-1;;;1370:24:62;;;2822:51:139;1370:24:62;;;;;;;;;2889:11:139;;;;1370:24:62;;;;1294:107;1691:27:135;:54;:66;:54;:66::i;:::-;1653:104;;;;;;:::i;:::-;;1105:3578:136;;;;;;;;;;;;20760:125:91;20824:12;20858:20;20873:4;20858:14;:20::i;:::-;-1:-1:-1;20848:30:91;20760:125;-1:-1:-1;;20760:125:91:o;2092:357:62:-;2254:12;2235:8;808:1;1059:20;2235:8;1077:1;1059:17;:20::i;:::-;:30;;;1055:82;;1116:20;:8;1134:1;1116:17;:20::i;:::-;1098:39;;-1:-1:-1;;;1098:39:62;;3085:6:139;3073:19;;;1098:39:62;;;3055:38:139;3028:18;;1098:39:62;;;;;;;;1055:82;2278:19:::1;2300:51;2338:4:::0;2344:6;2300:37:::1;:51::i;:::-;2278:73:::0;-1:-1:-1;2368:74:62::1;2386:8:::0;306:1:13::1;2278:73:62::0;2368:17:::1;:74::i;:::-;2361:81:::0;2092:357;-1:-1:-1;;;;;;2092:357:62:o;20479:242:91:-;20549:12;20563:18;20641:4;20624:22;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;20624:22:91;;;;;;;20614:33;;20624:22;20614:33;;;;-1:-1:-1;;;;;;20665:19:91;;;;;3799:25:139;;;20614:33:91;-1:-1:-1;20665:7:91;;;;3772:18:139;;20665:19:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20694:20;;-1:-1:-1;;;20694:20:91;;20658:26;;-1:-1:-1;20694:8:91;;;;:20;;20658:26;;20709:4;;20694:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20479:242;;;:::o;12935:305:107:-;13013:6;13056:10;:6;13065:1;13056:10;:::i;:::-;13039:6;:13;:27;;13031:60;;;;-1:-1:-1;;;13031:60:107;;5092:2:139;13031:60:107;;;5074:21:139;5131:2;5111:18;;;5104:30;5170:22;5150:18;;;5143:50;5210:18;;13031:60:107;4890:344:139;13031:60:107;-1:-1:-1;13168:29:107;;;13184:3;13168:29;13162:36;12935:305;;;;;:::o;3460:191:13:-;3544:12;-1:-1:-1;;;;;3575:11:13;;;:69;;3614:30;;;-1:-1:-1;;;;;;5418:3:139;5455:16;;;5451:25;;3614:30:13;;;5439:38:139;5511:16;;;5507:25;5493:12;;;5486:47;5549:12;3614:30:13;;;;;;;;;;;;3575:69;;;3589:22;;-1:-1:-1;;;;;;5747:3:139;5717:16;;;5713:47;3589:22:13;;;5701:60:139;5777:12;;3589:22:13;;;;;;;;;;;;3575:69;3568:76;3460:191;-1:-1:-1;;;3460:191:13:o;6602:435:62:-;6766:12;6747:8;808:1;1059:20;6747:8;1077:1;1059:17;:20::i;:::-;:30;;;1055:82;;1116:20;:8;1134:1;1116:17;:20::i;1055:82::-;6843:8:::1;250:1:13;6912:25:62;:7;:14;:23;;;:25;;:::i;:::-;:29;::::0;6940:1:::1;6912:29;:::i;:::-;6980:11;7009:7;6809:221;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6790:240;;6602:435:::0;;;;;;:::o;16296:213:131:-;16352:6;16382:16;16374:24;;16370:103;;;16421:41;;-1:-1:-1;;;16421:41:131;;16452:2;16421:41;;;6949:36:139;7001:18;;;6994:34;;;6922:18;;16421:41:131;6768:266:139;16370:103:131;-1:-1:-1;16496:5:131;16296:213::o;1105:3578:136:-;;;;;;;;:::o;14:127:139:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:380;225:1;221:12;;;;268;;;289:61;;343:4;335:6;331:17;321:27;;289:61;396:2;388:6;385:14;365:18;362:38;359:161;;442:10;437:3;433:20;430:1;423:31;477:4;474:1;467:15;505:4;502:1;495:15;359:161;;146:380;;;:::o;656:517::-;757:2;752:3;749:11;746:421;;;793:5;790:1;783:16;837:4;834:1;824:18;907:2;895:10;891:19;888:1;884:27;878:4;874:38;943:4;931:10;928:20;925:47;;;-1:-1:-1;966:4:139;925:47;1021:2;1016:3;1012:12;1009:1;1005:20;999:4;995:31;985:41;;1076:81;1094:2;1087:5;1084:13;1076:81;;;1153:1;1139:16;;1120:1;1109:13;1076:81;;;1080:3;;746:421;656:517;;;:::o;1349:1341::-;1467:10;;-1:-1:-1;;;;;1489:30:139;;1486:56;;;1522:18;;:::i;:::-;1551:96;1640:6;1600:38;1632:4;1626:11;1600:38;:::i;:::-;1594:4;1551:96;:::i;:::-;1702:4;;1759:2;1748:14;;1776:1;1771:662;;;;2477:1;2494:6;2491:89;;;-1:-1:-1;2546:19:139;;;2540:26;2491:89;-1:-1:-1;;1306:1:139;1302:11;;;1298:24;1294:29;1284:40;1330:1;1326:11;;;1281:57;2593:81;;1741:943;;1771:662;603:1;596:14;;;640:4;627:18;;-1:-1:-1;;1807:20:139;;;1924:236;1938:7;1935:1;1932:14;1924:236;;;2027:19;;;2021:26;2006:42;;2119:27;;;;2087:1;2075:14;;;;1954:19;;1924:236;;;1928:3;2188:6;2179:7;2176:19;2173:201;;;2249:19;;;2243:26;-1:-1:-1;;2332:1:139;2328:14;;;2344:3;2324:24;2320:37;2316:42;2301:58;2286:74;;2173:201;;;2420:1;2411:6;2408:1;2404:14;2400:22;2394:4;2387:36;1741:943;;;;;1349:1341;;:::o;3104:250::-;3189:1;3199:113;3213:6;3210:1;3207:13;3199:113;;;3289:11;;;3283:18;3270:11;;;3263:39;3235:2;3228:10;3199:113;;;-1:-1:-1;;3346:1:139;3328:16;;3321:27;3104:250::o;3359:289::-;3490:3;3528:6;3522:13;3544:66;3603:6;3598:3;3591:4;3583:6;3579:17;3544:66;:::i;:::-;3626:16;;;;;3359:289;-1:-1:-1;;3359:289:139:o;3835:290::-;3905:6;3958:2;3946:9;3937:7;3933:23;3929:32;3926:52;;;3974:1;3971;3964:12;3926:52;4000:16;;-1:-1:-1;;;;;4045:31:139;;4035:42;;4025:70;;4091:1;4088;4081:12;4130:493;4336:1;4332;4327:3;4323:11;4319:19;4311:6;4307:32;4296:9;4289:51;4376:2;4371;4360:9;4356:18;4349:30;4270:4;4408:6;4402:13;4451:6;4446:2;4435:9;4431:18;4424:34;4467:79;4539:6;4534:2;4523:9;4519:18;4514:2;4506:6;4502:15;4467:79;:::i;:::-;4607:2;4586:15;-1:-1:-1;;4582:29:139;4567:45;;;;4614:2;4563:54;;4130:493;-1:-1:-1;;;4130:493:139:o;4628:127::-;4689:10;4684:3;4680:20;4677:1;4670:31;4720:4;4717:1;4710:15;4744:4;4741:1;4734:15;4760:125;4825:9;;;4846:10;;;4843:36;;;4859:18;;:::i;5800:168::-;5867:6;5893:10;;;5905;;;5889:27;;5928:11;;;5925:37;;;5942:18;;:::i;5973:790::-;6222:3;6260:6;6254:13;6276:66;6335:6;6330:3;6323:4;6315:6;6311:17;6276:66;:::i;:::-;6399:13;6403:3;6439:16;;;6435:25;;6364:16;;;6421:40;;;-1:-1:-1;;;;;;6518:3:139;6496:16;;;6492:38;6488:1;6477:13;;6470:61;6566:16;;;6562:25;6558:1;6547:13;;6540:48;6613:13;;6635:78;6613:13;6700:1;6689:13;;6682:4;6670:17;;6635:78;:::i;:::-;6733:20;6755:1;6729:28;;5973:790;-1:-1:-1;;;;;;;5973:790:139:o;6768:266::-;1105:3578:136;;;;;;",
+ "linkReferences": {}
+ },
+ "deployedBytecode": {
+ "object": "0x60806040526004361062000476575f3560e01c8063699cbade116200024a578063b1dcf5c8116200013a578063d6d6249711620000c6578063ec53eaa01162000092578063f93e1d611162000076578063f93e1d611462000dac578063fa7626d41462000dfa578063faed6c581462000e15575f80fd5b8063ec53eaa01462000d7c578063f5e4efb51462000d93575f80fd5b8063d6d624971462000cbf578063deb22e9a1462000ce3578063defd9da61462000d04578063e20c9f711462000d65575f80fd5b8063b954fdf61162000106578063b954fdf61462000c20578063ba414fa61462000c6d578063baead19c1462000c84578063cb1a295f1462000c9e575f80fd5b8063b1dcf5c81462000846578063b5508aa91462000bcf578063b752b72a1462000be6578063b76bada51462000c0a575f80fd5b806385226c8111620001d65780639751ca8611620001a2578063a29c89841162000186578063a29c89841462000b7d578063ae6ce4001462000b94578063b0464fdc1462000bb8575f80fd5b80639751ca861462000afc578063997cff1b1462000b59575f80fd5b806385226c811462000a725780638c5e9f741462000a9857806390a606f51462000ab5578063916a17c61462000ad6575f80fd5b80637a8b5d9811620002165780637a8b5d981462000a0c5780637f2e59361462000a2d57806382411c7714620005be578063834bd1591462000a4e575f80fd5b8063699cbade14620009705780636e1775e3146200098e578063703ca25414620009c45780637982cf4214620009e8575f80fd5b8063375591d71162000366578063556257df11620002f25780636019788911620002be57806366d9a9a011620002a257806366d9a9a01462000908578063677d4175146200092e57806367d53a00146200094f575f80fd5b80636019788914620008c057806365449eb014620008e4575f80fd5b8063556257df14620008465780635e42c9b2146200085e5780635ea0fefe14620008745780635edc467014620008a9575f80fd5b80633f7286f411620003325780633f7286f4146200079e578063518e8ab014620007b557806351aa318b146200080d578063536e8d3a1462000825575f80fd5b8063375591d7146200072e5780633bbd6a94146200074f5780633cae7b8a14620007665780633e5e3c231462000787575f80fd5b80631766f5a411620004025780631f3280c511620003ce57806325996dae11620003b257806325996dae14620006ce5780632a35d25014620006e45780632ade38801462000708575f80fd5b80631f3280c5146200066c5780632113ce621462000682575f80fd5b80631766f5a414620005be578063178928d314620005fc5780631cc4652514620006225780631ed7831c1462000646575f80fd5b80630afba86811620004425780630afba86814620005145780630c003ff7146200053f5780630fcaecfe146200056557806314525bce1462000591575f80fd5b8063090852b6146200048257806309c885c914620004a85780630a69faa914620004e65780630a9254e414620004fd575f80fd5b366200047e57005b5f80fd5b3480156200048e575f80fd5b50620004a6620004a03660046200b1bd565b62000e39565b005b348015620004b4575f80fd5b50603d54620004c9906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620004a6620004f73660046200b349565b62000e65565b34801562000509575f80fd5b50620004a662000fbc565b34801562000520575f80fd5b506200052b61271081565b60405161ffff9091168152602001620004dd565b3480156200054b575f80fd5b50603354620004c99061010090046001600160a01b031681565b34801562000571575f80fd5b506200057b606581565b60405163ffffffff9091168152602001620004dd565b3480156200059d575f80fd5b50620005af68056bc75e2d6310000081565b604051908152602001620004dd565b348015620005ca575f80fd5b50620005db670de0b6b3a764000081565b6040516effffffffffffffffffffffffffffff9091168152602001620004dd565b34801562000608575f80fd5b50620006136200105e565b604051620004dd91906200b42c565b3480156200062e575f80fd5b50620004a6620006403660046200b45e565b620010f2565b34801562000652575f80fd5b506200065d62001148565b604051620004dd91906200b4d2565b34801562000678575f80fd5b506200057b600381565b3480156200068e575f80fd5b50602454620006ac906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001620004dd565b348015620006da575f80fd5b506200057b600181565b348015620006f0575f80fd5b506200065d620007023660046200b4e6565b620011aa565b34801562000714575f80fd5b506200071f620012c3565b604051620004dd91906200b5aa565b3480156200073a575f80fd5b50603454620004c9906001600160a01b031681565b620004a6620007603660046200b649565b6200140b565b34801562000772575f80fd5b50603854620004c9906001600160a01b031681565b34801562000793575f80fd5b506200065d620014c6565b348015620007aa575f80fd5b506200065d62001526565b348015620007c1575f80fd5b50620007d9620007d33660046200b6fd565b62001586565b6040805161ffff90941684526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001620004dd565b34801562000819575f80fd5b506200057b6201117181565b34801562000831575f80fd5b50603554620004c9906001600160a01b031681565b34801562000852575f80fd5b50620005af620186a081565b3480156200086a575f80fd5b506200057b600281565b34801562000880575f80fd5b5062000898620008923660046200b750565b620015a2565b6040519015158152602001620004dd565b348015620008b5575f80fd5b50620004a662001602565b348015620008cc575f80fd5b50620004a6620008de3660046200b77d565b6200216f565b348015620008f0575f80fd5b50620004a6620009023660046200b887565b62002f1e565b34801562000914575f80fd5b506200091f62003014565b604051620004dd91906200b9a6565b3480156200093a575f80fd5b50603e54620004c9906001600160a01b031681565b3480156200095b575f80fd5b50603754620004c9906001600160a01b031681565b3480156200097c575f80fd5b50620006ac68056bc75e2d6310000081565b3480156200099a575f80fd5b50620009b2620009ac3660046200ba41565b62003199565b604051620004dd94939291906200bab6565b348015620009d0575f80fd5b50620004a6620009e23660046200bae5565b620031bb565b348015620009f4575f80fd5b506200061362000a063660046200b750565b6200338c565b34801562000a18575f80fd5b50603954620004c9906001600160a01b031681565b34801562000a39575f80fd5b50603654620004c9906001600160a01b031681565b34801562000a5a575f80fd5b50620004a662000a6c3660046200bb1b565b620034a1565b34801562000a7e575f80fd5b5062000a8962003ab2565b604051620004dd91906200bb94565b34801562000aa4575f80fd5b50620005af670de0b6b3a764000081565b34801562000ac1575f80fd5b50603a54620004c9906001600160a01b031681565b34801562000ae2575f80fd5b5062000aed62003b87565b604051620004dd91906200bba8565b34801562000b08575f80fd5b5062000b2062000b1a3660046200b6fd565b62003c81565b604080516fffffffffffffffffffffffffffffffff948516815263ffffffff9093166020840152921691810191909152606001620004dd565b34801562000b65575f80fd5b50620004a662000b773660046200ba41565b62003c90565b620004a662000b8e3660046200bc39565b62003d0a565b34801562000ba0575f80fd5b50620004a662000bb23660046200bcc4565b62003d91565b34801562000bc4575f80fd5b5062000aed62003e46565b34801562000bdb575f80fd5b5062000a8962003f40565b34801562000bf2575f80fd5b50620004a662000c043660046200bce2565b62004015565b34801562000c16575f80fd5b50620005af600381565b34801562000c2c575f80fd5b5062000c4462000c3e3660046200b6fd565b62004032565b604080516fffffffffffffffffffffffffffffffff9093168352602083019190915201620004dd565b34801562000c79575f80fd5b50620008986200404c565b34801562000c90575f80fd5b50620005af64e8d4a5100081565b34801562000caa575f80fd5b50603c54620004c9906001600160a01b031681565b34801562000ccb575f80fd5b50620004a662000cdd3660046200bd01565b62004120565b34801562000cef575f80fd5b50603b54620004c9906001600160a01b031681565b34801562000d10575f80fd5b50620004a662000d223660046200bd79565b602480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b34801562000d71575f80fd5b506200065d62006371565b620004a662000d8d3660046200b77d565b620063d1565b34801562000d9f575f80fd5b50620005af630ee6b28081565b34801562000db8575f80fd5b5062000dd062000dca3660046200b6fd565b62006504565b604080516fffffffffffffffffffffffffffffffff938416815292909116602083015201620004dd565b34801562000e06575f80fd5b50601f54620008989060ff1681565b34801562000e21575f80fd5b50620004a662000e333660046200bd97565b62006512565b62000e6182826001600160a01b03165f1b5f8060405180602001604052805f815250620034a1565b5050565b5f60235f62000e7587876200659d565b63ffffffff16815260208101919091526040015f908120546001600160a01b031691508062000ea485620065c3565b92505091505f604051806060016040528062000ec18a8a620066f7565b63ffffffff16815260200162000ed88a8a62006708565b815260200162000ee98a8a62006724565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e6fffffffffffffffffffffffffffffffff8581169085168462000f2a8d8d6200674a565b62000f368e8e6200675e565b604080516020810182525f815290517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16815262000f81949392918e916004016200be05565b5f604051808303818589803b15801562000f99575f80fd5b5088f115801562000fac573d5f803e3d5ffd5b5050505050505050505050505050565b62000fc66200676f565b603b546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152683635c9adc5dea000006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015f604051808303815f87803b15801562001045575f80fd5b505af115801562001058573d5f803e3d5ffd5b50505050565b603f80546200106d906200be6d565b80601f01602080910402602001604051908101604052809291908181526020018280546200109b906200be6d565b8015620010ea5780601f10620010c057610100808354040283529160200191620010ea565b820191905f5260205f20905b815481529060010190602001808311620010cc57829003601f168201915b505050505081565b62000e6182828460ff1667ffffffffffffffff8111156200111757620011176200b23a565b60405190808252806020026020018201604052801562001141578160200160208202803683370190505b5062004120565b60606016805480602002602001604051908101604052809291908181526020018280548015620011a057602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831162001181575b5050505050905090565b60608160ff1667ffffffffffffffff811115620011cb57620011cb6200b23a565b604051908082528060200260200182016040528015620011f5578160200160208202803683370190505b509050825b6200120683856200beed565b60ff168160ff161015620012b05760ff81165f9081526023602090815260408083205481516001600160a01b03909116928101929092523090820152600160608201526200126890879060800160405160208183030381529060405262007b21565b905080836200127887856200bf09565b60ff16815181106200128e576200128e6200bf25565b6001600160a01b039092166020928302919091019091015250600101620011fa565b50620012bc81620031bb565b9392505050565b6060601e805480602002602001604051908101604052809291908181526020015f905b8282101562001402575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015620013ea578382905f5260205f2001805462001358906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462001386906200be6d565b8015620013d55780601f10620013ab57610100808354040283529160200191620013d5565b820191905f5260205f20905b815481529060010190602001808311620013b757829003601f168201915b50505050508152602001906001019062001338565b505050508152505081526020019060010190620012e6565b50505050905090565b63ffffffff87165f908152602360205260408120546001600160a01b0316908080620014378962007b7d565b925092509250836001600160a01b03166391d20fa18284908d8b8d898d8d60405180602001604052805f8152506040518a63ffffffff1660e01b81526004016200148897969594939291906200bf52565b5f604051808303818589803b158015620014a0575f80fd5b5088f1158015620014b3573d5f803e3d5ffd5b5050505050505050505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015620011a057602002820191905f5260205f209081546001600160a01b0316815260019091019060200180831162001181575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015620011a057602002820191905f5260205f209081546001600160a01b0316815260019091019060200180831162001181575050505050905090565b5f805f62001595858562007cc5565b9250925092509250925092565b61ffff82165f90815260208080526040808320848452909152812081620015f782546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b119150505b92915050565b5f620016246200161c670de0b6b3a764000060026200bfb2565b5f1962007d59565b50603554603b549192506200164f916001600160a01b039182169116670de0b6b3a764000062007e44565b5f6200165e6001600262007e52565b50603a54603854603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152939450918216925f92909116906370a0823190602401602060405180830381865afa158015620016d0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620016f691906200bfcc565b6040805160e0810190915260038152603b549192505f9160208201906001600160a01b031681526020015f81526020018681526020016200177f620c35005f62001777604080517e03000000000000000000000000000000000000000000000000000000000000602082015281516002818303018152602290910190915290565b919062007f85565b815260200160405180602001604052805f815250815260200160405180602001604052805f81525081525090505f81604051602001620017c091906200c05f565b60405160208183030381529060405290505f620018365f620c35006516bcc41e90006200182d620c35005f62001777604080517e03000000000000000000000000000000000000000000000000000000000000602082015281516002818303018152602290910190915290565b9291906200800d565b90505f6040518060e00160405280600263ffffffff16815260200162001862886001600160a01b031690565b8152602001670de0b6b3a76400008152602001612710670de0b6b3a764000061270b6200189091906200bfb2565b6200189c91906200c0a0565b815260208082018590526040808301879052805191820181525f80835260609093019190915260355490517f3b6f743b00000000000000000000000000000000000000000000000000000000815292935090916001600160a01b0390911690633b6f743b906200191390859085906004016200c0b6565b6040805180830381865afa1580156200192e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200195491906200c12c565b603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b158015620019c7575f80fd5b505af1158015620019da573d5f803e3d5ffd5b505060355483516040517fc7c7f5b30000000000000000000000000000000000000000000000000000000081526001600160a01b03909216935063c7c7f5b392509062001a30908690869030906004016200c149565b60c06040518083038185885af115801562001a4d573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019062001a7491906200c19f565b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562001ac3575f80fd5b505af115801562001ad6573d5f803e3d5ffd5b50506033546039546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015262001bed94506101009092041691506370a0823190602401602060405180830381865afa15801562001b48573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001b6e91906200bfcc565b603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001bc0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001be691906200bfcc565b8a6200805d565b60335462001c0c9060029061010090046001600160a01b031662004015565b6033546039546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015262001dcd926101009004909116906370a0823190602401602060405180830381865afa15801562001c7b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001ca191906200bfcc565b6033546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038b81166004830152610100909204909116906370a0823190602401602060405180830381865afa15801562001d09573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001d2f91906200bfcc565b62001d3b91906200c226565b603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001d8d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001db391906200bfcc565b62001dc7670de0b6b3a76400008c6200c226565b6200805d565b603b545f9062001e18908290600190670de0b6b3a7640000906001600160a01b03168960405160200162001e039291906200c23c565b604051602081830303815290604052620080e1565b603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b15801562001e8b575f80fd5b505af115801562001e9e573d5f803e3d5ffd5b5050603d546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152683635c9adc5dea000006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d91506044015f604051808303815f87803b15801562001f21575f80fd5b505af115801562001f34573d5f803e3d5ffd5b5050603a546033546040517fd0a102600000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063d0a102609350620c3500926516bcc41e90009262001fa192610100909104909116908190889030906004016200c263565b5f604051808303818589803b15801562001fb9575f80fd5b5088f115801562001fcc573d5f803e3d5ffd5b50506033546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038e8116600483015262002087965061010090920490911693506370a0823192506024019050602060405180830381865afa15801562002040573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200206691906200bfcc565b5f60405180606001604052806040815260200162043a8b6040913962008115565b603854620020a1906003906001600160a01b031662004015565b603854603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201525f9291909116906370a0823190602401602060405180830381865afa15801562002109573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200212f91906200bfcc565b9050620021626200214189836200c2ab565b8c60405180608001604052806041815260200162043a4a6041913962008115565b5050505050505050505050565b5f6200217c84846200659d565b63ffffffff81165f908152602360205260408120549192506001600160a01b03909116908163402f8468620021b288886200674a565b620021be8989620066f7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015263ffffffff1660248201526044016040805180830381865afa15801562002223573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200224991906200c2ce565b5090505f62002259878762008195565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250604080517f54fd4d50000000000000000000000000000000000000000000000000000000008152905195965090946001600160a01b03881694506354fd4d509350600480830193506060928290030181865afa158015620022eb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200231191906200c310565b505090508067ffffffffffffffff166003036200288e57825f6001600160a01b038216639c33abf7620023458c8c620066f7565b620023518d8d6200674a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600260448201526064015f60405180830381865afa158015620023be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052620023e791908101906200c3a8565b90505f818060200190518101906200240091906200c44c565b608001515f815181106200241857620024186200bf25565b602002602001015190505f6200242f8c8c620081a6565b6040516200243f9291906200c52e565b6040518091039020905060605f630223536e60e01b888460646040516024016200246c939291906200c53d565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03851663f010cb238d8985620024ee426103e86200c226565b6040518563ffffffff1660e01b81526004016200250f94939291906200c56a565b602060405180830381865afa1580156200252b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200255191906200bfcc565b90506200255e81620081b7565b6040805160018082528183019092529194505f9250816020015b6040805160a0810182525f808252602082018190526060928201839052828201526080810191909152815260200190600190039081620025785790505090506040518060a001604052808d63ffffffff168152602001886001600160a01b03168152602001838152602001426103e8620025f391906200c226565b815260200184815250815f815181106200261157620026116200bf25565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b143044b90620026639084906004016200c5aa565b5f604051808303815f87803b1580156200267b575f80fd5b505af11580156200268e573d5f803e3d5ffd5b505050505f630894edf160e01b8a86604051602401620026b09291906200c676565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03871663f010cb238f8b8562002732426103e86200c226565b6040518563ffffffff1660e01b81526004016200275394939291906200c56a565b602060405180830381865afa1580156200276f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200279591906200bfcc565b9050620027a281620081b7565b9450506040518060a001604052808e63ffffffff168152602001896001600160a01b03168152602001828152602001426103e8620027e191906200c226565b815260200185815250825f81518110620027ff57620027ff6200bf25565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063b143044b90620028519085906004016200c5aa565b5f604051808303815f87803b15801562002869575f80fd5b505af11580156200287c573d5f803e3d5ffd5b50505050505050505050505062002f14565b8067ffffffffffffffff16600a0362002e9b57825f6001600160a01b038216639c33abf7620028be8c8c620066f7565b620028ca8d8d6200674a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600160448201526064015f60405180830381865afa15801562002937573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200296091908101906200c3a8565b90505f818060200190518101906200297991906200c699565b608001515f815181106200299157620029916200bf25565b602002602001015190505f620029a88c8c620082fe565b604051620029b89291906200c52e565b604051809103902090505f620029cf8d8d6200675e565b8b604051602001620029e39291906200c23c565b60405160208183030381529060405280519060200120905060605f63ab750e7560e01b89858560405160240162002a1d939291906200c6eb565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562002a9f426103e86200c226565b6040518563ffffffff1660e01b815260040162002ac094939291906200c56a565b602060405180830381865afa15801562002adc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002b0291906200bfcc565b905062002b0f81620081b7565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f80825260208201819052606092820183905282820152608081019190915281526020019060019003908162002b295790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862002ba491906200c226565b815260200185815250815f8151811062002bc25762002bc26200bf25565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b9062002c149084906004016200c5aa565b5f604051808303815f87803b15801562002c2c575f80fd5b505af115801562002c3f573d5f803e3d5ffd5b505050505050505f63594924da60e01b89858560405160240162002c66939291906200c6eb565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562002ce8426103e86200c226565b6040518563ffffffff1660e01b815260040162002d0994939291906200c56a565b602060405180830381865afa15801562002d25573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002d4b91906200bfcc565b905062002d5881620081b7565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f80825260208201819052606092820183905282820152608081019190915281526020019060019003908162002d725790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862002ded91906200c226565b815260200185815250815f8151811062002e0b5762002e0b6200bf25565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b9062002e5d9084906004016200c5aa565b5f604051808303815f87803b15801562002e75575f80fd5b505af115801562002e88573d5f803e3d5ffd5b5050505050505050505050505062002f14565b6040517f12cc947f0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906312cc947f9062002ee4908b908b906004016200c711565b5f604051808303815f87803b15801562002efc575f80fd5b505af115801562002f0f573d5f803e3d5ffd5b505050505b5050505050505050565b5f5b82518110156200300f575f83828151811062002f405762002f406200bf25565b602002602001015190505f5b83518110156200300457816001600160a01b031663f0a9e48185838151811062002f7a5762002f7a6200bf25565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff9091166004820152600160248201526044015f604051808303815f87803b15801562002fe0575f80fd5b505af115801562002ff3573d5f803e3d5ffd5b50506001909201915062002f4c9050565b505060010162002f20565b505050565b6060601b805480602002602001604051908101604052809291908181526020015f905b8282101562001402578382905f5260205f2090600202016040518060400160405290815f820180546200306a906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462003098906200be6d565b8015620030e75780601f10620030bd57610100808354040283529160200191620030e7565b820191905f5260205f20905b815481529060010190602001808311620030c957829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156200318057602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116200312c5790505b5050505050815250508152602001906001019062003037565b5f365f80620031aa8787876200830f565b935093509350935093509350935093565b80515f5b818110156200300f575f838281518110620031de57620031de6200bf25565b602002602001015190505f5b83811015620033815782811462003378575f8582815181106200321157620032116200bf25565b602002602001015190505f816001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003259573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200327f91906200c726565b6001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620032bb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620032e191906200c744565b9050836001600160a01b0316633400288b8262003304856001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff92909216600483015260248201526044015f604051808303815f87803b1580156200335e575f80fd5b505af115801562003371573d5f803e3d5ffd5b5050505050505b600101620031ea565b5050600101620031bf565b61ffff82165f908152602080805260408083208484529091528120606091620033e382546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b11156200349a575f620033f6826200836a565b5f81815260216020526040902080549192509062003414906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462003442906200be6d565b8015620034915780601f10620034675761010080835404028352916020019162003491565b820191905f5260205f20905b8154815290600101906020018083116200347357829003601f168201915b50505050509250505b5092915050565b63ffffffff85165f908152602360205260409020546001600160a01b03166200352b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f656e64706f696e74206e6f74207965742072656769737465726564000000000060448201526064015b60405180910390fd5b63ffffffff85165f908152602080805260408083208784529091528120906200358282546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b90505f855f03620035c6575081546fffffffffffffffffffffffffffffffff80821670010000000000000000000000000000000090920481169190910316620035da565b858211620035d55781620035d7565b855b90505b801562002f145780620035ed816200c762565b9150505f620035fc84620083f4565b5f818152602160205260408120805492935090916200361b906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462003649906200be6d565b8015620036985780601f106200366e5761010080835404028352916020019162003698565b820191905f5260205f20905b8154815290600101906020018083116200367a57829003601f168201915b50506040517f997cff1b000000000000000000000000000000000000000000000000000000008152939450309363997cff1b9350620036e0925085915086906004016200c676565b5f6040518083038186803b158015620036f7575f80fd5b505afa1580156200370a573d5f803e3d5ffd5b50506040517f60197889000000000000000000000000000000000000000000000000000000008152309250636019788991506200374e9084908a906004016200c77a565b5f604051808303815f87803b15801562003766575f80fd5b505af115801562003779573d5f803e3d5ffd5b5050505f8381526022602052604081208054919250906200379a906200be6d565b80601f0160208091040260200160405190810160405280929190818152602001828054620037c8906200be6d565b8015620038175780601f10620037ed5761010080835404028352916020019162003817565b820191905f5260205f20905b815481529060010190602001808311620037f957829003601f168201915b505050505090506200382b81600262008481565b1562003906575f806200383e8362008496565b604051919350915081905f906001600160a01b0383169085908381818185875af1925050503d805f81146200388f576040519150601f19603f3d011682016040523d82523d5f602084013e62003894565b606091505b505090508062003901576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4661696c656420746f2073656e64204574686572000000000000000000000000604482015260640162003522565b505050505b6200391381600162008481565b1562003989576040517fec53eaa0000000000000000000000000000000000000000000000000000000008152309063ec53eaa0906200395990859085906004016200c77a565b5f604051808303815f87803b15801562003971575f80fd5b505af115801562003984573d5f803e3d5ffd5b505050505b6200399681600562008481565b1562003a0e576040517f0a69faa90000000000000000000000000000000000000000000000000000000081523090630a69faa990620039de90859085908c906004016200c7a2565b5f604051808303815f87803b158015620039f6575f80fd5b505af115801562003a09573d5f803e3d5ffd5b505050505b6001600160a01b0388161580159062003a2f575062003a2f81600362008481565b1562003aa9576040517fa29c8984000000000000000000000000000000000000000000000000000000008152309063a29c89849062003a79908590859088908e906004016200c7e0565b5f604051808303815f87803b15801562003a91575f80fd5b505af115801562003aa4573d5f803e3d5ffd5b505050505b505050620035da565b6060601a805480602002602001604051908101604052809291908181526020015f905b8282101562001402578382905f5260205f2001805462003af5906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462003b23906200be6d565b801562003b725780601f1062003b485761010080835404028352916020019162003b72565b820191905f5260205f20905b81548152906001019060200180831162003b5457829003601f168201915b50505050508152602001906001019062003ad5565b6060601d805480602002602001604051908101604052809291908181526020015f905b8282101562001402575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801562003c6857602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162003c145790505b5050505050815250508152602001906001019062003baa565b5f805f620015958585620085d8565b5f62003c9d84846200675e565b905081811462001058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f67756964206e6f74206d61746368000000000000000000000000000000000000604482015260640162003522565b30633bbd6a9462003d1c87876200659d565b62003d2888886200674a565b86868662003d378c8c620082fe565b6040518863ffffffff1660e01b815260040162003d5b97969594939291906200c829565b5f604051808303815f87803b15801562003d73575f80fd5b505af115801562003d86573d5f803e3d5ffd5b505050505050505050565b8060235f836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003dd2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003df891906200c744565b63ffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060601c805480602002602001604051908101604052809291908181526020015f905b8282101562001402575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801562003f2757602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162003ed35790505b5050505050815250508152602001906001019062003e69565b60606019805480602002602001604051908101604052809291908181526020015f905b8282101562001402578382905f5260205f2001805462003f83906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462003fb1906200be6d565b8015620040005780601f1062003fd65761010080835404028352916020019162004000565b820191905f5260205f20905b81548152906001019060200180831162003fe257829003601f168201915b50505050508152602001906001019062003f63565b62000e6182825f8060405180602001604052805f815250620034a1565b5f8062004040848462008663565b915091505b9250929050565b6008545f9060ff161562004064575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa158015620040f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200411991906200bfcc565b1415905090565b8260ff1667ffffffffffffffff8111156200413f576200413f6200b23a565b60405190808252806020026020018201604052801562004169578160200160208202803683370190505b50805162004180916025916020909101906200ae1c565b508260ff1667ffffffffffffffff811115620041a057620041a06200b23a565b604051908082528060200260200182016040528015620041ca578160200160208202803683370190505b508051620041e1916026916020909101906200ae98565b508260ff1667ffffffffffffffff8111156200420157620042016200b23a565b6040519080825280602002602001820160405280156200422b578160200160208202803683370190505b50805162004242916027916020909101906200ae1c565b508260ff1667ffffffffffffffff8111156200426257620042626200b23a565b6040519080825280602002602001820160405280156200428c578160200160208202803683370190505b508051620042a3916028916020909101906200ae1c565b508260ff1667ffffffffffffffff811115620042c357620042c36200b23a565b604051908082528060200260200182016040528015620042ed578160200160208202803683370190505b50805162004304916029916020909101906200ae1c565b506040805160018082528183019092529060208083019080368337505081516200433692602a9250602001906200ae1c565b506040517fffa1864900000000000000000000000000000000000000000000000000000000815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa1580156200439f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620043c591906200c726565b602a80545f90620043da57620043da6200bf25565b5f918252602082200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0393909316929092179091555b8360ff168160ff16101562004632575f620044388260016200beed565b60ff1690505f838360ff16815181106200445657620044566200bf25565b602002602001015190508160256001018460ff16815481106200447d576200447d6200bf25565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055505f6001600160a01b0316816001600160a01b03160362004559578130604051620044d8906200af46565b63ffffffff90921682526001600160a01b03166020820152604001604051809103905ff0801580156200450d573d5f803e3d5ffd5b506025805460ff86169081106200452857620045286200bf25565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550620045ee565b8130826040516200456a906200af54565b63ffffffff90931683526001600160a01b039182166020840152166040820152606001604051809103905ff080158015620045a7573d5f803e3d5ffd5b506025805460ff8616908110620045c257620045c26200bf25565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6200462760255f018460ff16815481106200460d576200460d6200bf25565b5f918252602090912001546001600160a01b031662003d91565b50506001016200441b565b503060405162004642906200af62565b6001600160a01b039091168152602001604051809103905ff0801580156200466c573d5f803e3d5ffd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790555f5b8360ff168160ff16101562005fff575f836001811115620046cc57620046cc6200c88b565b0362005dd1575f60255f018260ff1681548110620046ee57620046ee6200bf25565b905f5260205f20015f9054906101000a90046001600160a01b03169050308164e8d4a51000620186a060405162004725906200af70565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff08015801562004762573d5f803e3d5ffd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040518190620047ab906200af7e565b6001600160a01b039091168152602001604051809103905ff080158015620047d5573d5f803e3d5ffd5b50602c6001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550308164e8d4a51000620186a060405162004818906200af8c565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff08015801562004855573d5f803e3d5ffd5b50602e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556025805460ff8416908110620048a857620048a86200bf25565b5f91825260209091200154602c546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b15801562004910575f80fd5b505af115801562004923573d5f803e3d5ffd5b5050505060255f018260ff16815481106200494257620049426200bf25565b5f91825260209091200154602d546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b158015620049aa575f80fd5b505af1158015620049bd573d5f803e3d5ffd5b5050505060255f018260ff1681548110620049dc57620049dc6200bf25565b5f91825260209091200154602e546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b15801562004a44575f80fd5b505af115801562004a57573d5f803e3d5ffd5b5050602c54602780546001600160a01b039092169350915060ff851690811062004a855762004a856200bf25565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602d546028805491909216919060ff851690811062004ae45762004ae46200bf25565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602e546029805491909216919060ff851690811062004b435762004b436200bf25565b5f918252602082200180546001600160a01b03939093167fffffffffffffffffffffffff0000000000000000000000000000000000000000909316929092179091556040805160018082528183019092529081602001602082028036833701905050905030815f8151811062004bbd5762004bbd6200bf25565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092525f9290919082016060803683375050602c5482519293506001600160a01b0316918391505f9062004c1a5762004c1a6200bf25565b6001600160a01b039283166020918202929092010152602d5482519116908290600190811062004c4e5762004c4e6200bf25565b6001600160a01b039283166020918202929092010152602e5482519116908290600290811062004c825762004c826200bf25565b6001600160a01b039283166020918202929092010152602b5460405185925f9285929116903090879062004cb6906200af9a565b62004cc7969594939291906200c8b8565b604051809103905ff08015801562004ce1573d5f803e3d5ffd5b50602f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff861690811062004d345762004d346200bf25565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1660405162004d66906200afa8565b63ffffffff9091168152602001604051809103905ff08015801562004d8d573d5f803e3d5ffd5b50603180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602f546040517fc7b2370b00000000000000000000000000000000000000000000000000000000815260048101929092529091169063c7b2370b906024015f604051808303815f87803b15801562004e1b575f80fd5b505af115801562004e2e573d5f803e3d5ffd5b5050505060256001018460ff168154811062004e4e5762004e4e6200bf25565b5f918252602090912060088204015460079091166004026101000a900463ffffffff1662004e7e8560016200beed565b602b5460405184916001600160a01b031690602a90600190889062004ea3906200afb6565b62004eb597969594939291906200c908565b604051809103905ff08015801562004ecf573d5f803e3d5ffd5b50603080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff861690811062004f225762004f226200bf25565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16670de0b6b3a764000060405162004f5d906200afc4565b63ffffffff90921682526020820152604001604051809103905ff08015801562004f89573d5f803e3d5ffd5b50603280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f39f26dfc000000000000000000000000000000000000000000000000000000008152670de0b6b3a764000060048201819052602482015261271060448201526339f26dfc906064015f604051808303815f87803b15801562005025575f80fd5b505af115801562005038573d5f803e3d5ffd5b50506030546032546040517fc7b2370b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063c7b2370b91506024015f604051808303815f87803b1580156200509c575f80fd5b505af1158015620050af573d5f803e3d5ffd5b505050505050620050da60405180606001604052806060815260200160608152602001606081525090565b620050e78660016200beed565b60ff1667ffffffffffffffff8111156200510557620051056200b23a565b6040519080825280602002602001820160405280156200516557816020015b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a082015282525f19909201910181620051245790505b508152620051758660016200beed565b60ff1667ffffffffffffffff8111156200519357620051936200b23a565b604051908082528060200260200182016040528015620051e557816020015b604080516080810182525f8082526020808301829052928201819052606082015282525f19909201910181620051b25790505b506020820152620051f88660016200beed565b60ff1667ffffffffffffffff8111156200521657620052166200b23a565b6040519080825280602002602001820160405280156200525c57816020015b604080518082019091525f8082526020820152815260200190600190039081620052355790505b50604082810191909152805160018082528183019092525f91602080830190803683375050604080515f80825260208201909252603054845194955090936001600160a01b039091169250849190620052b957620052b96200bf25565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5b8860ff168160ff1610156200596b578060ff168660ff16031562005962575f620053078260016200beed565b60408051600180825281830190925260ff9290921692505f9190816020015b620053306200afd2565b815260200190600190039081620053265790505090505f6040518060c00160405280606467ffffffffffffffff168152602001875160ff168152602001865160ff1681526020015f60ff16815260200187815260200186815250905060405180604001604052808463ffffffff16815260200182815250825f81518110620053bc57620053bc6200bf25565b6020908102919091010152602c546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906329460b0b90620054129085906004016200c9b5565b5f604051808303815f87803b1580156200542a575f80fd5b505af11580156200543d573d5f803e3d5ffd5b5050602d546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329460b0b91506200548c9085906004016200c9b5565b5f604051808303815f87803b158015620054a4575f80fd5b505af1158015620054b7573d5f803e3d5ffd5b505f925060019150620054c79050565b6040519080825280602002602001820160405280156200550457816020015b620054f06200b037565b815260200190600190039081620054e65790505b506040805180820182526127108152602f546001600160a01b0316602080830191909152825180840190935263ffffffff88168352820181905282519293509183905f906200555757620055576200bf25565b6020908102919091010152602c546040517fc14c43490000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c14c434990620055ad9085906004016200cab0565b5f604051808303815f87803b158015620055c5575f80fd5b505af1158015620055d8573d5f803e3d5ffd5b50506040805160c08101825263ffffffff89168152611388602082018190529181019190915261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a08201528b518051919550935060ff89169250821090506200564d576200564d6200bf25565b602002602001018190525060405180608001604052808463ffffffff16815260200161138867ffffffffffffffff16815260200161271061ffff1681526020016402540be4006fffffffffffffffffffffffffffffffff1681525087602001518560ff1681518110620056c457620056c46200bf25565b602002602001018190525060405180604001604052808463ffffffff168152602001600381525087604001518560ff16815181106200570757620057076200bf25565b60200260200101819052505f60256006015f9054906101000a90046001600160a01b03166001600160a01b031663c18403276040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005767573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200578d91906200cb20565b6040805160018082528183019092529192505f9190816020015b620057da6040805180820182525f8082528251606081018452818152602081810183905293810191909152909182015290565b815260200190600190039081620057a757905050905060405180604001604052808663ffffffff16815260200160405180606001604052808560016200582191906200cb3e565b6fffffffffffffffffffffffffffffffff1681526001602082018190526040909101529052815182905f906200585b576200585b6200bf25565b6020908102919091010152602b546040517f3161b7f60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690633161b7f690620058b19084906004016200cb75565b5f604051808303815f87803b158015620058c9575f80fd5b505af1158015620058dc573d5f803e3d5ffd5b5050602b546040517f5d6d7ccb00000000000000000000000000000000000000000000000000000000815268056bc75e2d6310000060048201526001600160a01b039091169250635d6d7ccb91506024015f604051808303815f87803b15801562005945575f80fd5b505af115801562005958573d5f803e3d5ffd5b5050505050505050505b600101620052db565b506040805160018082528183019092525f91816020015b6200598c6200b079565b815260200190600190039081620059825750506040805160c081018252602f546001600160a01b03168152855160ff9081166020808401919091528651909116828401525f606083018190526080830188905260a0830187905283518085019094526201117184529083018290528351939450909284919062005a135762005a136200bf25565b6020908102919091010152602e546040517fc85f4b4e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c85f4b4e9062005a699085906004016200cbf2565b5f604051808303815f87803b15801562005a81575f80fd5b505af115801562005a94573d5f803e3d5ffd5b5050505050506040518060c0016040528060256001018760ff168154811062005ac15762005ac16200bf25565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff168252611388908201819052604082015261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a0909101528351805160ff8b1690811062005b3d5762005b3d6200bf25565b6020026020010181905250604051806080016040528060256001018760ff168154811062005b6f5762005b6f6200bf25565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff1682526113888282015261271060408301526402540be400606090920191909152840151805160ff8b1690811062005bce5762005bce6200bf25565b6020026020010181905250604051806040016040528060256001018760ff168154811062005c005762005c006200bf25565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff16825260039101526040840151805160ff8b1690811062005c485762005c486200bf25565b6020908102919091010152602f5483516040517f3d85ac330000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691633d85ac339162005c9e916004016200ccec565b5f604051808303815f87803b15801562005cb6575f80fd5b505af115801562005cc9573d5f803e3d5ffd5b505060305460208601516040517f52d3b8710000000000000000000000000000000000000000000000000000000081526001600160a01b0390921693506352d3b871925062005d1b916004016200cd87565b5f604051808303815f87803b15801562005d33575f80fd5b505af115801562005d46573d5f803e3d5ffd5b505060325460408087015190517ff5ff608f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909216935063f5ff608f925062005d98916004016200ce05565b5f604051808303815f87803b15801562005db0575f80fd5b505af115801562005dc3573d5f803e3d5ffd5b505050505050505062005ff6565b600183600181111562005de85762005de86200c88b565b0362005f93575f3060255f018360ff168154811062005e0b5762005e0b6200bf25565b5f918252602090912001546040516001600160a01b039091169062005e30906200b0d8565b6001600160a01b03928316815291166020820152604001604051809103905ff08015801562005e61573d5f803e3d5ffd5b50905060255f018260ff168154811062005e7f5762005e7f6200bf25565b5f918252602090912001546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063e8964e81906024015f604051808303815f87803b15801562005ee5575f80fd5b505af115801562005ef8573d5f803e3d5ffd5b505050508060256002018360ff168154811062005f195762005f196200bf25565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060256003018360ff168154811062005f615762005f616200bf25565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505062005ff6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206c6962726172792074797065000000000000000000000000604482015260640162003522565b600101620046a7565b505f5b8360ff168160ff16101562001058575f60255f018260ff16815481106200602d576200602d6200bf25565b5f9182526020822001546001600160a01b031691508460018111156200605757620060576200c88b565b03620061c857806001600160a01b031663aafea3126201117160256004018560ff16815481106200608c576200608c6200bf25565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b158015620060f9575f80fd5b505af11580156200610c573d5f803e3d5ffd5b50505050806001600160a01b031663a718531b6201117160256004018560ff16815481106200613f576200613f6200bf25565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b158015620061b0575f80fd5b505af1158015620061c3573d5f803e3d5ffd5b505050505b5f5b8560ff168160ff16101562006366578060ff168360ff1603156200635d576001600160a01b03821663aafea312620062048360016200beed565b6027805460ff88169081106200621e576200621e6200bf25565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b15801562006288575f80fd5b505af11580156200629b573d5f803e3d5ffd5b50505050816001600160a01b031663a718531b826001620062bd91906200beed565b6028805460ff8816908110620062d757620062d76200bf25565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b15801562006345575f80fd5b505af115801562006358573d5f803e3d5ffd5b505050505b600101620061ca565b505060010162006002565b60606015805480602002602001604051908101604052809291908181526020018280548015620011a057602002820191905f5260205f209081546001600160a01b0316815260019091019060200180831162001181575050505050905090565b5f60235f620063e186866200659d565b63ffffffff16815260208101919091526040015f908120546001600160a01b03169150806200641084620086c6565b915091505f60405180606001604052806200642c8989620066f7565b63ffffffff16815260200162006443898962006708565b815260200162006454898962006724565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e848484620064808c8c6200674a565b6200648c8d8d6200675e565b620064988e8e620082fe565b60405180602001604052805f8152506040518963ffffffff1660e01b8152600401620064ca969594939291906200ce4e565b5f604051808303818589803b158015620064e2575f80fd5b5088f1158015620064f5573d5f803e3d5ffd5b50505050505050505050505050565b5f8062004040848462008809565b5f6200651f85856200659d565b90505f6200652e868662008883565b63ffffffff83165f9081526020808052604080832084845290915281209192506200655a88886200675e565b905062006568828262008894565b5f81815260216020526040902062006582888a836200cf13565b505f81815260226020526040902062003d868688836200cf13565b5f620065ae6031602d84866200cfda565b620065b9916200d003565b60e01c9392505050565b5f805f805f620065d586600562008927565b915091508162006668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f7074696f6e7348656c7065723a206c7a52656164206f7074696f6e206e6f7460448201527f20666f756e640000000000000000000000000000000000000000000000000000606482015260840162003522565b6040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca8690620066a69084906004016200b42c565b606060405180830381865afa158015620066c2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620066e891906200d04a565b94509450945050509193909250565b5f620065ae600d600984866200cfda565b5f62006719602d600d84866200cfda565b620012bc916200d090565b5f620067356009600184866200cfda565b62006740916200d0ae565b60c01c9392505050565b5f620012bc6200675b848462008883565b90565b5f620067196071605184866200cfda565b6200677962008f63565b6033546200678b9060ff165f620010f2565b60025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c0954603d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390921691821790556040513090620067fc906200b0e6565b620068099291906200d0f5565b604051809103905ff08015801562006823573d5f803e3d5ffd5b50603380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384160217905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e0475460405191169030906200689a906200b0e6565b620068a79291906200d192565b604051809103905ff080158015620068c1573d5f803e3d5ffd5b50603580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e54604051911690309062006934906200b0e6565b620069419291906200d20c565b604051809103905ff0801580156200695b573d5f803e3d5ffd5b50603780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff811115620069b757620069b76200b23a565b604051908082528060200260200182016040528015620069e1578160200160208202803683370190505b5060355481519192506001600160a01b03169082905f9062006a075762006a076200bf25565b6001600160a01b0392831660209182029290920101526033548251610100909104909116908290600190811062006a425762006a426200bf25565b6001600160a01b03928316602091820292909201015260375482519116908290600290811062006a765762006a766200bf25565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca2549062006acc9084906004016200b4d2565b5f604051808303815f87803b15801562006ae4575f80fd5b505af115801562006af7573d5f803e3d5ffd5b50505050603360019054906101000a90046001600160a01b031660405162006b1f906200b0f4565b62006b2b91906200d286565b604051809103905ff08015801562006b45573d5f803e3d5ffd5b50603980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c095460405191921690309062006bbc906200b102565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff08015801562006bf6573d5f803e3d5ffd5b50603480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556039546033546040519184169361010090910416919062006c4f906200b110565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff08015801562006c89573d5f803e3d5ffd5b50603a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e04754604051911690309062006cfc906200b0e6565b62006d099291906200d318565b604051809103905ff08015801562006d23573d5f803e3d5ffd5b50603680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e54604051911690309062006d96906200b0e6565b62006da39291906200d392565b604051809103905ff08015801562006dbd573d5f803e3d5ffd5b50603880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff81111562006e195762006e196200b23a565b60405190808252806020026020018201604052801562006e43578160200160208202803683370190505b5060365481519192506001600160a01b03169082905f9062006e695762006e696200bf25565b6001600160a01b03928316602091820292909201015260345482519116908290600190811062006e9d5762006e9d6200bf25565b6001600160a01b03928316602091820292909201015260385482519116908290600290811062006ed15762006ed16200bf25565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca2549062006f279084906004016200b4d2565b5f604051808303815f87803b15801562006f3f575f80fd5b505af115801562006f52573d5f803e3d5ffd5b5050603354604080517fc657c7180000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b031660048301526024820152600d60448201527f41737365744f46543a3a617262000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562006ffd575f80fd5b505af115801562007010573d5f803e3d5ffd5b5050603554604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b158015620070b7575f80fd5b505af1158015620070ca573d5f803e3d5ffd5b5050603754604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562007171575f80fd5b505af115801562007184573d5f803e3d5ffd5b5050603454604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601460448201527f53686172654f4654416461707465723a3a6172620000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b1580156200722b575f80fd5b505af11580156200723e573d5f803e3d5ffd5b5050603654604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b158015620072e5575f80fd5b505af1158015620072f8573d5f803e3d5ffd5b5050603854604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b1580156200739f575f80fd5b505af1158015620073b2573d5f803e3d5ffd5b5050603954604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600a60448201527f5661756c743a3a617262000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562007459575f80fd5b505af11580156200746c573d5f803e3d5ffd5b5050603a54604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601660448201527f5661756c74436f6d706f73657253796e633a3a617262000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562007513575f80fd5b505af115801562007526573d5f803e3d5ffd5b5050603e546200754c92506001600160a01b0316905068056bc75e2d6310000062008f6f565b603d546200756d906001600160a01b031668056bc75e2d6310000062008f6f565b604080516003808252608082019092525f91816020015b60408051606080820183525f808352602083015291810191909152815260200190600190039081620075845790505090506040518060600160405280600363ffffffff168152602001600161ffff168152602001603f8054620075e7906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462007615906200be6d565b8015620076645780601f106200763a5761010080835404028352916020019162007664565b820191905f5260205f20905b8154815290600101906020018083116200764657829003601f168201915b5050505050815250815f815181106200768157620076816200bf25565b60200260200101819052506040518060600160405280600263ffffffff168152602001600161ffff168152602001603f8054620076be906200be6d565b80601f0160208091040260200160405190810160405280929190818152602001828054620076ec906200be6d565b80156200773b5780601f1062007711576101008083540402835291602001916200773b565b820191905f5260205f20905b8154815290600101906020018083116200771d57829003601f168201915b5050505050815250816001815181106200775957620077596200bf25565b60200260200101819052506040518060600160405280600163ffffffff168152602001600161ffff168152602001603f805462007796906200be6d565b80601f0160208091040260200160405190810160405280929190818152602001828054620077c4906200be6d565b8015620078135780601f10620077e95761010080835404028352916020019162007813565b820191905f5260205f20905b815481529060010190602001808311620077f557829003601f168201915b5050505050815250816002815181106200783157620078316200bf25565b60209081029190910101526033546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063b98bd070906200788b9084906004016200d40c565b5f604051808303815f87803b158015620078a3575f80fd5b505af1158015620078b6573d5f803e3d5ffd5b50506035546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd0709150620079059084906004016200d40c565b5f604051808303815f87803b1580156200791d575f80fd5b505af115801562007930573d5f803e3d5ffd5b50506037546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200797f9084906004016200d40c565b5f604051808303815f87803b15801562007997575f80fd5b505af1158015620079aa573d5f803e3d5ffd5b50506034546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd0709150620079f99084906004016200d40c565b5f604051808303815f87803b15801562007a11575f80fd5b505af115801562007a24573d5f803e3d5ffd5b50506036546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd070915062007a739084906004016200d40c565b5f604051808303815f87803b15801562007a8b575f80fd5b505af115801562007a9e573d5f803e3d5ffd5b50506038546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd070915062007aed9084906004016200d40c565b5f604051808303815f87803b15801562007b05575f80fd5b505af115801562007b18573d5f803e3d5ffd5b50505050505050565b5f808360405160200162007b3691906200d4a9565b60408051601f198184030181529082905262007b579185906020016200d4c6565b60405160208183030381529060405290508051602082015ff09150813b6200349a575f80fd5b5f805f805f62007b8f86600362008927565b915091508162007c22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a436f6d706f7365206f7074696f6e2060448201527f6e6f7420666f756e640000000000000000000000000000000000000000000000606482015260840162003522565b6040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab09062007c609084906004016200b42c565b606060405180830381865afa15801562007c7c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062007ca291906200d4f8565b91986fffffffffffffffffffffffffffffffff9182169850911695509350505050565b5f80806012841480159062007cdb575060228414155b1562007d13576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62007d2085855f62008ffd565b925062007d308585600262009027565b91506022841462007d42575f62007d50565b62007d508585601262009027565b90509250925092565b5f8083600f84900b82131562007e0c575f62007d77855f196200d52b565b6fffffffffffffffffffffffffffffffff1690508086101562007df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4f666673657420746f6f206c6172676500000000000000000000000000000000604482015260640162003522565b62007e0381876200c2ab565b91505062007e2d565b62007e2a6fffffffffffffffffffffffffffffffff8516866200c226565b90505b62007e388162009051565b92509250509250929050565b6200300f8383835f6200907c565b5f8062007e68670de0b6b3a7640000856200bfb2565b915062007e7e670de0b6b3a7640000846200bfb2565b6039546040517f40c10f1900000000000000000000000000000000000000000000000000000000815261beef6004820152602481018390529192506001600160a01b0316906340c10f19906044015f604051808303815f87803b15801562007ee4575f80fd5b505af115801562007ef7573d5f803e3d5ffd5b50506033546039546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018790526101009092041692506340c10f1991506044015f604051808303815f87803b15801562007f67575f80fd5b505af115801562007f7a573d5f803e3d5ffd5b505050509250929050565b606083600362007f96825f620092fb565b61ffff161462007fe65762007fac815f620092fb565b6040517f3a51740d00000000000000000000000000000000000000000000000000000000815261ffff909116600482015260240162003522565b5f62007ff385856200937e565b9050620080038660018362009432565b9695505050505050565b60608460036200801e825f620092fb565b61ffff1614620080345762007fac815f620092fb565b5f62008042868686620094a6565b9050620080528760038362009432565b979650505050505050565b6200809f83836040518060400160405280600e81526020017f7465726d3120213d207465726d3200000000000000000000000000000000000081525062008115565b6200300f83826040518060400160405280600e81526020017f7465726d3120213d207465726d3300000000000000000000000000000000000081525062008115565b606084848484604051602001620080fc94939291906200d54d565b6040516020818303038152906040529050949350505050565b6040517f88b44c85000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906388b44c85906200816b908690869086906004016200d5cc565b5f6040518083038186803b15801562008182575f80fd5b505afa15801562007b18573d5f803e3d5ffd5b365f6200404060518285876200cfda565b365f6200404083605181876200cfda565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290526060905f90605c0160408051601f198184030181529082905280516020909101207fe341eaa4000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291505f9081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e341eaa490604401606060405180830381865afa1580156200827c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620082a291906200d5ec565b6040805160208101939093528281019190915260f89290921b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260619091019091529695505050505050565b365f6200404083607181876200cfda565b5f368160018401816200832488888462008ffd565b6002929092019190506200833a888884620095b4565b94506001820161ffff821683016200835581838b8d6200cfda565b979b909a50969850505061ffff160193505050565b5f6200839f825470010000000000000000000000000000000081046fffffffffffffffffffffffffffffffff90811691161490565b15620083b157620083b16032620095db565b5080545f196fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909204821601165f9081526001909101602052604090205490565b80545f906fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116911681036200843457620084346031620095db565b5f19016fffffffffffffffffffffffffffffffff9081165f818152600185016020526040812080549190558454909216700100000000000000000000000000000000909102179092555090565b5f6200848e838362008927565b509392505050565b5f805f80620084a785600262008927565b91509150816200853a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696f6e7348656c7065723a206e617469766544726f70206f7074696f6e60448201527f206e6f7420666f756e6400000000000000000000000000000000000000000000606482015260840162003522565b6040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf690620085789084906004016200b42c565b6040805180830381865afa15801562008593573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620085b991906200d623565b6fffffffffffffffffffffffffffffffff909116969095509350505050565b5f808060148414801590620085ee575060248414155b1562008626576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200863385855f62009027565b92506200864385856010620095ec565b91506024841462008655575f62007d50565b62007d508585601462009027565b5f8060308314620086a0576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620086ad84845f62009027565b9150620086bd8484601062009616565b90509250929050565b5f805f80620086d785600162008927565b91509150816200876a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a52656365697665206f7074696f6e2060448201527f6e6f7420666f756e640000000000000000000000000000000000000000000000606482015260840162003522565b6040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d6190620087a89084906004016200b42c565b6040805180830381865afa158015620087c3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620087e991906200d652565b6fffffffffffffffffffffffffffffffff91821697911695509350505050565b5f80601083148015906200881e575060208314155b1562008856576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200886384845f62009027565b91506020831462008875575f620086bd565b620086bd8484601062009027565b5f620067196051603184866200cfda565b81546fffffffffffffffffffffffffffffffff8082165f1901917001000000000000000000000000000000009004811690821603620088d957620088d96041620095db565b6fffffffffffffffffffffffffffffffff165f81815260018401602052604090209190915581547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016179055565b601f546040517fe5c5e9a30000000000000000000000000000000000000000000000000000000081525f91606091839161010090046001600160a01b03169063e5c5e9a3906200897c9088906004016200b42c565b5f60405180830381865afa15801562008997573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052620089c091908101906200d684565b50604080515f80825260208201909252919250908190819081905b855185101562008f38576040517f6e1775e30000000000000000000000000000000000000000000000000000000081525f90819081903090636e1775e39062008a2b908c908c906004016200c676565b5f60405180830381865afa15801562008a46573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405262008a6f91908101906200d6eb565b9250925092508b60ff168360ff160362008f2d575f808080805f1960ff89160162008b95576040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d619062008ad2908a906004016200b42c565b6040805180830381865afa15801562008aed573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062008b1391906200d652565b909550935062008b24858d6200d747565b9b5062008b32848c6200d747565b9a508b8b60405160200162008b7e929190608092831b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000090811682529190921b16601082015260200190565b604051602081830303815290604052985062008f27565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff89160162008c92576040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf69062008bfe908a906004016200b42c565b6040805180830381865afa15801562008c19573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062008c3f91906200d623565b909450925062008c50848c6200d747565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b16602082015260308101859052909b5060500162008b7e565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff89160162008dcf576040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab09062008cfb908a906004016200b42c565b606060405180830381865afa15801562008d17573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062008d3d91906200d4f8565b9096509450915062008d50858d6200d747565b9b5062008d5e848c6200d747565b6040517fffff00000000000000000000000000000000000000000000000000000000000060f085901b1660208201527fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b8216602284015283901b166032820152909b5060420162008b7e565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff89160162008f27576040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca869062008e38908a906004016200b42c565b606060405180830381865afa15801562008e54573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062008e7a91906200d04a565b919650909450905062008e8e848c6200d747565b9a5062008e9c858d6200d747565b9b5062008eaa818b6200d773565b6040517fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b821660208401527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1660308401528e901b166034820152909a5060440160405160208183030381529060405298505b50505050505b9650620089db915050565b80515f0362008f52575f9750955062004045945050505050565b60019a909950975050505050505050565b62008f6d6200963d565b565b6040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015f604051808303815f87803b15801562008fe2575f80fd5b505af115801562008ff5573d5f803e3d5ffd5b505050505050565b5f6002820162009010818486886200cfda565b6200901b916200d793565b60f01c95945050505050565b5f601082016200903a818486886200cfda565b62009045916200d7da565b60801c95945050505050565b5f80806200906564e8d4a51000856200d821565b90506200907381856200c2ab565b94909350915050565b604080516001600160a01b0385811660248084019190915283518084039091018152604490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905291515f92871691620090ff916200d4a9565b5f60405180830381855afa9150503d805f811462009139576040519150601f19603f3d011682016040523d82523d5f602084013e6200913e565b606091505b509150505f818060200190518101906200915991906200bfcc565b9050620091ac84620091a5876200919e7f70a082310000000000000000000000000000000000000000000000000000000062009197600d8d6200968e565b90620096cb565b9062009703565b906200972e565b821562008ff55760408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f18160ddd0000000000000000000000000000000000000000000000000000000017905290515f916001600160a01b038916916200922491906200d4a9565b5f60405180830381855afa9150503d805f81146200925e576040519150601f19603f3d011682016040523d82523d5f602084013e62009263565b606091505b509150505f818060200190518101906200927e91906200bfcc565b905082861015620092a9576200929586846200c2ab565b620092a190826200c2ab565b9050620092c4565b620092b583876200c2ab565b620092c190826200c226565b90505b62002f1481620091a57f18160ddd0000000000000000000000000000000000000000000000000000000062009197600d8d6200968e565b5f620093098260026200c226565b8351101562009375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e6473000000000000000000000000604482015260640162003522565b50016002015190565b60606fffffffffffffffffffffffffffffffff821615620093e957604080517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608086811b8216602084015285901b16603082015201604051602081830303815290604052620012bc565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608085901b166020820152603001604051602081830303815290604052905092915050565b606083600362009443825f620092fb565b61ffff1614620094595762007fac815f620092fb565b8460016200946885516200973a565b620094759060016200d837565b86866040516020016200948d9594939291906200d855565b6040516020818303038152906040529150509392505050565b60606fffffffffffffffffffffffffffffffff8216156200953e576040517fffff00000000000000000000000000000000000000000000000000000000000060f086901b1660208201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608085811b8216602284015284901b166032820152604201604051602081830303815290604052620095ac565b6040517fffff00000000000000000000000000000000000000000000000000000000000060f086901b1660208201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608085901b1660228201526032016040516020818303038152906040525b949350505050565b5f838383818110620095ca57620095ca6200bf25565b919091013560f81c95945050505050565b634e487b715f52806020526024601cfd5b5f60048201620095ff818486886200cfda565b6200960a916200d003565b60e01c95945050505050565b5f6020820162009629818486886200cfda565b62009634916200d090565b95945050505050565b6040516200964b906200b11e565b604051809103905ff08015801562009665573d5f803e3d5ffd5b50601f60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550565b6004820180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555f82620012bc565b6002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001660e083901c1790555f82620012bc565b6001808301805491820181555f908152602081206001600160a01b03841692019190915582620012bc565b62000e61828262009787565b5f61ffff82111562009783576040517f6dfcc650000000000000000000000000000000000000000000000000000000008152601060048201526024810183905260440162003522565b5090565b6004820154600283015460038401546001600160a01b039092169160e09190911b905f620097b58662009cbe565b6001600160a01b0385165f908152602088815260408083207fffffffff000000000000000000000000000000000000000000000000000000008816845282528083209051939450926200980d9185918791016200d8f1565b60408051601f198184030181529181528151602092830120835290820192909252015f206003015460ff166200984b5762009849865f62009dd6565b505b6001600160a01b0384165f908152602087815260408083207fffffffff00000000000000000000000000000000000000000000000000000000871684528252808320905190918391620098a39186918891016200d8f1565b6040516020818303038152906040528051906020012081526020019081526020015f2090505f81600201548260010154620098df91906200c226565b111562009a0e575f81600201548260010154620098fd91906200c226565b6200990b906101006200c2ab565b620099189060026200da0d565b6040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810182905290915081881090737109709ecfa91a80626ff3989d68f67f5b1dd12d90636900a3ae906024015f60405180830381865afa15801562009986573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052620099af91908101906200da1a565b604051602001620099c191906200da64565b6040516020818303038152906040529062009a0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200352291906200b42c565b50505b80546040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b038716600482015260248101919091525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d9063667f9d7090604401602060405180830381865afa15801562009a8a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062009ab091906200bfcc565b60018381015460028501549293505f92908101610100039190911b5f1901811b1983169089901b1783546040517f70ca10bb0000000000000000000000000000000000000000000000000000000081526001600160a01b038a166004820152602481019190915260448101829052909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906370ca10bb906064015f604051808303815f87803b15801562009b58575f80fd5b505af115801562009b6b573d5f803e3d5ffd5b505050505f8062009b7c8b62009deb565b9150915081158062009b8e5750898114155b1562009cb35784546040517f70ca10bb0000000000000000000000000000000000000000000000000000000081526001600160a01b038b166004820152602481019190915260448101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d906370ca10bb906064015f604051808303815f87803b15801562009c11575f80fd5b505af115801562009c24573d5f803e3d5ffd5b50506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f73746453746f726167652066696e642853746453746f72616765293a2046616960448201527f6c656420746f2077726974652076616c75652e0000000000000000000000000060648201526084019150620035229050565b620021628b62009ebc565b606081600701805462009cd1906200be6d565b90505f0362009d3757620015fc8260010180548060200260200160405190810160405280929190818152602001828054801562009d2c57602002820191905f5260205f20905b81548152602001906001019080831162009d17575b505050505062009eca565b81600701805462009d48906200be6d565b80601f016020809104026020016040519081016040528092919081815260200182805462009d76906200be6d565b801562009dc55780601f1062009d9b5761010080835404028352916020019162009dc5565b820191905f5260205f20905b81548152906001019060200180831162009da757829003601f168201915b50505050509050919050565b919050565b5f62009de3838362009f67565b549392505050565b60028101545f908190819060e01b62009e048562009cbe565b60405160200162009e179291906200daf6565b60408051601f198184030181529082905260048601549092505f9182916001600160a01b03169062009e4b9085906200d4a9565b5f60405180830381855afa9150503d805f811462009e85576040519150601f19603f3d011682016040523d82523d5f602084013e62009e8a565b606091505b50915091505f62009eae828860030154602062009ea891906200bfb2565b6200a806565b929792965091945050505050565b62009ec7816200a899565b50565b60605f8251602062009edd91906200bfb2565b67ffffffffffffffff81111562009ef85762009ef86200b23a565b6040519080825280601f01601f19166020018201604052801562009f23576020820181803683370190505b5090505f5b83518110156200349a575f84828151811062009f485762009f486200bf25565b6020908102919091018101518382028501909101525060010162009f28565b6004820154600283015460038401545f926001600160a01b03169160e01b908362009f928762009cbe565b6001600160a01b0385165f908152602089815260408083207fffffffff0000000000000000000000000000000000000000000000000000000088168452825280832090519394509262009fea9185918791016200d8f1565b60408051601f198184030181529181528151602092830120835290820192909252015f206003015460ff16156200a0b35785156200a02d576200a02d876200a899565b6001600160a01b0384165f908152602088815260408083207fffffffff0000000000000000000000000000000000000000000000000000000087168452825280832090519092916200a0849185918791016200d8f1565b6040516020818303038152906040528051906020012081526020019081526020015f20945050505050620015fc565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c6001600160a01b031663266cf1096040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156200a10e575f80fd5b505af11580156200a121573d5f803e3d5ffd5b505050505f6200a1318862009deb565b6040517f65bc94810000000000000000000000000000000000000000000000000000000081526001600160a01b03881660048201529092505f9150737109709ecfa91a80626ff3989d68f67f5b1dd12d906365bc9481906024015f604051808303815f875af11580156200a1a7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200a1d091908101906200dba2565b50905080515f036200a26757604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f73746453746f726167652066696e642853746453746f72616765293a204e6f2060448201527f73746f726167652075736520646574656374656420666f72207461726765742e606482015260840162003522565b80515b5f6200a276826200c762565b915081106200a65b575f7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c6001600160a01b031663667f9d70898585815181106200a2c7576200a2c76200bf25565b60200260200101516040518363ffffffff1660e01b81526004016200a3019291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa1580156200a31d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a34391906200bfcc565b9050806200a3ad577f080fc4a96620c4462e705b23f346413fe3796bb63c6f8d8591baec0e231577a5888484815181106200a382576200a3826200bf25565b602090810291909101810151604080516001600160a01b039094168452918301520160405180910390a15b6200a3d58b8484815181106200a3c7576200a3c76200bf25565b60200260200101516200a93e565b6200a3e157506200a26a565b60068b01545f90819060ff16156200a435575f6200a41c8e8787815181106200a40e576200a40e6200bf25565b60200260200101516200ab6f565b90945092509050806200a43357505050506200a26a565b505b6001828201610100031b5f1901811b8316811c8681146200a45a57505050506200a26a565b7f9c9555b1e3102e3cf48f427d79cb678f5d9bd1ed0ad574389461e255f95170ed8b8b8a8c6040516020016200a4929291906200d8f1565b604051602081830303815290604052805190602001208989815181106200a4bd576200a4bd6200bf25565b602090810291909101810151604080516001600160a01b0390961686527fffffffff000000000000000000000000000000000000000000000000000000009094169185019190915291830152606082015260800160405180910390a160405180608001604052808787815181106200a539576200a5396200bf25565b60200260200101515f1c8152602001848152602001838152602001600115158152508e5f015f8d6001600160a01b03166001600160a01b031681526020019081526020015f205f8c7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f205f8a8c6040516020016200a5e29291906200d8f1565b60408051808303601f1901815291815281516020928301208352828201939093529082015f2083518155908301516001820155908201516002820155606090910151600390910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055505050505b506001600160a01b0386165f90815260208a815260408083207fffffffff0000000000000000000000000000000000000000000000000000000089168452825280832090519092916200a6b39187918991016200d8f1565b60408051601f198184030181529181528151602092830120835290820192909252015f206003015460ff166200a76c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f73746453746f726167652066696e642853746453746f72616765293a20536c6f60448201527f74287329206e6f7420666f756e642e0000000000000000000000000000000000606482015260840162003522565b87156200a77e576200a77e896200a899565b6001600160a01b0386165f90815260208a815260408083207fffffffff0000000000000000000000000000000000000000000000000000000089168452825280832090519092916200a7d59187918991016200d8f1565b6040516020818303038152906040528051906020012081526020019081526020015f20965050505050505092915050565b5f805f60208551116200a81b5784516200a81e565b60205b90505f5b818110156200a88f576200a8388160086200bfb2565b866200a84583886200c226565b815181106200a858576200a8586200bf25565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c92909217916001016200a822565b5090949350505050565b6004810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556002810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690556200a8fc600182015f6200b12c565b5f600382018190556006820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905562009ec79060078301906200b149565b6004828101546040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691810191909152602481018290525f908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063667f9d7090604401602060405180830381865afa1580156200a9c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a9e891906200bfcc565b90505f806200a9f78662009deb565b90925090505f81156200aa0b575f6200aa0e565b5f195b6004888101546040517f70ca10bb0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116918101919091526024810188905260448101829052909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906370ca10bb906064015f604051808303815f87803b1580156200aa94575f80fd5b505af11580156200aaa7573d5f803e3d5ffd5b505050505f6200aab78862009deb565b60048a8101546040517f70ca10bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691810191909152602481018a905260448101889052909250737109709ecfa91a80626ff3989d68f67f5b1dd12d91506370ca10bb906064015f604051808303815f87803b1580156200ab3e575f80fd5b505af11580156200ab51573d5f803e3d5ffd5b505050508380156200ab635750808314155b98975050505050505050565b6004828101546040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691810191909152602481018290525f90819081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063667f9d7090604401602060405180830381865afa1580156200abf7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200ac1d91906200bfcc565b90505f806200ac2f888860016200acfc565b915091505f806200ac428a8a5f6200acfc565b60048c8101546040517f70ca10bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691810191909152602481018c9052604481018890529193509150737109709ecfa91a80626ff3989d68f67f5b1dd12d906370ca10bb906064015f604051808303815f87803b1580156200acca575f80fd5b505af11580156200acdd573d5f803e3d5ffd5b505050508380156200acec5750815b9a92995097509095505050505050565b5f805f5b6101008110156200ae0c575f846200ad1c576001821b6200ad2e565b6200ad298260ff6200c2ab565b6001901b5b6004888101546040517f70ca10bb0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116918101919091526024810188905260448101829052909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906370ca10bb906064015f604051808303815f87803b1580156200adb4575f80fd5b505af11580156200adc7573d5f803e3d5ffd5b505050505f806200add88962009deb565b915091508180156200ade957508015155b156200ae005760018495509550505050506200ae14565b5050506001016200ad00565b505f80915091505b935093915050565b828054828255905f5260205f209081019282156200ae8a579160200282015b828111156200ae8a57825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039091161782556020909201916001909101906200ae3b565b50620097839291506200b180565b828054828255905f5260205f20906007016008900481019282156200ae8a579160200282015f5b838211156200af0557835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026200aebf565b80156200af375782816101000a81549063ffffffff02191690556004016020816003010492830192600103026200af05565b5050620097839291506200b180565b615fc2806200dc0083390190565b6161938062013bc283390190565b61196d8062019d5583390190565b615881806201b6c283390190565b612b7c8062020f4383390190565b615cb28062023abf83390190565b613af9806202977183390190565b611b50806202d26a83390190565b614aae806202edba83390190565b612470806203386883390190565b60405180604001604052805f63ffffffff1681526020016200b0326040518060c001604052805f67ffffffffffffffff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b905290565b60405180604001604052805f63ffffffff1681526020016200b03260405180604001604052805f63ffffffff1681526020015f6001600160a01b031681525090565b60405180604001604052805f63ffffffff1681526020016200b0326040518060c001604052805f6001600160a01b031681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b611e158062035cd883390190565b613f7b8062037aed83390190565b611b1c806203ba6883390190565b61355f806203d58483390190565b6124be8062040ae383390190565b610aa98062042fa183390190565b5080545f8255905f5260205f209081019062009ec791906200b180565b5080546200b157906200be6d565b5f825580601f106200b167575050565b601f0160209004905f5260205f209081019062009ec791905b5b8082111562009783575f81556001016200b181565b63ffffffff8116811462009ec7575f80fd5b6001600160a01b038116811462009ec7575f80fd5b5f80604083850312156200b1cf575f80fd5b82356200b1dc816200b196565b915060208301356200b1ee816200b1a8565b809150509250929050565b5f8083601f8401126200b20a575f80fd5b50813567ffffffffffffffff8111156200b222575f80fd5b60208301915083602082850101111562004045575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156200b28d576200b28d6200b23a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156200b2bf576200b2bf6200b23a565b604052919050565b5f67ffffffffffffffff8211156200b2e3576200b2e36200b23a565b50601f01601f191660200190565b5f82601f8301126200b301575f80fd5b81356200b3186200b312826200b2c7565b6200b293565b8181528460208386010111156200b32d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80606085870312156200b35d575f80fd5b843567ffffffffffffffff808211156200b375575f80fd5b6200b383888389016200b1f9565b909650945060208701359150808211156200b39c575f80fd5b6200b3aa888389016200b2f1565b935060408701359150808211156200b3c0575f80fd5b506200b3cf878288016200b2f1565b91505092959194509250565b5f5b838110156200b3f75781810151838201526020016200b3dd565b50505f910152565b5f81518084526200b4188160208601602086016200b3db565b601f01601f19169290920160200192915050565b602081525f620012bc60208301846200b3ff565b60ff8116811462009ec7575f80fd5b80356002811062009dd1575f80fd5b5f80604083850312156200b470575f80fd5b82356200b47d816200b440565b9150620086bd602084016200b44f565b5f815180845260208085019450602084015f5b838110156200b4c75781516001600160a01b0316875295820195908201906001016200b4a0565b509495945050505050565b602081525f620012bc60208301846200b48d565b5f805f606084860312156200b4f9575f80fd5b833567ffffffffffffffff8111156200b510575f80fd5b6200b51e868287016200b2f1565b93505060208401356200b531816200b440565b915060408401356200b543816200b440565b809150509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b848110156200b59d57601f198684030189526200b58a8383516200b3ff565b988401989250908301906001016200b56b565b5090979650505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b63b578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b031684528701518784018790526200b627878501826200b54e565b95880195935050908601906001016200b5d1565b509098975050505050505050565b5f805f805f805f60c0888a0312156200b660575f80fd5b87356200b66d816200b196565b965060208801356200b67f816200b1a8565b9550604088013567ffffffffffffffff808211156200b69c575f80fd5b6200b6aa8b838c016200b2f1565b965060608a0135955060808a013591506200b6c5826200b1a8565b90935060a089013590808211156200b6db575f80fd5b506200b6ea8a828b016200b1f9565b989b979a50959850939692959293505050565b5f80602083850312156200b70f575f80fd5b823567ffffffffffffffff8111156200b726575f80fd5b6200b734858286016200b1f9565b90969095509350505050565b61ffff8116811462009ec7575f80fd5b5f80604083850312156200b762575f80fd5b82356200b76f816200b740565b946020939093013593505050565b5f805f604084860312156200b790575f80fd5b833567ffffffffffffffff808211156200b7a8575f80fd5b6200b7b6878388016200b1f9565b909550935060208601359150808211156200b7cf575f80fd5b506200b7de868287016200b2f1565b9150509250925092565b5f67ffffffffffffffff8211156200b804576200b8046200b23a565b5060051b60200190565b5f82601f8301126200b81e575f80fd5b813560206200b8316200b312836200b7e8565b8083825260208201915060208460051b8701019350868411156200b853575f80fd5b602086015b848110156200b87c5780356200b86e816200b1a8565b83529183019183016200b858565b509695505050505050565b5f80604083850312156200b899575f80fd5b823567ffffffffffffffff808211156200b8b1575f80fd5b6200b8bf868387016200b80e565b93506020915081850135818111156200b8d6575f80fd5b85019050601f810186136200b8e9575f80fd5b80356200b8fa6200b312826200b7e8565b81815260059190911b820183019083810190888311156200b919575f80fd5b928401925b828410156200b9445783356200b934816200b196565b825292840192908401906200b91e565b80955050505050509250929050565b5f815180845260208085019450602084015f5b838110156200b4c75781517fffffffff0000000000000000000000000000000000000000000000000000000016875295820195908201906001016200b966565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b63b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815180518785526200ba12888601826200b3ff565b91890151858303868b01529190506200ba2c81836200b953565b9689019694505050908601906001016200b9cd565b5f805f604084860312156200ba54575f80fd5b833567ffffffffffffffff8111156200ba6b575f80fd5b6200ba79868287016200b1f9565b909790965060209590950135949350505050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b60ff85168152606060208201525f6200bad46060830185876200ba8d565b905082604083015295945050505050565b5f602082840312156200baf6575f80fd5b813567ffffffffffffffff8111156200bb0d575f80fd5b620095ac848285016200b80e565b5f805f805f60a086880312156200bb30575f80fd5b85356200bb3d816200b196565b9450602086013593506040860135925060608601356200bb5d816200b1a8565b9150608086013567ffffffffffffffff8111156200bb79575f80fd5b6200bb87888289016200b2f1565b9150509295509295909350565b602081525f620012bc60208301846200b54e565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b63b578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b031684528701518784018790526200bc25878501826200b953565b95880195935050908601906001016200bbcf565b5f805f805f608086880312156200bc4e575f80fd5b853567ffffffffffffffff808211156200bc66575f80fd5b6200bc7489838a016200b1f9565b909750955060208801359150808211156200bc8d575f80fd5b506200bc9c888289016200b2f1565b9350506040860135915060608601356200bcb6816200b1a8565b809150509295509295909350565b5f602082840312156200bcd5575f80fd5b8135620012bc816200b1a8565b5f80604083850312156200bcf4575f80fd5b82356200b76f816200b196565b5f805f606084860312156200bd14575f80fd5b83356200bd21816200b440565b92506200bd31602085016200b44f565b9150604084013567ffffffffffffffff8111156200bd4d575f80fd5b6200b7de868287016200b80e565b6fffffffffffffffffffffffffffffffff8116811462009ec7575f80fd5b5f602082840312156200bd8a575f80fd5b8135620012bc816200bd5b565b5f805f80604085870312156200bdab575f80fd5b843567ffffffffffffffff808211156200bdc3575f80fd5b6200bdd1888389016200b1f9565b909650945060208701359150808211156200bdea575f80fd5b506200bdf9878288016200b1f9565b95989497509550505050565b855163ffffffff1681526020808701519082015260408087015167ffffffffffffffff16908201526001600160a01b038516606082015283608082015260e060a08201525f6200be5960e08301856200b3ff565b82810360c08401526200ab6381856200b3ff565b600181811c908216806200be8257607f821691505b6020821081036200beba577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff8181168382160190811115620015fc57620015fc6200bec0565b60ff8281168282160390811115620015fc57620015fc6200bec0565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6001600160a01b03808a16835280891660208401525086604083015261ffff8616606083015260c060808301526200bf9060c0830185876200ba8d565b82810360a08401526200bfa481856200b3ff565b9a9950505050505050505050565b8082028115828204841417620015fc57620015fc6200bec0565b5f602082840312156200bfdd575f80fd5b5051919050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526200c02860e08501826200b3ff565b905060a083015184820360a08601526200c04382826200b3ff565b91505060c083015184820360c08601526200963482826200b3ff565b602081525f620012bc60208301846200bfe4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826200c0b1576200c0b16200c073565b500490565b604081525f6200c0ca60408301856200bfe4565b905082151560208301529392505050565b5f604082840312156200c0ec575f80fd5b6040516040810181811067ffffffffffffffff821117156200c112576200c1126200b23a565b604052825181526020928301519281019290925250919050565b5f604082840312156200c13d575f80fd5b620012bc83836200c0db565b608081525f6200c15d60808301866200bfe4565b905083516020830152602084015160408301526001600160a01b0383166060830152949350505050565b805167ffffffffffffffff8116811462009dd1575f80fd5b5f8082840360c08112156200c1b2575f80fd5b60808112156200c1c0575f80fd5b506040516060810181811067ffffffffffffffff821117156200c1e7576200c1e76200b23a565b604052835181526200c1fc602085016200c187565b60208201526200c21085604086016200c0db565b60408201529150620086bd84608085016200c0db565b80820180821115620015fc57620015fc6200bec0565b8281525f82516200c2558160208501602087016200b3db565b919091016020019392505050565b5f6001600160a01b03808716835285602084015260a060408401526200c28d60a08401866200b3ff565b93166060830152508082036080909101525f81526020019392505050565b81810381811115620015fc57620015fc6200bec0565b805162009dd1816200b1a8565b5f80604083850312156200c2e0575f80fd5b82516200c2ed816200b1a8565b602084015190925080151581146200b1ee575f80fd5b805162009dd1816200b440565b5f805f606084860312156200c323575f80fd5b6200c32e846200c187565b925060208401516200c340816200b440565b60408501519092506200b543816200b440565b5f6200c3636200b312846200b2c7565b90508281528383830111156200c377575f80fd5b620012bc8360208301846200b3db565b5f82601f8301126200c397575f80fd5b620012bc838351602085016200c353565b5f602082840312156200c3b9575f80fd5b815167ffffffffffffffff8111156200c3d0575f80fd5b620095ac848285016200c387565b5f82601f8301126200c3ee575f80fd5b815160206200c4016200b312836200b7e8565b8083825260208201915060208460051b8701019350868411156200c423575f80fd5b602086015b848110156200b87c5780516200c43e816200b1a8565b83529183019183016200c428565b5f602082840312156200c45d575f80fd5b815167ffffffffffffffff808211156200c475575f80fd5b9083019060c082860312156200c489575f80fd5b6200c4936200b267565b6200c49e836200c187565b81526200c4ae602084016200c303565b60208201526200c4c1604084016200c303565b60408201526200c4d4606084016200c303565b60608201526080830151828111156200c4eb575f80fd5b6200c4f9878286016200c3de565b60808301525060a0830151828111156200c511575f80fd5b6200c51f878286016200c3de565b60a08301525095945050505050565b818382375f9101908152919050565b606081525f6200c55160608301866200b3ff565b905083602083015260ff83166040830152949350505050565b63ffffffff851681526001600160a01b0384166020820152608060408201525f6200c59960808301856200b3ff565b905082606083015295945050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b63b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160a063ffffffff82511685526001600160a01b038983015116898601528782015181898701526200c637828701826200b3ff565b9150506060808301518187015250608080830151925085820381870152506200c66181836200b3ff565b9689019694505050908601906001016200c5d1565b604081525f6200c68a60408301856200b3ff565b90508260208301529392505050565b5f602082840312156200c6aa575f80fd5b815167ffffffffffffffff808211156200c6c2575f80fd5b9083019060c082860312156200c6d6575f80fd5b6200c6e06200b267565b6200c49e836200c2c1565b606081525f6200c6ff60608301866200b3ff565b60208301949094525060400152919050565b602081525f620095ac6020830184866200ba8d565b5f602082840312156200c737575f80fd5b8151620012bc816200b1a8565b5f602082840312156200c755575f80fd5b8151620012bc816200b196565b5f816200c773576200c7736200bec0565b505f190190565b604081525f6200c78e60408301856200b3ff565b82810360208401526200963481856200b3ff565b606081525f6200c7b660608301866200b3ff565b82810360208401526200c7ca81866200b3ff565b905082810360408401526200800381856200b3ff565b608081525f6200c7f460808301876200b3ff565b82810360208401526200c80881876200b3ff565b9150508360408301526001600160a01b038316606083015295945050505050565b63ffffffff881681525f6001600160a01b03808916602084015260c060408401526200c85960c08401896200b3ff565b876060850152818716608085015283810360a08501526200c87c8186886200ba8d565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f6001600160a01b038089168352808816602084015260c060408401526200c8e460c08401886200b48d565b8187166060850152818616608085015283810360a08501526200bfa481866200b48d565b63ffffffff881681525f602060ff8916602084015260e060408401526200c93360e08401896200b48d565b6001600160a01b038881166060860152848203608086015287548083525f8981526020808220940191905b818110156200c97e5784548416835260019485019492860192016200c95e565b505067ffffffffffffffff881660a087015285810360c08701526200c9a481886200b48d565b9d9c50505050505050505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b63b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff168552880151888501889052805167ffffffffffffffff16888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200ca7e6101008801836200b48d565b920151868303840160e08801529190506200ca9a81836200b48d565b978a01979550505091870191506001016200c9dc565b602080825282518282018190525f919060409081850190868401855b828110156200cb13578151805163ffffffff9081168652908701518051909116878601528601516001600160a01b031685850152606090930192908501906001016200cacc565b5091979650505050505050565b5f602082840312156200cb31575f80fd5b8151620012bc816200bd5b565b6fffffffffffffffffffffffffffffffff8181168382160280821691908281146200cb6d576200cb6d6200bec0565b505092915050565b602080825282518282018190525f919060409081850190868401855b828110156200cb13578151805163ffffffff90811686529087015180516fffffffffffffffffffffffffffffffff16888701528088015167ffffffffffffffff1687870152860151166060850152608090930192908501906001016200cb91565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b63b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff16855288015188850188905280516001600160a01b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200ccba6101008801836200b48d565b920151868303840160e08801529190506200ccd681836200b48d565b978a01979550505091870191506001016200cc19565b602080825282518282018190525f919060409081850190868401855b828110156200cb13578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c090930192908501906001016200cd08565b602080825282518282018190525f919060409081850190868401855b828110156200cb13578151805163ffffffff1685528681015167ffffffffffffffff16878601528581015161ffff16868601526060908101516fffffffffffffffffffffffffffffffff1690850152608090930192908501906001016200cda3565b602080825282518282018190525f919060409081850190868401855b828110156200cb13578151805163ffffffff1685528601518685015292840192908501906001016200ce21565b865163ffffffff1681526020808801519082015260408088015167ffffffffffffffff16908201526001600160a01b038616606082015284608082015260e060a08201525f6200cea360e0830185876200ba8d565b82810360c08401526200ceb781856200b3ff565b9998505050505050505050565b601f8211156200300f57805f5260205f20601f840160051c810160208510156200ceeb5750805b601f840160051c820191505b818110156200cf0c575f81556001016200cef7565b5050505050565b67ffffffffffffffff8311156200cf2e576200cf2e6200b23a565b6200cf46836200cf3f83546200be6d565b836200cec4565b5f601f8411600181146200cf7a575f85156200cf625750838201355b5f19600387901b1c1916600186901b1783556200cf0c565b5f83815260208120601f198716915b828110156200cfab57868501358255602094850194600190920191016200cf89565b50868210156200cfc8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f80858511156200cfe9575f80fd5b838611156200cff6575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156200cb6d5760049490940360031b84901b1690921692915050565b5f805f606084860312156200d05d575f80fd5b83516200d06a816200bd5b565b60208501519093506200d07d816200b196565b60408501519092506200b543816200bd5b565b80356020831015620015fc575f19602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156200cb6d5760089490940360031b84901b1690921692915050565b608081525f6200d13260808301600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d16f81600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b0380851660408401528084166060840152509392505050565b608081525f6200d1cf60808301600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d16f81600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b608081525f6200d24960808301600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d16f81600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b606081525f6200d2c360608301600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d30081600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b038316604083015292915050565b608081525f6200d35560808301600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d16f81600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b608081525f6200d3cf60808301600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d16f81600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b63b578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff168885015286015160608785018190526200d494818601836200b3ff565b9689019694505050908601906001016200d433565b5f82516200d4bc8184602087016200b3db565b9190910192915050565b5f83516200d4d98184602088016200b3db565b8351908301906200d4ef8183602088016200b3db565b01949350505050565b5f805f606084860312156200d50b575f80fd5b83516200d518816200b740565b60208501519093506200d07d816200bd5b565b5f82600f0b82600f0b0280600f0b91508082146200349a576200349a6200bec0565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f82516200d5bc81602c8501602087016200b3db565b91909101602c0195945050505050565b838152826020820152606060408201525f6200963460608301846200b3ff565b5f805f606084860312156200d5ff575f80fd5b83516200d60c816200b440565b602085015160409095015190969495509392505050565b5f80604083850312156200d635575f80fd5b82516200d642816200bd5b565b6020939093015192949293505050565b5f80604083850312156200d664575f80fd5b82516200d671816200bd5b565b60208401519092506200b1ee816200bd5b565b5f80604083850312156200d696575f80fd5b825167ffffffffffffffff808211156200d6ae575f80fd5b6200d6bc868387016200c387565b935060208501519150808211156200d6d2575f80fd5b506200d6e1858286016200c387565b9150509250929050565b5f805f606084860312156200d6fe575f80fd5b83516200d70b816200b440565b602085015190935067ffffffffffffffff8111156200d728575f80fd5b6200d736868287016200c387565b925050604084015190509250925092565b6fffffffffffffffffffffffffffffffff8181168382160190808211156200349a576200349a6200bec0565b63ffffffff8181168382160190808211156200349a576200349a6200bec0565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156200cb6d5760029490940360031b84901b1690921692915050565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156200cb6d5760109490940360031b84901b1690921692915050565b5f826200d832576200d8326200c073565b500690565b61ffff8181168382160190808211156200349a576200349a6200bec0565b5f86516200d868818460208b016200b3db565b80830190507fff00000000000000000000000000000000000000000000000000000000000000808860f81b1682527fffff0000000000000000000000000000000000000000000000000000000000008760f01b166001830152808660f81b1660038301525083516200d8e28160048401602088016200b3db565b01600401979650505050505050565b5f83516200d9048184602088016200b3db565b9190910191825250602001919050565b600181815b808511156200d95457815f19048211156200d938576200d9386200bec0565b808516156200d94657918102915b93841c93908002906200d919565b509250929050565b5f826200d96c57506001620015fc565b816200d97a57505f620015fc565b81600181146200d99357600281146200d99e576200d9be565b6001915050620015fc565b60ff8411156200d9b2576200d9b26200bec0565b50506001821b620015fc565b5060208310610133831016604e8410600b84101617156200d9e3575081810a620015fc565b6200d9ef83836200d914565b805f19048211156200da05576200da056200bec0565b029392505050565b5f620012bc83836200d95c565b5f602082840312156200da2b575f80fd5b815167ffffffffffffffff8111156200da42575f80fd5b8201601f810184136200da53575f80fd5b620095ac848251602084016200c353565b7f73746453746f726167652066696e642853746453746f72616765293a2050616381527f6b656420736c6f742e2057652063616e2774206669742076616c75652067726560208201527f61746572207468616e200000000000000000000000000000000000000000000060408201525f82516200dae981604a8501602087016200b3db565b91909101604a0192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681525f82516200db318160048501602087016200b3db565b919091016004019392505050565b5f82601f8301126200db4f575f80fd5b815160206200db626200b312836200b7e8565b8083825260208201915060208460051b8701019350868411156200db84575f80fd5b602086015b848110156200b87c57805183529183019183016200db89565b5f80604083850312156200dbb4575f80fd5b825167ffffffffffffffff808211156200dbcc575f80fd5b6200dbda868387016200db3f565b935060208501519150808211156200dbf0575f80fd5b506200d6e1858286016200db3f56fe60c06040526001600d5534801562000015575f80fd5b5060405162005fc238038062005fc28339810160408190526200003891620002c2565b81816001600160a01b0381166200006957604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007481620000c8565b5063ffffffff166080526040516200008c90620002b4565b604051809103905ff080158015620000a6573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c09062000117565b505062000338565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200012162000284565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200016b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000191919062000310565b620001af5760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001e95760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002b25760405163118cdaa760e01b815233600482015260240162000060565b565b6102818062005d4183390190565b5f8060408385031215620002d4575f80fd5b825163ffffffff81168114620002e8575f80fd5b60208401519092506001600160a01b038116811462000305575f80fd5b809150509250929050565b5f6020828403121562000321575f80fd5b8151801515811462000331575f80fd5b9392505050565b60805160a0516159c46200037d5f395f61078601525f818161054301528181612d7701528181613782015281816137e801528181613f570152613fbd01526159c45ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b73578063ef667aa114610b92578063f2fde38b14610bdb578063f64be4c714610bfa575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b54575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614886565b610c2e565b005b348015610374575f80fd5b5061037d610d41565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c036600461492e565b610d71565b6103d86103d3366004614976565b6110f2565b60405161039d91906149c5565b3480156103f0575f80fd5b506103676103ff366004614a07565b611258565b34801561040f575f80fd5b5061042361041e366004614a72565b611315565b60405161039d9190614b2e565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614b57565b61142b565b34801561049b575f80fd5b506104636104aa366004614bb9565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614bf8565b6115ff565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614b57565b611694565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614c20565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614c39565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614c72565b611841565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614c8b565b61188f565b34801561067e575f80fd5b5061036761068d36600461492e565b611904565b34801561069d575f80fd5b506103676106ac366004614d7f565b611df9565b3480156106bc575f80fd5b506103676106cb366004614e59565b611e63565b3480156106db575f80fd5b5061070e6106ea366004614c72565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614c72565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f31565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004614ee3565b611f44565b3480156107ea575f80fd5b506106446107f9366004614f30565b612047565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120b2565b60405161039d9190614f59565b610367610849366004614fa5565b612112565b348015610859575f80fd5b50610367610868366004615049565b6122ce565b348015610878575f80fd5b5061060c610887366004614c39565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd366004615049565b6125c0565b3480156108dd575f80fd5b5061060c6108ec366004614c39565b612694565b3480156108fc575f80fd5b5061036761090b366004615089565b61272b565b34801561091b575f80fd5b5061036761092a3660046150b2565b612b2a565b34801561093a575f80fd5b506103676109493660046150cd565b612b42565b348015610959575f80fd5b50610463610968366004614c39565b612cd8565b348015610978575f80fd5b50610367610987366004615107565b612de6565b348015610997575f80fd5b506105ae6109a6366004614bf8565b61309d565b3480156109b6575f80fd5b506103676109c5366004614c20565b613123565b3480156109d5575f80fd5b506106446109e4366004614f30565b613198565b3480156109f4575f80fd5b50610463610a03366004615121565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614c20565b6131fc565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a366004615089565b613273565b348015610a8a575f80fd5b50610367610a99366004615121565b61356e565b348015610aa9575f80fd5b50610644610ab8366004614c20565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614bf8565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614976565b613690565b60405161039d9190615160565b348015610b4d575f80fd5b505f6105ae565b348015610b5f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b7e575f80fd5b50610367610b8d366004614c20565b6139b1565b348015610b9d575f80fd5b5061070e610bac366004614bf8565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610be6575f80fd5b50610367610bf5366004614c20565b613bab565b348015610c05575f80fd5b506105ae610c14366004614c72565b60096020525f90815260409020546001600160a01b031681565b610c7d86610c3f60208a018a614c72565b60208a0135610c5460608c0160408d01615177565b898989604051602001610c6993929190615190565b604051602081830303815290604052613c01565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cd1908b908a908a908a9033908b908b9060040161522a565b5f604051808303818588803b158015610ce8575f80fd5b505af1158015610cfa573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d30929190615280565b60405180910390a150505050505050565b5f80610d50600d546001141590565b610d5b575f80610d69565b610d69600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610dc4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e7d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3591906152d1565b6002811115610e4657610e466152a4565b03610e7d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f49576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610eef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1391906152fc565b610f49576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f5288613e3f565b5f610f5d89896115ff565b9150508015610f98576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03610ff6576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001015561108c565b43861161102f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b6110fa6147d8565b6111076020840184614c72565b336001600d5414611144576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d5561118390860160808701615317565b80156111985750600e546001600160a01b0316155b156111cf576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111db3388613ea8565b915091505f6111e73490565b90505f6112026111fd60a08b0160808c01615317565b614180565b90506112138460400151838361424a565b600e54604085015160200151611235916001600160a01b03169083868c6142b1565b6040840151516112479083858b6142de565b50506001600d555095945050505050565b61126185613e3f565b5f83838360405160200161127793929190615190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112d3866112b86020880188614c72565b60208801356112cd60608a0160408b01615177565b85613c01565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611305929190615280565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661136b576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113dc573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261142191908101906153f8565b9695505050505050565b61143485613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114bf576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061150b575080155b1561154e576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611305565b6001600160a01b038083165f90815260076020908152604080832063ffffffff86168452909152812054909116908161168d5763ffffffff83165f908152600a60205260409020546001600160a01b0316915081611689576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b61169d85613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611723576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114b6565b80158061176d57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117b0576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611305565b63ffffffff81165f908152600960205260408120546001600160a01b031615801590611889575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516118ee9a9998979695949392919061542a565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561193657506001600160a01b03811615155b1561196d576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a26575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119de91906152d1565b60028111156119ef576119ef6152a4565b03611a26576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611af2576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611a98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611abc91906152fc565b611af2576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611afb88613e3f565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b62576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d4f576001600160a01b0381161580611c1c57506001600160a01b038716155b15611c53576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c7a91906154bf565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d41918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611dee565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110df565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e4e9a999897969594939291906154d2565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611eb6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ebf85613e3f565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f0890889087908790600401615530565b5f604051808303815f87803b158015611f1f575f80fd5b505af1158015611dee573d5f803e3d5ffd5b611f39614308565b611f425f61434d565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fb2576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fc292919061567b565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161203891908890889088908890889061568a565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120ab9185918591859061207690850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166143b4565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561210857602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116120ea575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161215c908790879061567b565b604051809103902090508082146121a9576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114b6565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612230908e908d908c908c9033908d908d906004016156d2565b5f604051808303818588803b158015612247575f80fd5b505af1158015612259573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122ba94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561230057506001600160a01b03811615155b15612337576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b038116156123f1576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612385573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a991906152d1565b60028111156123ba576123ba6152a4565b036123f1576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124bd576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248791906152fc565b6124bd576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c687613e3f565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361252c576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d30565b5f805f6125cd86866115ff565b91509150816001600160a01b0316846001600160a01b0316036125f5576001925050506120ab565b5f81612628576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061263d565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126775750438160200151115b1561268857600193505050506120ab565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612723576001016126d0565b949350505050565b612733614308565b6001600160a01b0382165f90815260056020526040902054829060ff16612786576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561283f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f791906152d1565b6002811115612808576128086152a4565b0361283f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561290b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d591906152fc565b61290b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612966576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612a965763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a3b87436154bf565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b20565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b32614308565b612b3d83838361444c565b505050565b612b5982612b536020860186614c72565b336125c0565b612b8f576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bb790870187614c72565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612bf48484836143b4565b612c2a576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c3584848361446f565b612c6b576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c9783612c7c6020870187614c72565b6020870135612c916060890160408a01615177565b86614528565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612cca93929190615725565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d209067ffffffffffffffff16600161574d565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612dee614308565b6001600160a01b0381165f90815260056020526040902054819060ff16612e41576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612efb576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb391906152d1565b6002811115612ec457612ec46152a4565b03612efb576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fc7576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906152fc565b612fc7576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613020576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611305565b6001600160a01b038083165f90815260066020908152604080832063ffffffff861684529091529020541680611889575063ffffffff81165f908152600960205260409020546001600160a01b031680611889576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61312b614308565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b0381165f90815260016020908152604082206120ab918591859185906131c790850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff1661446f565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981910161318d565b6001600160a01b0382165f90815260056020526040902054829060ff166132c6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561337f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613313573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333791906152d1565b6002811115613348576133486152a4565b0361337f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561344b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156133f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061341591906152fc565b61344b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613453614308565b845f0361349d5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613522565b4385116134d6576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d30565b61357784613e3f565b613582848484612694565b61358d90600161574d565b67ffffffffffffffff168167ffffffffffffffff16146135e5576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612cca565b604080518082019091525f80825260208201526136b360a0840160808501615317565b80156136c85750600e546001600160a01b0316155b156136ff576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061372790870187614c72565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137629067ffffffffffffffff16600161574d565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137cd9190614c72565b63ffffffff168152602001866020013581526020016138c7847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061381a9190614c72565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b81526020016138d9604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139259050856109a66020890189614c72565b90506001600160a01b03811663d80e9bd98361394460608a018a61576e565b61395460a08c0160808d01615317565b6040518563ffffffff1660e01b815260040161397394939291906157cf565b6040805180830381865afa15801561398d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142191906158c3565b6139b9614308565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5891906152fc565b613a8e576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613ae0576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161318d565b613bb3614308565b6001600160a01b038116613bf5576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114b6565b613bfe8161434d565b50565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d5957600181015b8467ffffffffffffffff168167ffffffffffffffff1611613cf5576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613ced576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b600101613c4d565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613dec576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114b6565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613e7157506001600160a01b038181165f908152600f6020526040902054163314155b15613bfe576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613eb06147d8565b5f80613f3785613ec36020870187614c72565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fa29190614c72565b63ffffffff16815260200186602001358152602001613fef847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061381a9190614c72565b8152602001614001604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061404d9050876109a66020890189614c72565b90505f806001600160a01b038316634389e58f8561406e60608c018c61576e565b61407e60a08e0160808f01615317565b6040518563ffffffff1660e01b815260040161409d94939291906157cf565b5f604051808303815f875af11580156140b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526140fd91908101906158dd565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161413160608b018b61576e565b866040516141429493929190615929565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b5f811561424557600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156141e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061420a9190615969565b9050805f03614245576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b825182108061425c5750808360200151115b15612b3d57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114b6565b83156142c2576142c28583866145a7565b828410156142d7576142d785828686036145a7565b5050505050565b83156142ee576142ee82856145fb565b8284101561430257614302818585036145fb565b50505050565b5f546001600160a01b03163314611f42576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114b6565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061272357506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d9061440d908790600401615980565b602060405180830381865afa158015614428573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272391906152fc565b6001600160a01b03831661446457612b3d82826145fb565b612b3d8383836145a7565b5f67ffffffffffffffff821661448b6060860160408701615177565b67ffffffffffffffff16118061272357506001600160a01b0383165f90815260026020908152604082209082906144c490880188614c72565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f8660400160208101906145049190615177565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b8061455f576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6001600160a01b0382166145e7576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b3d6001600160a01b03841683836146d6565b6001600160a01b03821661463b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614684576040519150601f19603f3d011682016040523d82523d5f602084013e614689565b606091505b5050905080612b3d576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114b6565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b3d93879390925f9283929183919082885af180614772576040513d5f823e3d81fd5b50505f513d91508115614789578060011415614796565b6001600160a01b0384163b155b15614302576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114b6565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161481760405180604001604052805f81526020015f81525090565b905290565b5f6060828403121561482c575f80fd5b50919050565b80356001600160a01b0381168114614245575f80fd5b5f8083601f840112614858575f80fd5b50813567ffffffffffffffff81111561486f575f80fd5b60208301915083602082850101111561168d575f80fd5b5f805f805f805f60e0888a03121561489c575f80fd5b6148a6898961481c565b96506148b460608901614832565b95506080880135945060a088013567ffffffffffffffff808211156148d7575f80fd5b6148e38b838c01614848565b909650945060c08a01359150808211156148fb575f80fd5b506149088a828b01614848565b989b979a50959850939692959293505050565b803563ffffffff81168114614245575f80fd5b5f805f8060808587031215614941575f80fd5b61494a85614832565b93506149586020860161491b565b925061496660408601614832565b9396929550929360600135925050565b5f8060408385031215614987575f80fd5b823567ffffffffffffffff81111561499d575f80fd5b830160a081860312156149ae575f80fd5b91506149bc60208401614832565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614a00604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614a1b575f80fd5b614a2486614832565b9450614a33876020880161481c565b93506080860135925060a086013567ffffffffffffffff811115614a55575f80fd5b614a6188828901614848565b969995985093965092949392505050565b5f805f8060808587031215614a85575f80fd5b614a8e85614832565b9350614a9c60208601614832565b9250614aaa6040860161491b565b9150614ab86060860161491b565b905092959194509250565b5f5b83811015614add578181015183820152602001614ac5565b50505f910152565b5f8151808452614afc816020860160208601614ac3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120ab6020830184614ae5565b803567ffffffffffffffff81168114614245575f80fd5b5f805f805f60a08688031215614b6b575f80fd5b614b7486614832565b9450614b826020870161491b565b935060408601359250614b9760608701614b40565b949793965091946080013592915050565b803561ffff81168114614245575f80fd5b5f805f8060808587031215614bcc575f80fd5b614bd585614832565b9350614be360208601614832565b925060408501359150614ab860608601614ba8565b5f8060408385031215614c09575f80fd5b614c1283614832565b91506149bc6020840161491b565b5f60208284031215614c30575f80fd5b6120ab82614832565b5f805f60608486031215614c4b575f80fd5b614c5484614832565b9250614c626020850161491b565b9150604084013590509250925092565b5f60208284031215614c82575f80fd5b6120ab8261491b565b5f805f805f805f805f805f806101208d8f031215614ca7575f80fd5b614cb08d614832565b9b50614cbe60208e01614832565b9a5060408d01359950614cd360608e01614ba8565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614cfb575f80fd5b614d0b8e60c08f01358f01614848565b909650945067ffffffffffffffff60e08e01351115614d28575f80fd5b614d388e60e08f01358f01614848565b909450925067ffffffffffffffff6101008e01351115614d56575f80fd5b614d678e6101008f01358f01614848565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614d9a575f80fd5b614da48d8d61481c565b9a50614db260608d01614832565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614de2575f80fd5b614df28e60e08f01358f01614848565b90975095506101008d0135811015614e08575f80fd5b614e198e6101008f01358f01614848565b90955093506101208d0135811015614e2f575f80fd5b50614e418d6101208e01358e01614848565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614e6c575f80fd5b614e7585614832565b9350614e8360208601614832565b9250604085013567ffffffffffffffff80821115614e9f575f80fd5b818701915087601f830112614eb2575f80fd5b813581811115614ec0575f80fd5b8860208260051b8501011115614ed4575f80fd5b95989497505060200194505050565b5f805f805f60808688031215614ef7575f80fd5b614f0086614832565b945060208601359350614f1560408701614ba8565b9250606086013567ffffffffffffffff811115614a55575f80fd5b5f8060808385031215614f41575f80fd5b614f4b848461481c565b91506149bc60608401614832565b602080825282518282018190525f9190848201906040850190845b81811015614f995783516001600160a01b031683529284019291840191600101614f74565b50909695505050505050565b5f805f805f805f8060c0898b031215614fbc575f80fd5b614fc589614832565b9750614fd360208a01614832565b965060408901359550614fe860608a01614ba8565b9450608089013567ffffffffffffffff80821115615004575f80fd5b6150108c838d01614848565b909650945060a08b0135915080821115615028575f80fd5b506150358b828c01614848565b999c989b5096995094979396929594505050565b5f805f6060848603121561505b575f80fd5b61506484614832565b92506150726020850161491b565b915061508060408501614832565b90509250925092565b5f805f6060848603121561509b575f80fd5b6150a48461491b565b9250614c6260208501614832565b5f805f606084860312156150c4575f80fd5b6150a484614832565b5f805f60a084860312156150df575f80fd5b6150e9858561481c565b92506150f760608501614832565b9150608084013590509250925092565b5f8060408385031215615118575f80fd5b6149ae8361491b565b5f805f8060808587031215615134575f80fd5b61513d85614832565b935061514b6020860161491b565b925060408501359150614ab860608601614b40565b815181526020808301519082015260408101611889565b5f60208284031215615187575f80fd5b6120ab82614b40565b838152818360208301375f910160200190815292915050565b63ffffffff6151b78261491b565b1682526020810135602083015267ffffffffffffffff6151d960408301614b40565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b61523481896151a9565b86606082015260e060808201525f61525060e0830187896151e3565b6001600160a01b03861660a084015282810360c08401526152728185876151e3565b9a9950505050505050505050565b6080810161528e82856151a9565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f602082840312156152e1575f80fd5b8151600381106120ab575f80fd5b8015158114613bfe575f80fd5b5f6020828403121561530c575f80fd5b81516120ab816152ef565b5f60208284031215615327575f80fd5b81356120ab816152ef565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011261536e575f80fd5b815167ffffffffffffffff8082111561538957615389615332565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156153cf576153cf615332565b816040528381528660208588010111156153e7575f80fd5b611421846020830160208901614ac3565b5f60208284031215615408575f80fd5b815167ffffffffffffffff81111561541e575f80fd5b6127238482850161535f565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f61545960e08301888a6151e3565b82810360a084015261546c8187896151e3565b905082810360c08401526154818185876151e3565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561188957611889615492565b5f6101206154e0838e6151a9565b8b60608401528a60808401528960a08401528060c0840152615505818401898b6151e3565b905082810360e084015261551a8187896151e3565b90508281036101008401526154818185876151e3565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b8981101561566b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c36030181126155c4575f80fd5b8b0163ffffffff806155d58361491b565b168552806155e488840161491b565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811261561d575f80fd5b01858101903567ffffffffffffffff811115615637575f80fd5b803603821315615645575f80fd5b878986015261565788860182846151e3565b958701959450505090840190600101615564565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a060808301526156c660a0830184866151e3565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a060408401526156fb60a08401888a6151e3565b818716606085015283810360808501526157168186886151e3565b9b9a5050505050505050505050565b60a0810161573382866151a9565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614a0057614a00615492565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126157a1575f80fd5b83018035915067ffffffffffffffff8211156157bb575f80fd5b60200191503681900382131561168d575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f606086015161581f60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152615850610140840182614ae5565b905082810360208401526158658186886151e3565b915050612ddd604083018415159052565b5f60408284031215615886575f80fd5b6040516040810181811067ffffffffffffffff821117156158a9576158a9615332565b604052825181526020928301519281019290925250919050565b5f604082840312156158d3575f80fd5b6120ab8383615876565b5f80606083850312156158ee575f80fd5b6158f88484615876565b9150604083015167ffffffffffffffff811115615913575f80fd5b61591f8582860161535f565b9150509250929050565b606081525f61593b6060830187614ae5565b828103602084015261594e8186886151e3565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615979575f80fd5b5051919050565b6060810161188982846151a956fea2646970667358221220938f9466c98d432f294c8fa92afa649818bd8c0b591d10b7b71b464300e2a18764736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c6343000816003360e06040526001600d5534801562000015575f80fd5b5060405162006193380380620061938339810160408190526200003891620002ef565b828281816001600160a01b0381166200006b57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007681620000d9565b5063ffffffff166080526040516200008e90620002c5565b604051809103905ff080158015620000a8573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c29062000128565b50506001600160a01b031660c05250620003679050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200013262000295565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200017c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a291906200033f565b620001c05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001fa5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002c35760405163118cdaa760e01b815233600482015260240162000062565b565b6102818062005f1283390190565b80516001600160a01b0381168114620002ea575f80fd5b919050565b5f805f6060848603121562000302575f80fd5b835163ffffffff8116811462000316575f80fd5b92506200032660208501620002d3565b91506200033660408501620002d3565b90509250925092565b5f6020828403121562000350575f80fd5b8151801515811462000360575f80fd5b9392505050565b60805160a05160c051615b48620003ca5f395f8181610b500152818161314e015281816141df01526143f001525f61078601525f818161054301528181612d98015281816137b40152818161381a01528181613f860152613fec0152615b485ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b93578063ef667aa114610bb2578063f2fde38b14610bfb578063f64be4c714610c1a575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b74575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614a0a565b610c4e565b005b348015610374575f80fd5b5061037d610d61565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c0366004614ab2565b610d91565b6103d86103d3366004614afa565b611112565b60405161039d9190614b49565b3480156103f0575f80fd5b506103676103ff366004614b8b565b611279565b34801561040f575f80fd5b5061042361041e366004614bf6565b611336565b60405161039d9190614cb2565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614cdb565b61144c565b34801561049b575f80fd5b506104636104aa366004614d3d565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614d7c565b611620565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614cdb565b6116b5565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614da4565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614dbd565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614df6565b611862565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614e0f565b6118b0565b34801561067e575f80fd5b5061036761068d366004614ab2565b611925565b34801561069d575f80fd5b506103676106ac366004614f03565b611e1a565b3480156106bc575f80fd5b506103676106cb366004614fdd565b611e84565b3480156106db575f80fd5b5061070e6106ea366004614df6565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614df6565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f52565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004615067565b611f65565b3480156107ea575f80fd5b506106446107f93660046150b4565b612068565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120d3565b60405161039d91906150dd565b610367610849366004615129565b612133565b348015610859575f80fd5b506103676108683660046151cd565b6122ef565b348015610878575f80fd5b5061060c610887366004614dbd565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd3660046151cd565b6125e1565b3480156108dd575f80fd5b5061060c6108ec366004614dbd565b6126b5565b3480156108fc575f80fd5b5061036761090b36600461520d565b61274c565b34801561091b575f80fd5b5061036761092a366004615236565b612b4b565b34801561093a575f80fd5b50610367610949366004615251565b612b63565b348015610959575f80fd5b50610463610968366004614dbd565b612cf9565b348015610978575f80fd5b5061036761098736600461528b565b612e07565b348015610997575f80fd5b506105ae6109a6366004614d7c565b6130be565b3480156109b6575f80fd5b506103676109c5366004614da4565b613144565b3480156109d5575f80fd5b506106446109e43660046150b4565b6131c3565b3480156109f4575f80fd5b50610463610a033660046152a5565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614da4565b613227565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a36600461520d565b6132a5565b348015610a8a575f80fd5b50610367610a993660046152a5565b6135a0565b348015610aa9575f80fd5b50610644610ab8366004614da4565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614d7c565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614afa565b6136c2565b60405161039d91906152e4565b348015610b4d575f80fd5b507f00000000000000000000000000000000000000000000000000000000000000006105ae565b348015610b7f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b9e575f80fd5b50610367610bad366004614da4565b6139e3565b348015610bbd575f80fd5b5061070e610bcc366004614d7c565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c06575f80fd5b50610367610c15366004614da4565b613bdd565b348015610c25575f80fd5b506105ae610c34366004614df6565b60096020525f90815260409020546001600160a01b031681565b610c9d86610c5f60208a018a614df6565b60208a0135610c7460608c0160408d016152fb565b898989604051602001610c8993929190615314565b604051602081830303815290604052613c30565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cf1908b908a908a908a9033908b908b906004016153ae565b5f604051808303818588803b158015610d08575f80fd5b505af1158015610d1a573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d50929190615404565b60405180910390a150505050505050565b5f80610d70600d546001141590565b610d7b575f80610d89565b610d89600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610de4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e9d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e559190615455565b6002811115610e6657610e66615428565b03610e9d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f69576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610f0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f339190615480565b610f69576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f7288613e6e565b5f610f7d8989611620565b9150508015610fb8576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03611016576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600101556110ac565b43861161104f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b61111a61495c565b6111276020840184614df6565b336001600d5414611164576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d556111a39086016080870161549b565b80156111b85750600e546001600160a01b0316155b156111ef576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111fb3388613ed7565b915091505f6112086141af565b90505f61122361121e60a08b0160808c0161549b565b614255565b90506112348460400151838361431f565b600e54604085015160200151611256916001600160a01b03169083868c614386565b6040840151516112689083858b6143b3565b50506001600d555095945050505050565b61128285613e6e565b5f83838360405160200161129893929190615314565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112f4866112d96020880188614df6565b60208801356112ee60608a0160408b016152fb565b85613c30565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611326929190615404565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661138c576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113fd573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611442919081019061557c565b9695505050505050565b61145585613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114e0576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061152c575080155b1561156f576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611326565b6001600160a01b038083165f90815260076020908152604080832063ffffffff8616845290915281205490911690816116ae5763ffffffff83165f908152600a60205260409020546001600160a01b03169150816116aa576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b6116be85613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611744576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114d7565b80158061178e57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117d1576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611326565b63ffffffff81165f908152600960205260408120546001600160a01b0316158015906118aa575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d60405161190f9a999897969594939291906155ae565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561195757506001600160a01b03811615155b1561198e576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a47575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ff9190615455565b6002811115611a1057611a10615428565b03611a47576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611b13576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611ab9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611add9190615480565b611b13576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b1c88613e6e565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b83576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d70576001600160a01b0381161580611c3d57506001600160a01b038716155b15611c74576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c9b9190615643565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d62918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611e0f565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110ff565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e6f9a99989796959493929190615656565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611ed7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ee085613e6e565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f29908890879087906004016156b4565b5f604051808303815f87803b158015611f40575f80fd5b505af1158015611e0f573d5f803e3d5ffd5b611f5a61441e565b611f635f614463565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fd3576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fe39291906157ff565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161205991908890889088908890889061580e565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120cc9185918591859061209790850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166144ca565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561212957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161210b575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161217d90879087906157ff565b604051809103902090508082146121ca576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114d7565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612251908e908d908c908c9033908d908d90600401615856565b5f604051808303818588803b158015612268575f80fd5b505af115801561227a573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122db94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561232157506001600160a01b03811615155b15612358576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612412576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ca9190615455565b60028111156123db576123db615428565b03612412576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124de576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612484573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124a89190615480565b6124de576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124e787613e6e565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361254d576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d50565b5f805f6125ee8686611620565b91509150816001600160a01b0316846001600160a01b031603612616576001925050506120cc565b5f81612649576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061265e565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126985750438160200151115b156126a957600193505050506120cc565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612744576001016126f1565b949350505050565b61275461441e565b6001600160a01b0382165f90815260056020526040902054829060ff166127a7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615612860575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128189190615455565b600281111561282957612829615428565b03612860576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561292c576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f69190615480565b61292c576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612987576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612ab75763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a5c8743615643565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b41565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b5361441e565b612b5e838383614562565b505050565b612b7a82612b746020860186614df6565b336125e1565b612bb0576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bd890870187614df6565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612c158484836144ca565b612c4b576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c56848483614585565b612c8c576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cb883612c9d6020870187614df6565b6020870135612cb26060890160408a016152fb565b8661463e565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612ceb939291906158a9565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d419067ffffffffffffffff1660016158d1565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612e0f61441e565b6001600160a01b0381165f90815260056020526040902054819060ff16612e62576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612f1c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed49190615455565b6002811115612ee557612ee5615428565b03612f1c576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fe8576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fb29190615480565b612fe8576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613041576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611326565b6001600160a01b038083165f90815260066020908152604080832063ffffffff8616845290915290205416806118aa575063ffffffff81165f908152600960205260409020546001600160a01b0316806118aa576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61314c61441e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036131b7576040517f10647d0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131c0816146bd565b50565b6001600160a01b0381165f90815260016020908152604082206120cc918591859185906131f290850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff16614585565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d798398191015b60405180910390a150565b6001600160a01b0382165f90815260056020526040902054829060ff166132f8576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b038116156133b1575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133699190615455565b600281111561337a5761337a615428565b036133b1576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561347d576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015613423573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134479190615480565b61347d576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61348561441e565b845f036134cf5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613554565b438511613508576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d50565b6135a984613e6e565b6135b48484846126b5565b6135bf9060016158d1565b67ffffffffffffffff168167ffffffffffffffff1614613617576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612ceb565b604080518082019091525f80825260208201526136e560a084016080850161549b565b80156136fa5750600e546001600160a01b0316155b15613731576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061375990870187614df6565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137949067ffffffffffffffff1660016158d1565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137ff9190614df6565b63ffffffff168152602001866020013581526020016138f9847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061384c9190614df6565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b815260200161390b60408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139579050856109a66020890189614df6565b90506001600160a01b03811663d80e9bd98361397660608a018a6158f2565b61398660a08c0160808d0161549b565b6040518563ffffffff1660e01b81526004016139a59493929190615953565b6040805180830381865afa1580156139bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114429190615a47565b6139eb61441e565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a8a9190615480565b613ac0576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613b12576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161329a565b613be561441e565b6001600160a01b038116613c27576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114d7565b6131c081614463565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d8857600181015b8467ffffffffffffffff168167ffffffffffffffff1611613d24576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613d1c576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b600101613c7c565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613e1b576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114d7565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613ea057506001600160a01b038181165f908152600f6020526040902054163314155b156131c0576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613edf61495c565b5f80613f6685613ef26020870187614df6565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fd19190614df6565b63ffffffff1681526020018660200135815260200161401e847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061384c9190614df6565b815260200161403060408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061407c9050876109a66020890189614df6565b90505f806001600160a01b038316634389e58f8561409d60608c018c6158f2565b6140ad60a08e0160808f0161549b565b6040518563ffffffff1660e01b81526004016140cc9493929190615953565b5f604051808303815f875af11580156140e7573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261412c9190810190615a61565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161416060608b018b6158f2565b866040516141719493929190615aad565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561422c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142509190615aed565b905090565b5f811561431a57600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156142bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142df9190615aed565b9050805f0361431a576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b82518210806143315750808360200151115b15612b5e57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114d7565b83156143975761439785838661472b565b828410156143ac576143ac858286860361472b565b5050505050565b34156143eb576040517f9a317a5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144187f000000000000000000000000000000000000000000000000000000000000000085858585614386565b50505050565b5f546001600160a01b03163314611f63576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114d7565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061274457506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d90614523908790600401615b04565b602060405180830381865afa15801561453e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127449190615480565b6001600160a01b03831661457a57612b5e828261477f565b612b5e83838361472b565b5f67ffffffffffffffff82166145a160608601604087016152fb565b67ffffffffffffffff16118061274457506001600160a01b0383165f90815260026020908152604082209082906145da90880188614df6565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f86604001602081019061461a91906152fb565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b80614675576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6146c561441e565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a623969060200161329a565b6001600160a01b03821661476b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b5e6001600160a01b038416838361485a565b6001600160a01b0382166147bf576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614808576040519150601f19603f3d011682016040523d82523d5f602084013e61480d565b606091505b5050905080612b5e576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114d7565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b5e93879390925f9283929183919082885af1806148f6576040513d5f823e3d81fd5b50505f513d9150811561490d57806001141561491a565b6001600160a01b0384163b155b15614418576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114d7565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161499b60405180604001604052805f81526020015f81525090565b905290565b5f606082840312156149b0575f80fd5b50919050565b80356001600160a01b038116811461431a575f80fd5b5f8083601f8401126149dc575f80fd5b50813567ffffffffffffffff8111156149f3575f80fd5b6020830191508360208285010111156116ae575f80fd5b5f805f805f805f60e0888a031215614a20575f80fd5b614a2a89896149a0565b9650614a38606089016149b6565b95506080880135945060a088013567ffffffffffffffff80821115614a5b575f80fd5b614a678b838c016149cc565b909650945060c08a0135915080821115614a7f575f80fd5b50614a8c8a828b016149cc565b989b979a50959850939692959293505050565b803563ffffffff8116811461431a575f80fd5b5f805f8060808587031215614ac5575f80fd5b614ace856149b6565b9350614adc60208601614a9f565b9250614aea604086016149b6565b9396929550929360600135925050565b5f8060408385031215614b0b575f80fd5b823567ffffffffffffffff811115614b21575f80fd5b830160a08186031215614b32575f80fd5b9150614b40602084016149b6565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614b84604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614b9f575f80fd5b614ba8866149b6565b9450614bb787602088016149a0565b93506080860135925060a086013567ffffffffffffffff811115614bd9575f80fd5b614be5888289016149cc565b969995985093965092949392505050565b5f805f8060808587031215614c09575f80fd5b614c12856149b6565b9350614c20602086016149b6565b9250614c2e60408601614a9f565b9150614c3c60608601614a9f565b905092959194509250565b5f5b83811015614c61578181015183820152602001614c49565b50505f910152565b5f8151808452614c80816020860160208601614c47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120cc6020830184614c69565b803567ffffffffffffffff8116811461431a575f80fd5b5f805f805f60a08688031215614cef575f80fd5b614cf8866149b6565b9450614d0660208701614a9f565b935060408601359250614d1b60608701614cc4565b949793965091946080013592915050565b803561ffff8116811461431a575f80fd5b5f805f8060808587031215614d50575f80fd5b614d59856149b6565b9350614d67602086016149b6565b925060408501359150614c3c60608601614d2c565b5f8060408385031215614d8d575f80fd5b614d96836149b6565b9150614b4060208401614a9f565b5f60208284031215614db4575f80fd5b6120cc826149b6565b5f805f60608486031215614dcf575f80fd5b614dd8846149b6565b9250614de660208501614a9f565b9150604084013590509250925092565b5f60208284031215614e06575f80fd5b6120cc82614a9f565b5f805f805f805f805f805f806101208d8f031215614e2b575f80fd5b614e348d6149b6565b9b50614e4260208e016149b6565b9a5060408d01359950614e5760608e01614d2c565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614e7f575f80fd5b614e8f8e60c08f01358f016149cc565b909650945067ffffffffffffffff60e08e01351115614eac575f80fd5b614ebc8e60e08f01358f016149cc565b909450925067ffffffffffffffff6101008e01351115614eda575f80fd5b614eeb8e6101008f01358f016149cc565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614f1e575f80fd5b614f288d8d6149a0565b9a50614f3660608d016149b6565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614f66575f80fd5b614f768e60e08f01358f016149cc565b90975095506101008d0135811015614f8c575f80fd5b614f9d8e6101008f01358f016149cc565b90955093506101208d0135811015614fb3575f80fd5b50614fc58d6101208e01358e016149cc565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614ff0575f80fd5b614ff9856149b6565b9350615007602086016149b6565b9250604085013567ffffffffffffffff80821115615023575f80fd5b818701915087601f830112615036575f80fd5b813581811115615044575f80fd5b8860208260051b8501011115615058575f80fd5b95989497505060200194505050565b5f805f805f6080868803121561507b575f80fd5b615084866149b6565b94506020860135935061509960408701614d2c565b9250606086013567ffffffffffffffff811115614bd9575f80fd5b5f80608083850312156150c5575f80fd5b6150cf84846149a0565b9150614b40606084016149b6565b602080825282518282018190525f9190848201906040850190845b8181101561511d5783516001600160a01b0316835292840192918401916001016150f8565b50909695505050505050565b5f805f805f805f8060c0898b031215615140575f80fd5b615149896149b6565b975061515760208a016149b6565b96506040890135955061516c60608a01614d2c565b9450608089013567ffffffffffffffff80821115615188575f80fd5b6151948c838d016149cc565b909650945060a08b01359150808211156151ac575f80fd5b506151b98b828c016149cc565b999c989b5096995094979396929594505050565b5f805f606084860312156151df575f80fd5b6151e8846149b6565b92506151f660208501614a9f565b9150615204604085016149b6565b90509250925092565b5f805f6060848603121561521f575f80fd5b61522884614a9f565b9250614de6602085016149b6565b5f805f60608486031215615248575f80fd5b615228846149b6565b5f805f60a08486031215615263575f80fd5b61526d85856149a0565b925061527b606085016149b6565b9150608084013590509250925092565b5f806040838503121561529c575f80fd5b614b3283614a9f565b5f805f80608085870312156152b8575f80fd5b6152c1856149b6565b93506152cf60208601614a9f565b925060408501359150614c3c60608601614cc4565b8151815260208083015190820152604081016118aa565b5f6020828403121561530b575f80fd5b6120cc82614cc4565b838152818360208301375f910160200190815292915050565b63ffffffff61533b82614a9f565b1682526020810135602083015267ffffffffffffffff61535d60408301614cc4565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6153b8818961532d565b86606082015260e060808201525f6153d460e083018789615367565b6001600160a01b03861660a084015282810360c08401526153f6818587615367565b9a9950505050505050505050565b60808101615412828561532d565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60208284031215615465575f80fd5b8151600381106120cc575f80fd5b80151581146131c0575f80fd5b5f60208284031215615490575f80fd5b81516120cc81615473565b5f602082840312156154ab575f80fd5b81356120cc81615473565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126154f2575f80fd5b815167ffffffffffffffff8082111561550d5761550d6154b6565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715615553576155536154b6565b8160405283815286602085880101111561556b575f80fd5b611442846020830160208901614c47565b5f6020828403121561558c575f80fd5b815167ffffffffffffffff8111156155a2575f80fd5b612744848285016154e3565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f6155dd60e08301888a615367565b82810360a08401526155f0818789615367565b905082810360c0840152615605818587615367565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156118aa576118aa615616565b5f610120615664838e61532d565b8b60608401528a60808401528960a08401528060c0840152615689818401898b615367565b905082810360e084015261569e818789615367565b9050828103610100840152615605818587615367565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b898110156157ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c3603018112615748575f80fd5b8b0163ffffffff8061575983614a9f565b16855280615768888401614a9f565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181126157a1575f80fd5b01858101903567ffffffffffffffff8111156157bb575f80fd5b8036038213156157c9575f80fd5b87898601526157db8886018284615367565b9587019594505050908401906001016156e8565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a0608083015261584a60a083018486615367565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a0604084015261587f60a08401888a615367565b8187166060850152838103608085015261589a818688615367565b9b9a5050505050505050505050565b60a081016158b7828661532d565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614b8457614b84615616565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615925575f80fd5b83018035915067ffffffffffffffff82111561593f575f80fd5b6020019150368190038213156116ae575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f60608601516159a360c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e06101208401526159d4610140840182614c69565b905082810360208401526159e9818688615367565b915050612dfe604083018415159052565b5f60408284031215615a0a575f80fd5b6040516040810181811067ffffffffffffffff82111715615a2d57615a2d6154b6565b604052825181526020928301519281019290925250919050565b5f60408284031215615a57575f80fd5b6120cc83836159fa565b5f8060608385031215615a72575f80fd5b615a7c84846159fa565b9150604083015167ffffffffffffffff811115615a97575f80fd5b615aa3858286016154e3565b9150509250929050565b606081525f615abf6060830187614c69565b8281036020840152615ad2818688615367565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615afd575f80fd5b5051919050565b606081016118aa828461532d56fea264697066735822122068baa86dcd9bd8142959c16f23b905a6a20b9dbc18984656c1ecce183a4b190464736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c63430008160033608060405234801561000f575f80fd5b506040516200196d3803806200196d83398101604081905261003091610108565b338061005557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005e816100b9565b506001600160a01b03165f908152600260205260409020805460ff1916600190811790915580546001600160801b03191668056bc75e2d6310000017905560058054602f60801b6001600160801b0391909116179055610135565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610118575f80fd5b81516001600160a01b038116811461012e575f80fd5b9392505050565b61182a80620001435f395ff3fe608060405260043610610178575f3560e01c80638ca2fb08116100d1578063d350ad251161007c578063e0ad121a11610057578063e0ad121a14610607578063f2fde38b146106ba578063fd9be522146106d9575f80fd5b8063d350ad25146104d4578063da26663a146104f3578063dbbb4155146105e8575f80fd5b8063c1723a1d116100ac578063c1723a1d1461045f578063c184032714610472578063cd68b79b14610498575f80fd5b80638ca2fb08146103b55780638da5cb5b146103f357806392807f581461041c575f80fd5b80635d6d7ccb116101315780637bc3c9ab1161010c5780637bc3c9ab146102fa5780637dc438a41461033f57806388a4124c1461035e575f80fd5b80635d6d7ccb146102765780635e280f1114610295578063715018a6146102e6575f80fd5b80633161b7f6116101615780633161b7f6146101d257806336a5beba146101f157806352a7251014610257575f80fd5b806311f2c3431461017c5780632f7cb0b4146101b1575b5f80fd5b348015610187575f80fd5b5061019e61019636600461145a565b5f9392505050565b6040519081526020015b60405180910390f35b3480156101bc575f80fd5b506101d06101cb3660046114a9565b6106f8565b005b3480156101dd575f80fd5b506101d06101ec3660046114c9565b610735565b3480156101fc575f80fd5b506040805180820182525f8082526020918201528151808301835260045467ffffffffffffffff811680835263ffffffff680100000000000000009092048216928401928352845190815291511691810191909152016101a8565b348015610262575f80fd5b506101d061027136600461155b565b610901565b348015610281575f80fd5b506101d06102903660046114a9565b61095e565b3480156102a0575f80fd5b506006546102c19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a8565b3480156102f1575f80fd5b506101d0610a23565b348015610305575f80fd5b506103196103143660046115a5565b610a36565b604080519283526fffffffffffffffffffffffffffffffff9091166020830152016101a8565b34801561034a575f80fd5b506101d06103593660046115c0565b610ad0565b348015610369575f80fd5b5061037d61037836600461145a565b610bd9565b604080519485526fffffffffffffffffffffffffffffffff9384166020860152918316918401919091521660608201526080016101a8565b3480156103c0575f80fd5b506103e36103cf3660046115d6565b60026020525f908152604090205460ff1681565b60405190151581526020016101a8565b3480156103fe575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166102c1565b348015610427575f80fd5b506005546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff90911681526020016101a8565b61037d61046d36600461145a565b610bf9565b34801561047d575f80fd5b506001546fffffffffffffffffffffffffffffffff1661043e565b3480156104a3575f80fd5b5060055461043e9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b3480156104df575f80fd5b506101d06104ee3660046114a9565b610c29565b3480156104fe575f80fd5b506105a461050d3660046115ef565b60408051606080820183525f808352602080840182905292840181905263ffffffff94851681526003835283902083519182018452546fffffffffffffffffffffffffffffffff81168252700100000000000000000000000000000000810467ffffffffffffffff169282019290925278010000000000000000000000000000000000000000000000009091049092169082015290565b6040805182516fffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff16908201529181015163ffffffff16908201526060016101a8565b3480156105f3575f80fd5b506101d06106023660046115d6565b610c74565b348015610612575f80fd5b506105a4610621366004611608565b60408051606080820183525f808352602080840182905292840181905261ffff949094168452600382529282902082519384018352546fffffffffffffffffffffffffffffffff8116845267ffffffffffffffff700100000000000000000000000000000000820416918401919091527801000000000000000000000000000000000000000000000000900463ffffffff169082015290565b3480156106c5575f80fd5b506101d06106d43660046115d6565b610cc3565b3480156106e4575f80fd5b506101d06106f3366004611621565b610d26565b610700610d3c565b600580546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055565b336107545f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146107b757335f9081526002602052604090205460ff166107b7576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156108fc57368383838181106107d4576107d4611649565b6080029190910191506108f390506107ef60208301836115ef565b6108013684900384016020850161168d565b805160208083015160409384015184516060810186526fffffffffffffffffffffffffffffffff948516815267ffffffffffffffff92831681850190815263ffffffff9283168288019081529783165f908152600390955295909320925183549551965194167fffffffffffffffff000000000000000000000000000000000000000000000000909516949094177001000000000000000000000000000000009590911694909402939093177fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000009190921602179055565b506001016107b9565b505050565b610909610d3c565b73ffffffffffffffffffffffffffffffffffffffff919091165f90815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b3361097d5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146109e057335f9081526002602052604090205460ff166109e0576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610a2b610d3c565b610a345f610d8e565b565b5f808461ffff16606e1480610a5057508461ffff1661279f145b80610a6057508461ffff16614eaf145b15610a7d57610a748561ffff168585610e02565b91509150610ac8565b8461ffff16606f1480610a9557508461ffff16612794145b80610aa557508461ffff16614ea4145b15610ab957610a748561ffff168585610f5c565b610a748561ffff168585611104565b935093915050565b33610aef5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610b5257335f9081526002602052604090205460ff16610b52576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b626107ef60208301836115ef565b5f610b7360a083016080840161171c565b90505f610b8660c0840160a085016115ef565b6004805463ffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090921667ffffffffffffffff90941693909317179091555050565b5f805f80610be88787876111d7565b935093509350935093509350935093565b5f80808080610c0c565b60405180910390fd5b610c178888886111d7565b94509450945094505093509350935093565b610c31610d3c565b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610c7c610d3c565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ccb610d3c565b73ffffffffffffffffffffffffffffffffffffffff8116610d1a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610c03565b610d2381610d8e565b50565b610d2e610d3c565b610d3882826112ad565b5050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610a34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c03565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b63ffffffff8381165f90815260036020526040812060045460055492938493849268010000000000000000900490911690606490610e669070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1689611762565b610e7091906117ac565b610e7a9190611762565b82549091505f90610ead907801000000000000000000000000000000000000000000000000900463ffffffff1688611762565b83546004549192505f9167ffffffffffffffff70010000000000000000000000000000000090920482169184918691610ee791168b6117bf565b610ef191906117bf565b610efb91906117bf565b610f059190611762565b60015485549192506fffffffffffffffffffffffffffffffff90811691610f2d911683611762565b610f3791906117ac565b935493996fffffffffffffffffffffffffffffffff9094169850929650505050505050565b5f805f610f68866113af565b63ffffffff8082165f9081526003602052604081208054939450929091610fac91780100000000000000000000000000000000000000000000000090041688611762565b610fb890610c746117bf565b82549091505f90610fe790700100000000000000000000000000000000900467ffffffffffffffff1683611762565b63ffffffff808b165f908152600360205260408120805493945092909161102b9178010000000000000000000000000000000000000000000000009004168b611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661105a8b846117bf565b6110649190611762565b60015487549192505f916fffffffffffffffffffffffffffffffff9182169161108e911687611762565b61109891906117ac565b60015485549192505f916fffffffffffffffffffffffffffffffff918216916110c2911685611762565b6110cc91906117ac565b90505f6110d982846117bf565b9554959f6fffffffffffffffffffffffffffffffff9096169e50949c50505050505050505050505050565b63ffffffff8084165f908152600360205260408120805491928392839161114891780100000000000000000000000000000000000000000000000090041687611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661117787846117bf565b6111819190611762565b60015484549192506fffffffffffffffffffffffffffffffff908116916111a9911683611762565b6111b391906117ac565b925492986fffffffffffffffffffffffffffffffff90931697509195505050505050565b5f808080806111e8617530896117d2565b90508063ffffffff16606e148061120657508063ffffffff1661279f145b8061121857508063ffffffff16614eaf145b1561123257611228818888610e02565b9095509350611281565b8063ffffffff16606f148061124e57508063ffffffff16612794145b8061126057508063ffffffff16614ea4145b1561127057611228818888610f5c565b61127b818888611104565b90955093505b505060015460055493979296506fffffffffffffffffffffffffffffffff908116955090921692509050565b73ffffffffffffffffffffffffffffffffffffffff82166112fa576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114611350576040519150601f19603f3d011682016040523d82523d5f602084013e611355565b606091505b50509050806108fc576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c03565b5f806113bd617530846117d2565b90508063ffffffff16606f036113d65750606592915050565b8063ffffffff16612794036113ef575061278992915050565b8063ffffffff16614ea4036114085750614e9992915050565b6040517ff42c33dc00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c03565b803563ffffffff81168114611455575f80fd5b919050565b5f805f6060848603121561146c575f80fd5b61147584611442565b95602085013595506040909401359392505050565b80356fffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f602082840312156114b9575f80fd5b6114c28261148a565b9392505050565b5f80602083850312156114da575f80fd5b823567ffffffffffffffff808211156114f1575f80fd5b818501915085601f830112611504575f80fd5b813581811115611512575f80fd5b8660208260071b8501011115611526575f80fd5b60209290920196919550909350505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f806040838503121561156c575f80fd5b61157583611538565b915060208301358015158114611589575f80fd5b809150509250929050565b803561ffff81168114611455575f80fd5b5f805f606084860312156115b7575f80fd5b61147584611594565b5f60c082840312156115d0575f80fd5b50919050565b5f602082840312156115e6575f80fd5b6114c282611538565b5f602082840312156115ff575f80fd5b6114c282611442565b5f60208284031215611618575f80fd5b6114c282611594565b5f8060408385031215611632575f80fd5b61163b83611538565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b803567ffffffffffffffff81168114611455575f80fd5b5f6060828403121561169d575f80fd5b6040516060810181811067ffffffffffffffff821117156116e5577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040526116f18361148a565b81526116ff60208401611676565b602082015261171060408401611442565b60408201529392505050565b5f6020828403121561172c575f80fd5b6114c282611676565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761177957611779611735565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826117ba576117ba61177f565b500490565b8082018082111561177957611779611735565b5f63ffffffff808416806117e8576117e861177f565b9216919091069291505056fea2646970667358221220057b4584fe743c800fee37c9f14cc5705300ed67e417991ba4a7213c92a3bfad64736f6c6343000816003360e060405234801562000010575f80fd5b506040516200588138038062005881833981016040819052620000339162000185565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001cf565b6001600160a01b03821660805263ffffffff811660a05283833380620000d957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000e4816200011e565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b03989098169790971790965550620001fb945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811462000182575f80fd5b50565b5f805f806080858703121562000199575f80fd5b8451620001a6816200016d565b6020860151909450620001b9816200016d565b6040860151606090960151949790965092505050565b5f60208284031215620001e0575f80fd5b815163ffffffff81168114620001f4575f80fd5b9392505050565b60805160a05160c0516156426200023f5f395f8181612458015261264f01525f50505f81816107f80152818161093b015281816116c30152611daa01526156425ff3fe608060405260043610610186575f3560e01c806361d027b3116100d1578063d15b0d491161007c578063f2fde38b11610057578063f2fde38b14610528578063faaebd2114610547578063fd9be52214610580575f80fd5b8063d15b0d49146104be578063d80e9bd9146104dd578063f0f4426014610509575f80fd5b80638da5cb5b116100ac5780638da5cb5b1461044a5780639c33abf714610473578063c14c43491461049f575f80fd5b806361d027b3146103eb5780636750cd4c14610417578063715018a614610436575f80fd5b806329460b0b1161013157806343ea4fa91161010c57806343ea4fa9146103145780634d9632001461033357806354fd4d50146103c0575f80fd5b806329460b0b1461029c57806339e3f938146102bb5780634389e58f146102e7575f80fd5b80631881d94d116101615780631881d94d14610242578063200175f71461025c57806320efd7221461027d575f80fd5b806301ffc9a7146101915780630e97289b146101c5578063188183f414610216575f80fd5b3661018d57005b5f80fd5b34801561019c575f80fd5b506101b06101ab3660046141f9565b61059f565b60405190151581526020015b60405180910390f35b3480156101d0575f80fd5b506006546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b348015610221575f80fd5b50610235610230366004614285565b610683565b6040516101bc91906142bc565b34801561024d575f80fd5b505f6040516101bc91906142ef565b348015610267575f80fd5b5061027b61027636600461432e565b61078e565b005b348015610288575f80fd5b5061027b6102973660046143ad565b610939565b3480156102a7575f80fd5b5061027b6102b63660046143fe565b610aec565b3480156102c6575f80fd5b506102da6102d5366004614285565b610ccf565b6040516101bc91906144fe565b3480156102f2575f80fd5b5061030661030136600461451f565b610e6a565b6040516101bc929190614631565b34801561031f575f80fd5b506102da61032e366004614285565b610f1f565b34801561033e575f80fd5b5061038f61034d366004614285565b600460209081525f928352604080842090915290825290205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101bc565b3480156103cb575f80fd5b5060408051600381525f60208201526002918101919091526060016101bc565b3480156103f6575f80fd5b506003546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b348015610422575f80fd5b506101b0610431366004614654565b6112d0565b348015610441575f80fd5b5061027b6112da565b348015610455575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166101f1565b34801561047e575f80fd5b5061049261048d36600461466f565b6112ed565b6040516101bc91906146b7565b3480156104aa575f80fd5b5061027b6104b93660046146c9565b6113d4565b3480156104c9575f80fd5b5061027b6104d8366004614738565b611547565b3480156104e8575f80fd5b506104fc6104f736600461451f565b6115d5565b6040516101bc919061474f565b348015610514575f80fd5b5061027b610523366004614766565b611643565b348015610533575f80fd5b5061027b610542366004614766565b611657565b348015610552575f80fd5b50610572610561366004614766565b60056020525f908152604090205481565b6040519081526020016101bc565b34801561058b575f80fd5b5061027b61059a366004614781565b6116b7565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061063157507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b8061067d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080518082019091525f808252602082015263ffffffff8083165f8181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845260048352818420948452939091528120805492939092169081900361071257825463ffffffff16610714565b805b63ffffffff1684528154640100000000900473ffffffffffffffffffffffffffffffffffffffff1680610766578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16610768565b805b73ffffffffffffffffffffffffffffffffffffffff166020860152509295945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146107df576040517f885762a700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061088391906147ab565b73ffffffffffffffffffffffffffffffffffffffff16036108d0576040517fe695d04400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108db8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109a8576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610ae657368383838181106109c5576109c56147c6565b90506020028101906109d791906147f3565b90506109ee6109e96020830183614654565b611821565b6001610a006040830160208401614654565b63ffffffff1603610a4057610a3b610a1b6020830183614654565b86610a29604085018561482f565b810190610a369190614958565b611868565b610add565b6002610a526040830160208401614654565b63ffffffff1603610a8d57610a3b610a6d6020830183614654565b86610a7b604085018561482f565b810190610a889190614b11565b611914565b610a9d6040820160208301614654565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b506001016109aa565b50505050565b610af461195d565b5f5b81811015610c915736838383818110610b1157610b116147c6565b9050602002810190610b239190614b43565b905060ff610b346020830183614b75565b610b45906040810190602001614ba7565b60ff1603610b7f576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff610b8e6020830183614b75565b610b9f906060810190604001614ba7565b60ff1603610bd9576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff610bef6020830183614b75565b610bfd906020810190614bc0565b67ffffffffffffffff1603610c3e576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5c610c4e6020830183614b75565b610c5790614bd9565b6119af565b610c885f610c6d6020840184614654565b610c7a6020850185614b75565b610c8390614bd9565b611a00565b50600101610af6565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610cc3929190614c90565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a01000000000000000000009091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610dec57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dc1575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610e5957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e2e575b505050505081525050905092915050565b604080518082019091525f80825260208201526060610e8b86868686611d93565b6006546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815292945090925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610ee990849089908990600401614e2d565b5f604051808303815f87803b158015610f00575f80fd5b505af1158015610f12573d5f803e3d5ffd5b5050505094509492505050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610fce57825467ffffffffffffffff168452610fed565b67ffffffffffffffff81811614610fed5767ffffffffffffffff811684525b815468010000000000000000900460ff166110a157825468010000000000000000900460ff161561109c578260010180548060200260200160405190810160405280929190818152602001828054801561107b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611050575b50505050506080850152825468010000000000000000900460ff1660208501525b61113d565b815468010000000000000000900460ff9081161461113d578160010180548060200260200160405190810160405280929190818152602001828054801561111c57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116110f1575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff1661120a5782546901000000000000000000900460ff161561120557826002018054806020026020016040519081016040528092919081815260200182805480156111cd57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111a2575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112be565b81546901000000000000000000900460ff908116146112be578160020180548060200260200160405190810160405280929190818152602001828054801561128657602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161125b575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112c7846119af565b50505092915050565b5f61067d82611e8a565b6112e261195d565b6112eb5f611ef0565b565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161134c576113268385610683565b60405160200161133691906142bc565b60405160208183030381529060405290506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601611393576113838385610f1f565b60405160200161133691906144fe565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610ad4565b9392505050565b6113dc61195d565b5f5b8181101561151557368383838181106113f9576113f96147c6565b60609081029290920192505f916114169150830160408401614766565b73ffffffffffffffffffffffffffffffffffffffff1603611463576040517f20e9d05a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114736040820160208301614654565b63ffffffff165f036114b1576040517f49cfac4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec906114eb8385614654565b63ffffffff16815260208101919091526040015f2061150a8282614e8f565b5050506001016113de565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610cc3929190614f27565b61154f61195d565b600254811115611599576002546040517f34084fb8000000000000000000000000000000000000000000000000000000008152610ad4918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f806116246115fd6060890160408a01614766565b61160d60808a0160608b01614654565b61161a60c08b018b61482f565b9050878a8a611f64565b604080518082019091529182526020820152925050505b949350505050565b61164b61195d565b61165481612062565b50565b61165f61195d565b73ffffffffffffffffffffffffffffffffffffffff81166116ae576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b61165481611ef0565b6116c0816120d5565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174e91906147ab565b905061175b81848461213d565b6040805133815273ffffffffffffffffffffffffffffffffffffffff851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a66698839060600161092c565b73ffffffffffffffffffffffffffffffffffffffff82166117fb576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61181c73ffffffffffffffffffffffffffffffffffffffff8416838361216d565b505050565b61182a81611e8a565b611654576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610ad4565b73ffffffffffffffffffffffffffffffffffffffff8083165f90815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc8059061092c90849086908590614fb3565b61191f828483611a00565b6119298284610f1f565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161092c9392919061500f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146112eb576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ad4565b602081015160ff161580156119c95750606081015160ff16155b15611654576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff9081161480611a1b5750602081015160ff16155b15611a625760808101515115611a5d576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae1565b806020015160ff16816080015151141580611a9d57506002611a86600160ff615076565b611a90919061508f565b60ff16816020015160ff16115b15611ad4576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae181608001516121fa565b604081015160ff9081161480611afc5750604081015160ff16155b15611b825760a08101515115611b3e576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611b7d576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c59565b806040015160ff168160a0015151141580611bbd57506002611ba6600160ff615076565b611bb0919061508f565b60ff16816040015160ff16115b15611bf4576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff161580611c155750806040015160ff16816060015160ff16115b15611c4c576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c598160a001516121fa565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a0100000000000000000000959091169490940293909317835560808401518051859493611d6f93908501920190614166565b5060a08201518051611d8b916002840191602090910190614166565b505050505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314611e17576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611e24888888612292565b90925090505f80611e55611e3e60608c0160408d01614766565b611e4e60808d0160608e01614654565b858a612359565b9092509050611e6482846150d5565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff161515806113cd5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f80611f7286866124e3565b915091505f611f828b8b846124fc565b90505f611f8f8c8c610683565b9050611fa48a825f015163ffffffff16612508565b806020015173ffffffffffffffffffffffffffffffffffffffff1663709eb6648c8e8d886040518563ffffffff1660e01b8152600401611fe794939291906150e8565b602060405180830381865afa158015612002573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120269190615132565b61203090836150d5565b91505f806120408e8e868e612550565b909250905061204f82856150d5565b9e909d509b505050505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016115ca565b335f9081526005602052604090205480821115612128576040517f34084fb80000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b335f9081526005602052604090209190039055565b73ffffffffffffffffffffffffffffffffffffffff83166121625761181c8282612691565b61181c8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261181c908490612793565b5f805b825181101561181c575f838281518110612219576122196147c6565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611612288576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b91506001016121fd565b60605f805f6122a186866124e3565b90925090505f6122ca6122ba60608a0160408b01614766565b61023060808b0160608c01614654565b90505f6122da60c08a018a61482f565b905090506122f181835f015163ffffffff16612508565b60208201516123219061230a60808c0160608d01614654565b61231a60608d0160408e01614766565b8488612832565b61232b90866150d5565b94505f806123398b86612966565b909250905061234882886150d5565b909b909a5098505050505050505050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526003549192505f9182916124809173ffffffffffffffffffffffffffffffffffffffff16907f000000000000000000000000000000000000000000000000000000000000000090849087612988565b9150915061249087878484612a33565b909550935084156124d75760035473ffffffffffffffffffffffffffffffffffffffff165f90815260056020526040812080548792906124d19084906150d5565b90915550505b50505094509492505050565b6060806124f08484612aaa565b915091505b9250929050565b5f61163b848484612b90565b8082111561254c576040517fc667af3e0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b5050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526003549192505f9182916126759173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086612c04565b9150915061268587878484612a33565b94509450505050611e81565b73ffffffffffffffffffffffffffffffffffffffff82166126de576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612734576040519150601f19603f3d011682016040523d82523d5f602084013e612739565b606091505b505090508061181c576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ad4565b5f8060205f8451602086015f885af1806127b2576040513d5f823e3d81fd5b50505f513d915081156127c95780600114156127e3565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610ae6576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ad4565b6040517f717e8a420000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff87169063717e8a429061288c9088908890889088906004016150e8565b6020604051808303815f875af11580156128a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128cc9190615132565b9050801561290e5773ffffffffffffffffffffffffffffffffffffffff86165f90815260056020526040812080548392906129089084906150d5565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff88168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b5f606061297d6005612977866151d3565b85612cab565b909590945092505050565b5f6060863b8083036129ad57604080515f808252602082019092529250925050612a29565b5f805f8761ffff1667ffffffffffffffff8111156129cd576129cd614890565b6040519080825280601f01601f1916602001820160405280156129f7576020820181803683370190505b5090505f80885160208a018c8f8ff191503d925087831115612a17578792505b828152825f602083013e909450925050505b9550959350505050565b5f80831580612a43575082516020115b15612a5257505f905080611e81565b5f83806020019051810190612a679190615132565b90508515612a7757809150612aa0565b5f6002548811612a8957600254612a8b565b875b9050808211612a9a5781612a9c565b805b9350505b5094509492505050565b6060805f80612ab98686612dfe565b9150915080515f03612b0e57604080515f808252602082019092528391612b02565b604080518082019091525f815260606020820152815260200190600190039081612adb5790505b509350935050506124f5565b6040805160018082528183019092525f91816020015b604080518082019091525f815260606020820152815260200190600190039081612b245790505090506040518060400160405280600260ff16815260200183815250815f81518110612b7857612b786147c6565b60209081029190910101529196919550909350505050565b5f80612b9c8585610f1f565b90505f83515f14612bca57835f81518110612bb957612bb96147c6565b602002602001015160200151612bda565b60405180602001604052805f8152505b90505f80612be783613034565b91509150612bf884888a85856132ce565b98975050505050505050565b5f6060853b808303612c2957604080515f808252602082019092529250925050611e81565b5f805f8761ffff1667ffffffffffffffff811115612c4957612c49614890565b6040519080825280601f01601f191660200182016040528015612c73576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115612c92578792505b828152825f602083013e90999098509650505050505050565b5f60605f612cb885613486565b90505f612cc48661356c565b805160208201206060880151604089015192935090915f612ce58284610f1f565b90505f89515f14612d1357895f81518110612d0257612d026147c6565b602002602001015160200151612d23565b60405180602001604052805f8152505b90506060612d828d846040518060a001604052808963ffffffff1681526020018c81526020018a8152602001875f015167ffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525085613589565b604051919b509150612d9a908990899060200161526e565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a0015183604051612de69392919061529c565b60405180910390a15050505050505050935093915050565b6060806002831015612e3e576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b5f612e4c60028286886152f8565b612e559161531f565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161301d57805f5b86831015612faa575f612e9e60018501858a8c6152f8565b612ea791615367565b60f81c90505f819003612ee8576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b8160ff165f03612efa57809150612f36565b8160ff168160ff1614612f3657365f612f1586868c8e6152f8565b91509150612f26898986858561385b565b9099509750859450919250829150505b60018401935f90612f4c90600301868b8d6152f8565b612f559161531f565b60f01c90505f819003612f97576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101869052602401610ad4565b8060020161ffff16850194505050612e86565b828714612fe6576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b600287111561301657365f612ffd85858b8d6152f8565b9150915061300e888885858561385b565b909850965050505b505061302b565b6130288287876139ce565b93505b50509250929050565b60608082515f0361304457915091565b5f61304e84613c49565b90508060ff166001036130fe5760408051600180825281830190925290816020015b606081526020019060019003908161307057905050925083835f8151811061309a5761309a6147c6565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506130d2846003613d6b565b825f815181106130e4576130e46147c6565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561311a5761311a614890565b604051908082528060200260200182016040528015613143578160200160208202803683370190505b5091508060ff1667ffffffffffffffff81111561316257613162614890565b60405190808252806020026020018201604052801561319557816020015b60608152602001906001900390816131805790505b5092505f8060ff5b8651831015613245576001909201915f6131b78885613dea565b6002949094019390505f6131cb8986613d6b565b90508260ff1660ff036131e057809250613236565b8260ff168160ff1614613236577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f61321e8b8784613e69565b905061322c8a8a8784613fe2565b5093909301929150815b5061ffff16929092019161319d565b8183035f613254898584613e69565b905061326288888584613fe2565b5f5b8660ff168160ff1610156132c257878160ff1681518110613287576132876147c6565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613264565b50505050505050915091565b5f80866040015187602001516132e491906153ad565b90505f5b8160ff168160ff16101561347b575f886020015160ff168260ff161061333c5760a089015160208a015161331c9084615076565b60ff168151811061332f5761332f6147c6565b602002602001015161335e565b88608001518260ff1681518110613355576133556147c6565b60200260200101515b60408051602081019091525f808252919250905b86518110156133ca578360ff16878281518110613391576133916147c6565b602002602001015160ff16036133c2578781815181106133b3576133b36147c6565b602002602001015191506133ca565b600101613372565b5089516040517f30bb3aac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416916330bb3aac91613423918d918d9087906004016153c6565b602060405180830381865afa15801561343e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134629190615132565b61346c90866150d5565b945050508060010190506132e8565b505095945050505050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001613556929190615410565b5f60605f8061359785613034565b915091505f876040015188602001516135b091906153ad565b90508060ff1667ffffffffffffffff8111156135ce576135ce614890565b6040519080825280602002602001820160405280156135f7578160200160208202803683370190505b5093505f5b8160ff168160ff161015610f12575f896020015160ff168260ff16106136505760a08a015160208b01516136309084615076565b60ff1681518110613643576136436147c6565b6020026020010151613672565b89608001518260ff1681518110613669576136696147c6565b60200260200101515b60408051602081019091525f808252919250905b85518110156136de578360ff168682815181106136a5576136a56147c6565b602002602001015160ff16036136d6578681815181106136c7576136c76147c6565b602002602001015191506136de565b600101613686565b506040517f95d376d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906395d376d790613733908d908590600401615435565b6020604051808303815f875af115801561374f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137739190615132565b878460ff1681518110613788576137886147c6565b6020026020010181815250505f878460ff16815181106137aa576137aa6147c6565b6020026020010151111561385157868360ff16815181106137cd576137cd6147c6565b60200260200101518c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461381f91906150d5565b92505081905550868360ff168151811061383b5761383b6147c6565b60200260200101518861384e91906150d5565b97505b50506001016135fc565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8616016138f5578651156138b8578684846040516020016138a4939291906154b2565b6040516020818303038152906040526138ee565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b96506139c3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff86160161398c5785511561394f5785848460405160200161393b939291906154b2565b604051602081830303815290604052613985565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b95506139c3565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff86166004820152602401610ad4565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff851601613af35760228214613a35576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613a55613a476022600286886152f8565b613a50916154d8565b61410d565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b1660248201529091506034016040516020818303038152906040529150506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff851601613c1157604282111580613b2e5750606282115b15613b65576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613b77613a476022600286886152f8565b90505f613b8b613a476042602287896152f8565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613bbe866042818a6152f8565b613bc7916154d8565b60405160086020938403029190911c9250613bf8916001916011918391889183916031916002918b918b9101615514565b60405160208183030381529060405293505050506113cd565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff85166004820152602401610ad4565b5f80805b8351821015613d27576001909101905f613c678584613dea565b905060028301925060028161ffff161015613cb1576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b5f613cbc8685613d6b565b90508060ff1660ff03613cfb576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b8316613d185760019485019460ff82161b831792505b5061ffff169190910190613c4d565b83518214613d64576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101839052602401610ad4565b5050919050565b5f613d778260016150d5565b83511015613de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401610ad4565b50016001015190565b5f613df68260026150d5565b83511015613e60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606401610ad4565b50016002015190565b606081613e7781601f6150d5565b1015613edf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ad4565b613ee982846150d5565b84511015613f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ad4565b606082158015613f715760405191505f825260208201604052613fd9565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613faa578051835260209283019201613f92565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff0361401f576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61402b8360016153ad565b90505f5b8451811015611d8b575f85828151811061404b5761404b6147c6565b602002602001015190508060ff168360ff16036140c057868281518110614074576140746147c6565b60200260200101518460405160200161408e92919061526e565b6040516020818303038152906040528783815181106140af576140af6147c6565b602002602001018190525050611d8b565b8060ff165f0361410457828683815181106140dd576140dd6147c6565b602002602001019060ff16908160ff1681525050838783815181106140af576140af6147c6565b5060010161402f565b5f6fffffffffffffffffffffffffffffffff821115614162576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526080600482015260248101839052604401610ad4565b5090565b828054828255905f5260205f209081019282156141de579160200282015b828111156141de57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614184565b506141629291505b80821115614162575f81556001016141e6565b5f60208284031215614209575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113cd575f80fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611654575f80fd5b803561426481614238565b919050565b63ffffffff81168114611654575f80fd5b803561426481614269565b5f8060408385031215614296575f80fd5b82356142a181614238565b915060208301356142b181614269565b809150509250929050565b815163ffffffff16815260208083015173ffffffffffffffffffffffffffffffffffffffff16908201526040810161067d565b6020810160038310614328577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f805f60608486031215614340575f80fd5b833561434b81614238565b9250602084013561435b81614238565b929592945050506040919091013590565b5f8083601f84011261437c575f80fd5b50813567ffffffffffffffff811115614393575f80fd5b6020830191508360208260051b85010111156124f5575f80fd5b5f805f604084860312156143bf575f80fd5b83356143ca81614238565b9250602084013567ffffffffffffffff8111156143e5575f80fd5b6143f18682870161436c565b9497909650939450505050565b5f806020838503121561440f575f80fd5b823567ffffffffffffffff811115614425575f80fd5b6144318582860161436c565b90969095509350505050565b5f815180845260208085019450602084015f5b8381101561448257815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614450565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c060808501526144dc60c085018261443d565b905060a083015184820360a08601526144f5828261443d565b95945050505050565b602081525f6113cd602083018461448d565b80358015158114614264575f80fd5b5f805f8060608587031215614532575f80fd5b843567ffffffffffffffff80821115614549575f80fd5b9086019060e0828903121561455c575f80fd5b90945060208601359080821115614571575f80fd5b818701915087601f830112614584575f80fd5b813581811115614592575f80fd5b8860208285010111156145a3575f80fd5b6020830195508094505050506145bb60408601614510565b905092959194509250565b5f5b838110156145e05781810151838201526020016145c8565b50505f910152565b5f81518084526145ff8160208601602086016145c6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f61163b60608301846145e8565b5f60208284031215614664575f80fd5b81356113cd81614269565b5f805f60608486031215614681575f80fd5b833561468c81614269565b9250602084013561469c81614238565b915060408401356146ac81614269565b809150509250925092565b602081525f6113cd60208301846145e8565b5f80602083850312156146da575f80fd5b823567ffffffffffffffff808211156146f1575f80fd5b818501915085601f830112614704575f80fd5b813581811115614712575f80fd5b866020606083028501011115614726575f80fd5b60209290920196919550909350505050565b5f60208284031215614748575f80fd5b5035919050565b81518152602080830151908201526040810161067d565b5f60208284031215614776575f80fd5b81356113cd81614238565b5f8060408385031215614792575f80fd5b823561479d81614238565b946020939093013593505050565b5f602082840312156147bb575f80fd5b81516113cd81614238565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614825575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614862575f80fd5b83018035915067ffffffffffffffff82111561487c575f80fd5b6020019150368190038213156124f5575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156148e0576148e0614890565b60405290565b60405160e0810167ffffffffffffffff811182821017156148e0576148e0614890565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561495057614950614890565b604052919050565b5f60408284031215614968575f80fd5b6040516040810181811067ffffffffffffffff8211171561498b5761498b614890565b604052823561499981614269565b815260208301356149a981614238565b60208201529392505050565b803567ffffffffffffffff81168114614264575f80fd5b803560ff81168114614264575f80fd5b5f82601f8301126149eb575f80fd5b8135602067ffffffffffffffff821115614a0757614a07614890565b8160051b614a16828201614909565b9283528481018201928281019087851115614a2f575f80fd5b83870192505b84831015614a57578235614a4881614238565b82529183019190830190614a35565b979650505050505050565b5f60c08284031215614a72575f80fd5b614a7a6148bd565b9050614a85826149b5565b8152614a93602083016149cc565b6020820152614aa4604083016149cc565b6040820152614ab5606083016149cc565b6060820152608082013567ffffffffffffffff80821115614ad4575f80fd5b614ae0858386016149dc565b608084015260a0840135915080821115614af8575f80fd5b50614b05848285016149dc565b60a08301525092915050565b5f60208284031215614b21575f80fd5b813567ffffffffffffffff811115614b37575f80fd5b61163b84828501614a62565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614825575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614825575f80fd5b5f60208284031215614bb7575f80fd5b6113cd826149cc565b5f60208284031215614bd0575f80fd5b6113cd826149b5565b5f61067d3683614a62565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c17575f80fd5b830160208101925035905067ffffffffffffffff811115614c36575f80fd5b8060051b36038213156124f5575f80fd5b8183525f60208085019450825f5b85811015614482578135614c6881614238565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614c55565b60208082528181018390525f906040808401600586901b8501820187855b88811015614e1f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112614d0f575f80fd5b8b018035614d1c81614269565b63ffffffff16855280880135368290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41018112614d58575f80fd5b8589018890520167ffffffffffffffff614d71826149b5565b1687860152614d818882016149cc565b606060ff80831682890152614d978a85016149cc565b92506080818416818a0152614dad8386016149cc565b935060a09250818416838a0152614dc681860186614be4565b60c08b81015294509150614de1905061010089018483614c47565b925050614df081840184614be4565b93509050838783030160e0880152614e09828483614c47565b978a019796505050928701925050600101614cae565b509098975050505050505050565b604081525f614e3f60408301866145e8565b8281036020840152838152838560208301375f6020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b8135614e9a81614269565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135614eda81614238565b77ffffffffffffffffffffffffffffffffffffffff000000008160201b16837fffffffffffffffff0000000000000000000000000000000000000000000000008416171784555050505050565b60208082528181018390525f90604080840186845b87811015614fa6578135614f4f81614269565b63ffffffff90811684528286013590614f6782614269565b168386015281840135614f7981614238565b73ffffffffffffffffffffffffffffffffffffffff16838501526060928301929190910190600101614f3c565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526080810161163b6040830184805163ffffffff16825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6144f5606083018461448d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561067d5761067d615049565b5f60ff8316806150c6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b8082018082111561067d5761067d615049565b63ffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201525f61512860808301846145e8565b9695505050505050565b5f60208284031215615142575f80fd5b5051919050565b5f82601f830112615158575f80fd5b813567ffffffffffffffff81111561517257615172614890565b6151a360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614909565b8181528460208386010111156151b7575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e082360312156151e3575f80fd5b6151eb6148e6565b6151f4836149b5565b81526152026020840161427a565b602082015261521360408401614259565b60408201526152246060840161427a565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff811115615256575f80fd5b61526236828601615149565b60c08301525092915050565b5f835161527f8184602088016145c6565b8351908301906152938183602088016145c6565b01949350505050565b606081525f6152ae606083018661443d565b602083820360208501526152c2828761443d565b8481036040860152855180825260208088019450909101905f5b81811015614e1f578451835293830193918301916001016152dc565b5f8085851115615306575f80fd5b83861115615312575f80fd5b5050820193919092039150565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561535f5780818660020360031b1b83161692505b505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561535f5760019490940360031b84901b1690921692915050565b60ff818116838216019081111561067d5761067d615049565b63ffffffff8516815267ffffffffffffffff8416602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201525f61512860808301846145e8565b8281525f82516154278160208501602087016145c6565b919091016020019392505050565b6040815263ffffffff83511660408201525f602084015160a0606084015261546060e08401826145e8565b90506040850151608084015267ffffffffffffffff60608601511660a084015273ffffffffffffffffffffffffffffffffffffffff60808601511660c084015282810360208401526144f581856145e8565b5f84516154c38184602089016145c6565b8201838582375f930192835250909392505050565b8035602083101561067d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b166017840152506155f4601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea264697066735822122007106a9f1a4ad0c76a6c3862b682c6be555db12b22a4209a408302fac9b0046164736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002b7c38038062002b7c833981016040819052620000339162000139565b8080816001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000072573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000098919062000168565b3380620000be57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c981620000ea565b506001600160a01b0390911660805263ffffffff1660a052506200018d9050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156200014a575f80fd5b81516001600160a01b038116811462000161575f80fd5b9392505050565b5f6020828403121562000179575f80fd5b815163ffffffff8116811462000161575f80fd5b60805160a0516129c6620001b65f395f61036301525f818161048301526104e701526129c65ff3fe608060405234801561000f575f80fd5b5060043610610115575f3560e01c806343ea4fa9116100ad5780638da5cb5b1161007d578063c40ff83511610063578063c40ff835146102b6578063e084d952146102c9578063f2fde38b146102dc575f80fd5b80638da5cb5b1461026f5780639c33abf714610296575f80fd5b806343ea4fa91461022257806354fd4d50146102355780636750cd4c14610254578063715018a614610267575f80fd5b806320efd722116100e857806320efd7221461017857806329460b0b1461018b57806339e3f9381461019e5780633c782a52146101be575f80fd5b806301ffc9a7146101195780630223536e146101415780630894edf1146101565780631881d94d14610169575b5f80fd5b61012c610127366004611bf2565b6102ef565b60405190151581526020015b60405180910390f35b61015461014f366004611c92565b61034a565b005b610154610164366004611ceb565b61035c565b60016040516101389190611d33565b610154610186366004611dd6565b6104e5565b610154610199366004611e25565b610645565b6101b16101ac366004611e77565b610828565b6040516101389190611f69565b6102026101cc366004611f7b565b600260209081525f938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff909116602083015201610138565b6101b1610230366004611e77565b6109c3565b60408051600381525f6020820152600291810191909152606001610138565b61012c610262366004611fad565b610d74565b610154610d7e565b5f5460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610138565b6102a96102a4366004611fc6565b610d91565b6040516101389190611ffd565b6101546102c4366004612067565b610e31565b61012c6102d7366004612283565b610e41565b6101546102ea3660046122cd565b610e55565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0ab7be9f000000000000000000000000000000000000000000000000000000001480610344575061034482610eb8565b92915050565b61035684848484610f4e565b50505050565b61038783837f0000000000000000000000000000000000000000000000000000000000000000611060565b5f610392848461112e565b90505f61039f858561113f565b90505f6103ac83836109c3565b90506103d08187876040516103c29291906122e6565b604051809103902086611161565b5f60405180606001604052808463ffffffff1681526020016103f2898961130a565b81526020016104018989611322565b67ffffffffffffffff908116909152604080517fa825d747000000000000000000000000000000000000000000000000000000008152835163ffffffff1660048201526020840151602482015290830151909116604482015273ffffffffffffffffffffffffffffffffffffffff8681166064830152608482018890529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b1580156104c6575f80fd5b505af11580156104d8573d5f803e3d5ffd5b5050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610554576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156103565736838383818110610571576105716122f5565b90506020028101906105839190612322565b905061059a6105956020830183611fad565b611344565b60026105ac6040830160208401611fad565b63ffffffff16036105ec576105e76105c76020830183611fad565b866105d5604085018561235e565b8101906105e291906123bf565b61138b565b61063c565b6105fc6040820160208301611fad565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610556565b61064d6113e1565b5f5b818110156107ea573683838381811061066a5761066a6122f5565b905060200281019061067c91906123f1565b905060ff61068d6020830183612423565b61069e906040810190602001612455565b60ff16036106d8576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6106e76020830183612423565b6106f8906060810190604001612455565b60ff1603610732576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6107486020830183612423565b61075690602081019061246e565b67ffffffffffffffff1603610797576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b56107a76020830183612423565b6107b090612487565b611433565b6107e15f6107c66020840184611fad565b6107d36020850185612423565b6107dc90612487565b611484565b5060010161064f565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b560828260405161081c92919061253c565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561094557602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161091a575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156109b257602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610987575b505050505081525050905092915050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610a7257825467ffffffffffffffff168452610a91565b67ffffffffffffffff81811614610a915767ffffffffffffffff811684525b815468010000000000000000900460ff16610b4557825468010000000000000000900460ff1615610b405782600101805480602002602001604051908101604052809291908181526020018280548015610b1f57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610af4575b50505050506080850152825468010000000000000000900460ff1660208501525b610be1565b815468010000000000000000900460ff90811614610be15781600101805480602002602001604051908101604052809291908181526020018280548015610bc057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b95575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610cae5782546901000000000000000000900460ff1615610ca95782600201805480602002602001604051908101604052809291908181526020018280548015610c7157602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c46575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d62565b81546901000000000000000000900460ff90811614610d625781600201805480602002602001604051908101604052809291908181526020018280548015610d2a57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610cff575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d6b84611433565b50505092915050565b5f61034482611817565b610d866113e1565b610d8f5f61187d565b565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601610df057610dca83856109c3565b604051602001610dda9190611f69565b6040516020818303038152906040529050610e2a565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610633565b9392505050565b610e3c838383611060565b505050565b5f610e4d8484846118f1565b949350505050565b610e5d6113e1565b73ffffffffffffffffffffffffffffffffffffffff8116610eac576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610633565b610eb58161187d565b50565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061034457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610344565b6040805180820182526001815267ffffffffffffffff8316602082015290516002905f90610f7f90889088906122e6565b604080519182900390912082526020808301939093529081015f9081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916110529187908790869088906126d6565b60405180910390a150505050565b6051821461109a576040517fc9bf37b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016110a684846119f1565b60ff16146110e0576040517f3a9ae7b900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff166110f18484611a12565b63ffffffff1614610e3c576040517f42d2c97e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e2a61113c8484611a21565b90565b5f61114e600d60098486612759565b61115791612780565b60e01c9392505050565b61116c8383836118f1565b6111a2576040517f4c3118d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611257575f5b836020015160ff168160ff161015611255575f83815260026020908152604080832085845290915281206080860151805191929160ff85169081106111f8576111f86122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001690556001016111b1565b505b604083015160ff1615610e3c575f5b836040015160ff168160ff161015610356575f838152600260209081526040808320858452909152812060a0860151805191929160ff85169081106112ad576112ad6122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611266565b5f611319602d600d8486612759565b610e2a916127c8565b5f611331600960018486612759565b61133a91612804565b60c01c9392505050565b61134d81611817565b610eb5576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610633565b611396828483611484565b6113a082846109c3565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516113d49392919061284a565b60405180910390a1505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610d8f576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610633565b602081015160ff1615801561144d5750606081015160ff16155b15610eb5576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff908116148061149f5750602081015160ff16155b156114e657608081015151156114e1576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611565565b806020015160ff168160800151511415806115215750600261150a600160ff6128b1565b61151491906128ca565b60ff16816020015160ff16115b15611558576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115658160800151611a30565b604081015160ff90811614806115805750604081015160ff16155b156116065760a081015151156115c2576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611601576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd565b806040015160ff168160a00151511415806116415750600261162a600160ff6128b1565b61163491906128ca565b60ff16816040015160ff16115b15611678576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806116995750806040015160ff16816060015160ff16115b156116d0576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd8160a00151611a30565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a01000000000000000000009590911694909402939093178355608084015180518594936117f393908501920190611b56565b5060a0820151805161180f916002840191602090910190611b56565b505050505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff16151580610e2a5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60208301515f9060ff161561196f575f5b846020015160ff168160ff1610156119585761194385608001518260ff1681518110611930576119306122f5565b60200260200101518585885f0151611ac8565b611950575f915050610e2a565b600101611902565b50836040015160ff165f0361196f57506001610e2a565b60608401515f5b856040015160ff168160ff1610156119e6576119b78660a001518260ff16815181106119a4576119a46122f5565b60200260200101518686895f0151611ac8565b156119de57816119c681612910565b9250508160ff165f036119de57600192505050610e2a565b600101611976565b505f95945050505050565b5f6119ff6001828486612759565b611a089161294a565b60f81c9392505050565b5f61114e6031602d8486612759565b5f611319605160318486612759565b5f805b8251811015610e3c575f838281518110611a4f57611a4f6122f5565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611611abe576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101611a33565b5f838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff16938301939093529091611b4c57508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b828054828255905f5260205f20908101928215611bce579160200282015b82811115611bce57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190611b74565b50611bda929150611bde565b5090565b5b80821115611bda575f8155600101611bdf565b5f60208284031215611c02575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e2a575f80fd5b5f8083601f840112611c41575f80fd5b50813567ffffffffffffffff811115611c58575f80fd5b602083019150836020828501011115611c6f575f80fd5b9250929050565b803567ffffffffffffffff81168114611c8d575f80fd5b919050565b5f805f8060608587031215611ca5575f80fd5b843567ffffffffffffffff811115611cbb575f80fd5b611cc787828801611c31565b90955093505060208501359150611ce060408601611c76565b905092959194509250565b5f805f60408486031215611cfd575f80fd5b833567ffffffffffffffff811115611d13575f80fd5b611d1f86828701611c31565b909790965060209590950135949350505050565b6020810160038310611d6c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b803573ffffffffffffffffffffffffffffffffffffffff81168114611c8d575f80fd5b5f8083601f840112611da5575f80fd5b50813567ffffffffffffffff811115611dbc575f80fd5b6020830191508360208260051b8501011115611c6f575f80fd5b5f805f60408486031215611de8575f80fd5b611df184611d72565b9250602084013567ffffffffffffffff811115611e0c575f80fd5b611e1886828701611d95565b9497909650939450505050565b5f8060208385031215611e36575f80fd5b823567ffffffffffffffff811115611e4c575f80fd5b611e5885828601611d95565b90969095509350505050565b803563ffffffff81168114611c8d575f80fd5b5f8060408385031215611e88575f80fd5b611e9183611d72565b9150611e9f60208401611e64565b90509250929050565b5f815180845260208085019450602084015f5b83811015611eed57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611ebb565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152611f4760c0850182611ea8565b905060a083015184820360a0860152611f608282611ea8565b95945050505050565b602081525f610e2a6020830184611ef8565b5f805f60608486031215611f8d575f80fd5b8335925060208401359150611fa460408501611d72565b90509250925092565b5f60208284031215611fbd575f80fd5b610e2a82611e64565b5f805f60608486031215611fd8575f80fd5b611fe184611e64565b9250611fef60208501611d72565b9150611fa460408501611e64565b5f602080835283518060208501525f5b818110156120295785810183015185820160400152820161200d565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f805f60408486031215612079575f80fd5b833567ffffffffffffffff81111561208f575f80fd5b61209b86828701611c31565b9094509250611fa4905060208501611e64565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156120fe576120fe6120ae565b60405290565b803560ff81168114611c8d575f80fd5b5f82601f830112612123575f80fd5b8135602067ffffffffffffffff80831115612140576121406120ae565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715612183576121836120ae565b60405293845260208187018101949081019250878511156121a2575f80fd5b6020870191505b848210156121c9576121ba82611d72565b835291830191908301906121a9565b979650505050505050565b5f60c082840312156121e4575f80fd5b6121ec6120db565b90506121f782611c76565b815261220560208301612104565b602082015261221660408301612104565b604082015261222760608301612104565b6060820152608082013567ffffffffffffffff80821115612246575f80fd5b61225285838601612114565b608084015260a084013591508082111561226a575f80fd5b5061227784828501612114565b60a08301525092915050565b5f805f60608486031215612295575f80fd5b833567ffffffffffffffff8111156122ab575f80fd5b6122b7868287016121d4565b9660208601359650604090950135949350505050565b5f602082840312156122dd575f80fd5b610e2a82611d72565b818382375f9101908152919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112612354575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612391575f80fd5b83018035915067ffffffffffffffff8211156123ab575f80fd5b602001915036819003821315611c6f575f80fd5b5f602082840312156123cf575f80fd5b813567ffffffffffffffff8111156123e5575f80fd5b610e4d848285016121d4565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612354575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612354575f80fd5b5f60208284031215612465575f80fd5b610e2a82612104565b5f6020828403121561247e575f80fd5b610e2a82611c76565b5f61034436836121d4565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124c5575f80fd5b830160208101925035905067ffffffffffffffff8111156124e4575f80fd5b8060051b3603821315611c6f575f80fd5b8183525f60208085019450825f5b85811015611eed5773ffffffffffffffffffffffffffffffffffffffff61252983611d72565b1687529582019590820190600101612503565b60208082528181018390525f906040808401600586901b8501820187855b888110156126c8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c36030181126125bb575f80fd5b8b0163ffffffff6125cb82611e64565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612601575f80fd5b8589018890520167ffffffffffffffff61261a82611c76565b168786015261262a888201612104565b606060ff808316828901526126408a8501612104565b92506080818416818a0152612656838601612104565b935060a09250818416838a015261266f81860186612492565b60c08b8101529450915061268a9050610100890184836124f5565b92505061269981840184612492565b93509050838783030160e08801526126b28284836124f5565b978a01979650505092870192505060010161255a565b509098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a08301375f60a085830101525f60a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b5f8085851115612767575f80fd5b83861115612773575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156127c05780818660040360031b1b83161692505b505092915050565b80356020831015610344577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156127c05760089490940360031b84901b1690921692915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f611f606060830184611ef8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561034457610344612884565b5f60ff831680612901577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b5f60ff82168061292257612922612884565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156127c05760019490940360031b84901b169092169291505056fea264697066735822122049ae6e8c1120ac3b04c6e78fb5426f5903144b4cb03d43aa8492006a0cbef95864736f6c6343000816003360e060405234801562000010575f80fd5b5060405162005cb238038062005cb2833981016040819052620000339162000170565b82836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000071573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000979190620001ba565b3380620000bd57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c88162000109565b506001600160a01b0391821660805263ffffffff1660a05260c092909252600655600280546001600160a01b031916939091169290921790915550620001e6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016d575f80fd5b50565b5f805f806080858703121562000184575f80fd5b8451620001918162000158565b6020860151909450620001a48162000158565b6040860151606090960151949790965092505050565b5f60208284031215620001cb575f80fd5b815163ffffffff81168114620001df575f80fd5b9392505050565b60805160a05160c051615a7e620002345f395f81816121c00152612ffa01525f610e0f01525f81816107510152818161089401528181610a0f01528181610ff80152611cee0152615a7e5ff3fe60806040526004361061019c575f3560e01c80637620fd01116100dc578063d15b0d4911610087578063f0f4426011610062578063f0f442601461055b578063f2fde38b1461057a578063faaebd2114610599578063fd9be522146105c4575f80fd5b8063d15b0d49146104f1578063d80e9bd914610510578063ea69d69d1461053c575f80fd5b80639c33abf7116100b75780639c33abf714610487578063ab750e75146104b3578063c85f4b4e146104d2575f80fd5b80637620fd01146103d65780638da5cb5b146104325780638eb0bf301461045b575f80fd5b806320efd7221161014757806354fd4d501161012257806354fd4d5014610359578063594924da146103845780636750cd4c146103a3578063715018a6146103c2575f80fd5b806320efd722146102d15780633c782a52146102f05780634389e58f1461032c575f80fd5b80631881d94d116101775780631881d94d1461024b5780631fb5122514610266578063200175f7146102b0575f80fd5b806301ffc9a7146101a7578063052368ca146101db5780630e97289b146101fa575f80fd5b366101a357005b5f80fd5b3480156101b2575f80fd5b506101c66101c1366004614622565b6105e3565b60405190151581526020015b60405180910390f35b3480156101e6575f80fd5b506101c66101f5366004614661565b6106c7565b348015610205575f80fd5b506002546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b348015610256575f80fd5b5060026040516101d291906146b5565b348015610271575f80fd5b506102a261028036600461474f565b600360209081525f938452604080852082529284528284209052825290205481565b6040519081526020016101d2565b3480156102bb575f80fd5b506102cf6102ca366004614791565b6106e7565b005b3480156102dc575f80fd5b506102cf6102eb366004614817565b610892565b3480156102fb575f80fd5b506102a261030a366004614868565b600460209081525f938452604080852082529284528284209052825290205481565b348015610337575f80fd5b5061034b6103463660046148dc565b6109f8565b6040516101d29291906149c9565b348015610364575f80fd5b5060408051600a81525f60208201526002918101919091526060016101d2565b34801561038f575f80fd5b506102cf61039e3660046149ec565b610d8d565b3480156103ae575f80fd5b506101c66103bd366004614a39565b61105c565b3480156103cd575f80fd5b506102cf611066565b3480156103e1575f80fd5b5061040660075460065473ffffffffffffffffffffffffffffffffffffffff90911691565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d2565b34801561043d575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610226565b348015610466575f80fd5b5061047a610475366004614a52565b611079565b6040516101d29190614b52565b348015610492575f80fd5b506104a66104a1366004614b64565b6114bd565b6040516101d29190614b9d565b3480156104be575f80fd5b506102cf6104cd3660046149ec565b61155d565b3480156104dd575f80fd5b506102cf6104ec366004614baf565b6115e6565b3480156104fc575f80fd5b506102cf61050b366004614bee565b6117cd565b34801561051b575f80fd5b5061052f61052a3660046148dc565b61185b565b6040516101d29190614c05565b348015610547575f80fd5b5061047a610556366004614a52565b6119c4565b348015610566575f80fd5b506102cf610575366004614c1c565b611b7e565b348015610585575f80fd5b506102cf610594366004614c1c565b611bf9565b3480156105a4575f80fd5b506102a26105b3366004614c1c565b60056020525f908152604090205481565b3480156105cf575f80fd5b506102cf6105de366004614c37565b611c5c565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061067557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b806106c157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f6106dc6106d486614e6e565b858585611dcc565b90505b949350505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610738576040517f96830d1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107dc9190614e79565b73ffffffffffffffffffffffffffffffffffffffff1603610829576040517fb77f504400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610834838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610901576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156109f2573683838381811061091e5761091e614e94565b90506020028101906109309190614ec1565b90506109476109426020830183614a39565b611fac565b60016109596040830160208401614a39565b63ffffffff1603610999576109946109746020830183614a39565b866109826040850185614efd565b81019061098f9190614f5e565b611ff3565b6109e9565b6109a96040820160208301614a39565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610903565b50505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610a7c576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6080860135610aad610a946060890160408a01614c1c565b73ffffffffffffffffffffffffffffffffffffffff1690565b14610ae4576040517fa4884a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80610af188888861203c565b90925090505f80610b22610b0b60608c0160408d01614c1c565b610b1b60808d0160608e01614a39565b858a6120c1565b9092509050610b318284614fbd565b9250610b4060c08b018b614efd565b604051610b4e929190614fd0565b604051809103902060035f8c6040016020810190610b6c9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f90812090610ba460808e0160608f01614a39565b63ffffffff1681526020808201929092526040015f90812091610bc9908e018e614fdf565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f20819055505f610ce36040518060e001604052808d5f016020810190610c0f9190614fdf565b67ffffffffffffffff1681526020018d6060016020810190610c319190614a39565b63ffffffff1681526020018d6040016020810190610c4f9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff1681526020018d6020016020810190610c7d9190614a39565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610ca960c08f018f614efd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505091525061224b565b6002546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610d3e9084908e908e9060040161503f565b5f604051808303815f87803b158015610d55575f80fd5b505af1158015610d67573d5f803e3d5ffd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610dc7576040517f864d08b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001610dd385856122b0565b60ff1614610e0d576040517f7952a82f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610e3e85856122d1565b63ffffffff1614610e7b576040517f3e96df1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e8685856122f3565b90505f610e938686612304565b90505f610ea08787612313565b73ffffffffffffffffffffffffffffffffffffffff84165f90815260036020908152604080832063ffffffff87168452825280832067ffffffffffffffff851684529091529020549091508514610f23576040517f660e96ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610f2e8484611079565b9050610f53818989604051610f44929190614fd0565b60405180910390208888612335565b5f60405180606001604052808563ffffffff168152602001610f758b8b6124ca565b815267ffffffffffffffff858116602092830152604080517fa825d747000000000000000000000000000000000000000000000000000000008152845163ffffffff16600482015292840151602484015283015116604482015273ffffffffffffffffffffffffffffffffffffffff8781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b15801561103b575f80fd5b505af115801561104d573d5f803e3d5ffd5b50505050505050505050505050565b5f6106c1826124e2565b61106e612560565b6110775f6125b2565b565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88811685526001845286852092855291909252939091208054929391929091168061113057825473ffffffffffffffffffffffffffffffffffffffff16611132565b805b73ffffffffffffffffffffffffffffffffffffffff168452815474010000000000000000000000000000000000000000900460ff1661122257825474010000000000000000000000000000000000000000900460ff161561121d57826001018054806020026020016040519081016040528092919081815260200182805480156111f057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111c5575b50505050506080850152825474010000000000000000000000000000000000000000900460ff1660208501525b6112d6565b815474010000000000000000000000000000000000000000900460ff908116146112d657816001018054806020026020016040519081016040528092919081815260200182805480156112a957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161127e575b50505050506080850152815474010000000000000000000000000000000000000000900460ff1660208501525b81547501000000000000000000000000000000000000000000900460ff166113d35782547501000000000000000000000000000000000000000000900460ff16156113ce578260020180548060200260200160405190810160405280929190818152602001828054801561137e57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611353575b505050505060a0850152825460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114ab565b81547501000000000000000000000000000000000000000000900460ff908116146114ab578160020180548060200260200160405190810160405280929190818152602001828054801561145b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611430575b505050505060a0850152815460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114b484612626565b50505092915050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161151c576114f68385611079565b6040516020016115069190614b52565b6040516020818303038152906040529050611556565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff831660048201526024016109e0565b9392505050565b8060045f8686604051611571929190614fd0565b604080519182900390912082526020808301939093529081015f90812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a95258916115d891879087908790879061506e565b60405180910390a150505050565b6115ee612560565b5f5b8181101561178f573683838381811061160b5761160b614e94565b905060200281019061161d91906150b1565b905060ff61162e60208301836150e3565b61163f906040810190602001615115565b60ff1603611679576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff61168860208301836150e3565b611699906060810190604001615115565b60ff16036116d3576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f16116e360208301836150e3565b6116ec90614e6e565b612626565b5f6116ff60208301836150e3565b61170d906020810190614c1c565b73ffffffffffffffffffffffffffffffffffffffff160361175a576040517f76df55a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117865f61176b6020840184614a39565b61177860208501856150e3565b61178190614e6e565b612677565b506001016115f0565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f3482826040516117c19291906151da565b60405180910390a15050565b6117d5612560565b60065481111561181f576006546040517fb79d12630000000000000000000000000000000000000000000000000000000081526109e0918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f8061187a8686612a25565b90925090505f6118906060890160408a01614c1c565b90505f6118a360808a0160608b01614a39565b90505f6118b08383611079565b90505f6118df82856118c96118c48f61540c565b612c5b565b8e8060c001906118d99190614efd565b8a612d2f565b82516040517fc8f8dcd100000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063c8f8dcd1906119379087908a906004016154a7565b602060405180830381865afa158015611952573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197691906154d5565b6119809082614fbd565b90505f806119908686858d612efb565b909250905061199f8284614fbd565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8084165f90815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff7401000000000000000000000000000000000000000087048116828501527501000000000000000000000000000000000000000000870481168287015276010000000000000000000000000000000000000000000090960490951660608601529182018054845181840281018401909552808552929360808601939092830182828015611b0057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611ad5575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015611b6d57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611b42575b505050505081525050905092915050565b611b86612560565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f90602001611850565b611c01612560565b73ffffffffffffffffffffffffffffffffffffffff8116611c50576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b611c59816125b2565b50565b335f9081526005602052604090205480821115611caf576040517fb79d126300000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016109e0565b335f908152600560209081526040808320858503905580517fe1758bd800000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169263e1758bd892600480820193918290030181865afa158015611d48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190614e79565b9050611d7981858561303c565b6040805133815273ffffffffffffffffffffffffffffffffffffffff861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a6669883906060016115d8565b60208401515f9060ff1615611e80575f5b856020015160ff168160ff161015611e6957611e5486608001518260ff1681518110611e0b57611e0b614e94565b60200260200101518686865f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b611e61575f9150506106df565b600101611ddd565b50846040015160ff165f03611e80575060016106df565b60608501515f5b866040015160ff168160ff161015611f2d57611efe8760a001518260ff1681518110611eb557611eb5614e94565b60200260200101518787875f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b15611f255781611f0d816154ec565b9250508160ff165f03611f25576001925050506106df565b600101611e87565b505f9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611f86576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa773ffffffffffffffffffffffffffffffffffffffff8416838361306c565b505050565b611fb5816124e2565b611c59576040517f0ff03e5400000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526024016109e0565b611ffe828483612677565b6120088284611079565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e14282848360405161088593929190615526565b60605f805f61204b8686612a25565b90925090505f61207461206460608a0160408b01614c1c565b61047560808b0160608c01614a39565b80519091506120939061208d60608b0160408c01614c1c565b856130f9565b93505f806120a2838b86613227565b90925090506120b18287614fbd565b909a909950975050505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526007549192505f9182916121e89173ffffffffffffffffffffffffffffffffffffffff16907f0000000000000000000000000000000000000000000000000000000000000000908490876132ed565b915091506121f887878484613398565b9095509350841561223f5760075473ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604081208054879290612239908490614fbd565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a01519551939861229a986001989197919673ffffffffffffffffffffffffffffffffffffffff169501615560565b6040516020818303038152906040529050919050565b5f6122be6001828486615625565b6122c79161564c565b60f81c9392505050565b5f6122e06031602d8486615625565b6122e991615694565b60e01c9392505050565b5f611556612301848461340f565b90565b5f6122e0600d60098486615625565b5f612322600960018486615625565b61232b916156da565b60c01c9392505050565b61234184848484611dcc565b612377576040517f28ca4b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084015160ff161561241e575f5b846020015160ff168160ff16101561241c575f84815260046020908152604080832086845290915281206080870151805191929160ff85169081106123cd576123cd614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9055806001019050612386565b505b604084015160ff16156109f2575f5b846040015160ff168160ff1610156124c3575f848152600460209081526040808320868452909152812060a0870151805191929160ff851690811061247457612474614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f905580600101905061242d565b5050505050565b5f6124d9602d600d8486615625565b61155691615720565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805474010000000000000000000000000000000000000000900460ff16151580611556575054760100000000000000000000000000000000000000000000900460ff16151592915050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611077576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016109e0565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff161580156126405750606081015160ff16155b15611c59576040517f9b5f9f7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806126925750602081015160ff16155b156126d957608081015151156126d4576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758565b806020015160ff16816080015151141580612714575060026126fd600160ff61575c565b6127079190615775565b60ff16816020015160ff16115b1561274b576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758816080015161341e565b604081015160ff90811614806127735750604081015160ff16155b156127f95760a081015151156127b5576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16156127f4576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d0565b806040015160ff168160a00151511415806128345750600261281d600160ff61575c565b6128279190615775565b60ff16816040015160ff16115b1561286b576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16158061288c5750806040015160ff16816060015160ff16115b156128c3576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d08160a0015161341e565b73ffffffffffffffffffffffffffffffffffffffff8381165f90815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097167fffffffffffffffffffffff000000000000000000000000000000000000000000909116177401000000000000000000000000000000000000000060ff96871602177fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000968616969096027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16959095177601000000000000000000000000000000000000000000009490951693909302939093178255608084015180518594612a0193850192019061458f565b5060a08201518051612a1d91600284019160209091019061458f565b505050505050565b6060806002831015612a65576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b5f612a736002828688615625565b612a7c916157bb565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8201612c4457805f5b86831015612bd1575f612ac560018501858a8c615625565b612ace9161564c565b60f81c90505f819003612b0f576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b8160ff165f03612b2157809150612b5d565b8160ff168160ff1614612b5d57365f612b3c86868c8e615625565b91509150612b4d89898685856134b6565b9099509750859450919250829150505b60018401935f90612b7390600301868b8d615625565b612b7c916157bb565b60f01c90505f819003612bbe576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016109e0565b8060020161ffff16850194505050612aad565b828714612c0d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b6002871115612c3d57365f612c2485858b8d615625565b91509150612c3588888585856134b6565b909850965050505b5050612c52565b612c4f828787613629565b93505b50509250929050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d830152605182015260710161229a565b5f805f612d3b846138a4565b915091505f89604001518a60200151612d549190615801565b90505f5b8160ff168160ff161015612eed575f8b6020015160ff168260ff1610612dac5760a08c015160208d0151612d8c908461575c565b60ff1681518110612d9f57612d9f614e94565b6020026020010151612dce565b8b608001518260ff1681518110612dc557612dc5614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015612e3a578360ff16868281518110612e0157612e01614e94565b602002602001015160ff1603612e3257868181518110612e2357612e23614e94565b60200260200101519150612e3a565b600101612de2565b506040517ffdb9b0f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063fdb9b0f190612e95908f908f908f908f90889060040161581a565b602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed491906154d5565b612ede9088614fbd565b96505050806001019050612d58565b505050509695505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526007549192505f9182916130209173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086613b3e565b9150915061303087878484613398565b94509450505050610d84565b73ffffffffffffffffffffffffffffffffffffffff831661306157611fa78282613be5565b611fa7838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611fa7908490613ce7565b6040517fc015bb7d0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff85169063c015bb7d9061314f90869086906004016154a7565b6020604051808303815f875af115801561316b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061318f91906154d5565b905080156131d15773ffffffffffffffffffffffffffffffffffffffff84165f90815260056020526040812080548392906131cb908490614fbd565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff86168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b5f6060816132376118c48661540c565b90505f61324b6132468761540c565b613d86565b905060606132768861326289840160408b01614c1c565b8561327060c08c018c614efd565b8b613da3565b604051919650915061328e908490849060200161587b565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a00151836040516132da939291906158a9565b60405180910390a1505050935093915050565b5f6060863b80830361331257604080515f80825260208201909252925092505061338e565b5f805f8761ffff1667ffffffffffffffff81111561333257613332614c61565b6040519080825280601f01601f19166020018201604052801561335c576020820181803683370190505b5090505f80885160208a018c8f8ff191503d92508783111561337c578792505b828152825f602083013e909450925050505b9550959350505050565b5f808315806133a8575082516020115b156133b757505f905080610d84565b5f838060200190518101906133cc91906154d5565b905085156133dc57809150613405565b5f60065488116133ee576006546133f0565b875b90508082116133ff5781613401565b805b9350505b5094509492505050565b5f6124d9605160318486615625565b5f805b8251811015611fa7575f83828151811061343d5761343d614e94565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116134ac576040517fc0762a5d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101613421565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161355057865115613513578684846040516020016134ff93929190615905565b604051602081830303815290604052613549565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b965061361e565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016135e7578551156135aa5785848460405160200161359693929190615905565b6040516020818303038152906040526135e0565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b955061361e565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016109e0565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff85160161374e5760228214613690576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6136b06136a2602260028688615625565b6136ab91615720565b614072565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050611556565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff85160161386c576042821115806137895750606282115b156137c0576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6137d26136a2602260028688615625565b90505f6137e66136a2604260228789615625565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613819866042818a615625565b61382291615720565b60405160086020938403029190911c9250613853916001916011918391889183916031916002918b918b910161592b565b6040516020818303038152906040529350505050611556565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016109e0565b60608082515f036138b457915091565b5f6138be846140cb565b90508060ff1660010361396e5760408051600180825281830190925290816020015b60608152602001906001900390816138e057905050925083835f8151811061390a5761390a614e94565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506139428460036141ed565b825f8151811061395457613954614e94565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561398a5761398a614c61565b6040519080825280602002602001820160405280156139b3578160200160208202803683370190505b5091508060ff1667ffffffffffffffff8111156139d2576139d2614c61565b604051908082528060200260200182016040528015613a0557816020015b60608152602001906001900390816139f05790505b5092505f8060ff5b8651831015613ab5576001909201915f613a27888561426c565b6002949094019390505f613a3b89866141ed565b90508260ff1660ff03613a5057809250613aa6565b8260ff168160ff1614613aa6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f613a8e8b87846142eb565b9050613a9c8a8a8784614464565b5093909301929150815b5061ffff169290920191613a0d565b8183035f613ac48985846142eb565b9050613ad288888584614464565b5f5b8660ff168160ff161015613b3257878160ff1681518110613af757613af7614e94565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613ad4565b50505050505050915091565b5f6060853b808303613b6357604080515f808252602082019092529250925050610d84565b5f805f8761ffff1667ffffffffffffffff811115613b8357613b83614c61565b6040519080825280601f01601f191660200182016040528015613bad576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115613bcc578792505b828152825f602083013e90999098509650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216613c32576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114613c88576040519150601f19603f3d011682016040523d82523d5f602084013e613c8d565b606091505b5050905080611fa7576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016109e0565b5f8060205f8451602086015f885af180613d06576040513d5f823e3d81fd5b50505f513d91508115613d1d578060011415613d37565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016109e0565b60608160a001518260c0015160405160200161229a929190615a23565b5f60605f80613db1856138a4565b915091505f8a604001518b60200151613dca9190615801565b90508060ff1667ffffffffffffffff811115613de857613de8614c61565b604051908082528060200260200182016040528015613e11578160200160208202803683370190505b5093505f5b8160ff168160ff161015614063575f8c6020015160ff168260ff1610613e6a5760a08d015160208e0151613e4a908461575c565b60ff1681518110613e5d57613e5d614e94565b6020026020010151613e8c565b8c608001518260ff1681518110613e8357613e83614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015613ef8578360ff16868281518110613ebf57613ebf614e94565b602002602001015160ff1603613ef057868181518110613ee157613ee1614e94565b60200260200101519150613ef8565b600101613ea0565b508173ffffffffffffffffffffffffffffffffffffffff1663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b8152600401613f3a95949392919061581a565b6020604051808303815f875af1158015613f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7a91906154d5565b878460ff1681518110613f8f57613f8f614e94565b6020026020010181815250505f878460ff1681518110613fb157613fb1614e94565b6020026020010151111561405957868360ff1681518110613fd457613fd4614e94565b602002602001015160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546140279190614fbd565b92505081905550868360ff168151811061404357614043614e94565b6020026020010151886140569190614fbd565b97505b5050600101613e16565b50505050965096945050505050565b5f6fffffffffffffffffffffffffffffffff8211156140c7576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016109e0565b5090565b5f80805b83518210156141a9576001909101905f6140e9858461426c565b905060028301925060028161ffff161015614133576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b5f61413e86856141ed565b90508060ff1660ff0361417d576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b831661419a5760019485019460ff82161b831792505b5061ffff1691909101906140cf565b835182146141e6576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018390526024016109e0565b5050919050565b5f6141f9826001614fbd565b83511015614263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e64730000000000000000000000000060448201526064016109e0565b50016001015190565b5f614278826002614fbd565b835110156142e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e647300000000000000000000000060448201526064016109e0565b50016002015190565b6060816142f981601f614fbd565b1015614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b61436b8284614fbd565b845110156143d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b6060821580156143f35760405191505f82526020820160405261445b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561442c578051835260209283019201614414565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff036144a1576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144ad836001615801565b90505f5b8451811015612a1d575f8582815181106144cd576144cd614e94565b602002602001015190508060ff168360ff1603614542578682815181106144f6576144f6614e94565b60200260200101518460405160200161451092919061587b565b60405160208183030381529060405287838151811061453157614531614e94565b602002602001018190525050612a1d565b8060ff165f03614586578286838151811061455f5761455f614e94565b602002602001019060ff16908160ff16815250508387838151811061453157614531614e94565b506001016144b1565b828054828255905f5260205f20908101928215614607579160200282015b8281111561460757825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906145ad565b506140c79291505b808211156140c7575f815560010161460f565b5f60208284031215614632575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611556575f80fd5b5f805f8060808587031215614674575f80fd5b843567ffffffffffffffff81111561468a575f80fd5b850160c0818803121561469b575f80fd5b966020860135965060408601359560600135945092505050565b60208101600383106146ee577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b73ffffffffffffffffffffffffffffffffffffffff81168114611c59575f80fd5b8035614720816146f4565b919050565b803563ffffffff81168114614720575f80fd5b803567ffffffffffffffff81168114614720575f80fd5b5f805f60608486031215614761575f80fd5b833561476c816146f4565b925061477a60208501614725565b915061478860408501614738565b90509250925092565b5f805f606084860312156147a3575f80fd5b83356147ae816146f4565b925060208401356147be816146f4565b929592945050506040919091013590565b5f8083601f8401126147df575f80fd5b50813567ffffffffffffffff8111156147f6575f80fd5b6020830191508360208260051b8501011115614810575f80fd5b9250929050565b5f805f60408486031215614829575f80fd5b8335614834816146f4565b9250602084013567ffffffffffffffff81111561484f575f80fd5b61485b868287016147cf565b9497909650939450505050565b5f805f6060848603121561487a575f80fd5b83359250602084013591506040840135614893816146f4565b809150509250925092565b5f8083601f8401126148ae575f80fd5b50813567ffffffffffffffff8111156148c5575f80fd5b602083019150836020828501011115614810575f80fd5b5f805f80606085870312156148ef575f80fd5b843567ffffffffffffffff80821115614906575f80fd5b9086019060e08289031215614919575f80fd5b9094506020860135908082111561492e575f80fd5b5061493b8782880161489e565b90945092505060408501358015158114614953575f80fd5b939692955090935050565b5f5b83811015614978578181015183820152602001614960565b50505f910152565b5f815180845261499781602086016020860161495e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f6106df6060830184614980565b5f805f80606085870312156149ff575f80fd5b843567ffffffffffffffff811115614a15575f80fd5b614a218782880161489e565b90989097506020870135966040013595509350505050565b5f60208284031215614a49575f80fd5b61155682614725565b5f8060408385031215614a63575f80fd5b8235614a6e816146f4565b9150614a7c60208401614725565b90509250929050565b5f815180845260208085019450602084015f5b83811015614aca57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614a98565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152614b3060c0850182614a85565b905060a083015184820360a0860152614b498282614a85565b95945050505050565b602081525f6115566020830184614ad5565b5f805f60608486031215614b76575f80fd5b614b7f84614725565b92506020840135614b8f816146f4565b915061478860408501614725565b602081525f6115566020830184614980565b5f8060208385031215614bc0575f80fd5b823567ffffffffffffffff811115614bd6575f80fd5b614be2858286016147cf565b90969095509350505050565b5f60208284031215614bfe575f80fd5b5035919050565b8151815260208083015190820152604081016106c1565b5f60208284031215614c2c575f80fd5b8135611556816146f4565b5f8060408385031215614c48575f80fd5b8235614c53816146f4565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b60405290565b60405160e0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614d2157614d21614c61565b604052919050565b803560ff81168114614720575f80fd5b5f82601f830112614d48575f80fd5b8135602067ffffffffffffffff821115614d6457614d64614c61565b8160051b614d73828201614cda565b9283528481018201928281019087851115614d8c575f80fd5b83870192505b84831015614db4578235614da5816146f4565b82529183019190830190614d92565b979650505050505050565b5f60c08284031215614dcf575f80fd5b614dd7614c8e565b9050614de282614715565b8152614df060208301614d29565b6020820152614e0160408301614d29565b6040820152614e1260608301614d29565b6060820152608082013567ffffffffffffffff80821115614e31575f80fd5b614e3d85838601614d39565b608084015260a0840135915080821115614e55575f80fd5b50614e6284828501614d39565b60a08301525092915050565b5f6106c13683614dbf565b5f60208284031215614e89575f80fd5b8151611556816146f4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614ef3575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f30575f80fd5b83018035915067ffffffffffffffff821115614f4a575f80fd5b602001915036819003821315614810575f80fd5b5f60208284031215614f6e575f80fd5b813567ffffffffffffffff811115614f84575f80fd5b6106df84828501614dbf565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156106c1576106c1614f90565b818382375f9101908152919050565b5f60208284031215614fef575f80fd5b61155682614738565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f6150516040830186614980565b8281036020840152615064818587614ff8565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f61509d608083018688614ff8565b604083019490945250606001529392505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614ef3575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614ef3575f80fd5b5f60208284031215615125575f80fd5b61155682614d29565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615161575f80fd5b830160208101925035905067ffffffffffffffff811115615180575f80fd5b8060051b3603821315614810575f80fd5b8183525f60208085019450825f5b85811015614aca5781356151b2816146f4565b73ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161519f565b60208082528181018390525f906040808401600586901b8501820187855b88811015615374577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112615259575f80fd5b8b0163ffffffff61526982614725565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4182360301811261529f575f80fd5b8589018890520180356152b1816146f4565b73ffffffffffffffffffffffffffffffffffffffff16858801526152d6818901614d29565b606060ff808316828901526152ec8a8501614d29565b92506080818416818a0152615302838601614d29565b935060a09250818416838a015261531b8186018661512e565b60c08b81015294509150615336905061010089018483615191565b9250506153458184018461512e565b93509050838783030160e088015261535e828483615191565b978a0197965050509287019250506001016151f8565b509098975050505050505050565b5f82601f830112615391575f80fd5b813567ffffffffffffffff8111156153ab576153ab614c61565b6153dc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614cda565b8181528460208386010111156153f0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0823603121561541c575f80fd5b615424614cb7565b61542d83614738565b815261543b60208401614725565b602082015261544c60408401614715565b604082015261545d60608401614725565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff81111561548f575f80fd5b61549b36828601615382565b60c08301525092915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6106df6040830184614980565b5f602082840312156154e5575f80fd5b5051919050565b5f60ff8216806154fe576154fe614f90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6106dc6060830184614ad5565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d84015250846031830152836051830152825161561181607185016020870161495e565b919091016071019998505050505050505050565b5f8085851115615633575f80fd5b8386111561563f575f80fd5b5050820193919092039150565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561568c5780818660010360031b1b83161692505b505092915050565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561568c5760049490940360031b84901b1690921692915050565b7fffffffffffffffff000000000000000000000000000000000000000000000000813581811691600885101561568c5760089490940360031b84901b1690921692915050565b803560208310156106c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b60ff82811682821603908111156106c1576106c1614f90565b5f60ff8316806157ac577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561568c5760029490940360031b84901b1690921692915050565b60ff81811683821601908111156106c1576106c1614f90565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f6158486080830187614980565b828103604084015261585b818688614ff8565b9050828103606084015261586f8185614980565b98975050505050505050565b5f835161588c81846020880161495e565b8351908301906158a081836020880161495e565b01949350505050565b606081525f6158bb6060830186614a85565b602083820360208501526158cf8287614a85565b8481036040860152855180825260208088019450909101905f5b81811015615374578451835293830193918301916001016158e9565b5f845161591681846020890161495e565b8201838582375f930192835250909392505050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b16601784015250615a0b601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b50602881019190915260480198975050505050505050565b8281525f8251615a3a81602085016020870161495e565b91909101602001939250505056fea2646970667358221220bea5f362b07accaf075edb98d71a1b4a7df6e2ebc2aacf15c6426cab5ad7691964736f6c63430008160033608060405234801562000010575f80fd5b5060405162003af938038062003af983398101604081905262000033916200045e565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b038581169190911790915584908490612ee090859085908216156200008d576200008b5f8362000220565b505b5f5b8551811015620000f157620000e77f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d357620000d36200050c565b60200260200101516200022060201b60201c565b506001016200008f565b505f5b81518110156200014257620001387fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d357620000d36200050c565b50600101620000f4565b505060016004908155600680546001600160a01b0319166001600160a01b038d169081179091556040805163416ecebf60e01b8152905191965063416ecebf95508083019450602093509091908290030181865afa158015620001a7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001cd919062000520565b6006805463ffffffff92909216600160a01b0263ffffffff60a01b199092169190911790555050600780546001600160a01b039094166001600160a01b0319909416939093179092555062000586915050565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156200027157505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620002be57600180546015906200029990600160a81b90046001600160401b03166200054c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b620002ca8383620002d6565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1662000379575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003303390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620002d0565b505f620002d0565b80516001600160a01b038116811462000398575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620003c1575f80fd5b815160206001600160401b0380831115620003e057620003e06200039d565b8260051b604051601f19603f830116810181811084821117156200040857620004086200039d565b604052938452602081870181019490810192508785111562000428575f80fd5b6020870191505b848210156200045357620004438262000381565b835291830191908301906200042f565b979650505050505050565b5f805f805f8060c0878903121562000474575f80fd5b6200047f8762000381565b95506200048f6020880162000381565b60408801519095506001600160401b0380821115620004ac575f80fd5b620004ba8a838b01620003b1565b9550620004ca60608a0162000381565b9450620004da60808a0162000381565b935060a0890151915080821115620004f0575f80fd5b50620004ff89828a01620003b1565b9150509295509295509295565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121562000531575f80fd5b815163ffffffff8116811462000545575f80fd5b9392505050565b5f6001600160401b038281166002600160401b031981016200057c57634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b61356580620005945f395ff3fe608060405260043610610242575f3560e01c8063724e78da11610131578063c358de0a116100ac578063cd88b9031161007c578063d2ae210411610062578063d2ae2104146107ae578063d547741f14610800578063e395eb5c1461081f575f80fd5b8063cd88b9031461077c578063cfc325701461079b575f80fd5b8063c358de0a146106ee578063c416aa511461070d578063c7b2370b1461073e578063c8f8dcd11461075d575f80fd5b806391d1485411610101578063a217fddf116100e7578063a217fddf14610690578063c015bb7d146106a3578063c2803b2c146106c2575f80fd5b806391d14854146105675780639e944965146105b6575f80fd5b8063724e78da146104f6578063741bef1a146105155780637cd44734146105415780638624ba0714610554575f80fd5b80633146646a116101c1578063475b6d9e116101915780635e280f11116101775780635e280f1114610467578063709eb664146104b8578063717e8a42146104d7575f80fd5b8063475b6d9e1461043d5780635c975abb14610450575f80fd5b80633146646a146103cd57806336568abe146103ec5780633927c0751461040b5780633d85ac331461041e575f80fd5b806316c38b3c1161021657806326e67a37116101fc57806326e67a37146103635780632de113761461038f5780632f2ff15d146103ae575f80fd5b806316c38b3c14610308578063248a9ca314610327575f80fd5b8062bf2e801461024657806301e336671461029957806301ffc9a7146102ba5780631095b6d7146102e9575b5f80fd5b348015610251575f80fd5b50600154610281907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b3480156102a4575f80fd5b506102b86102b336600461267b565b610868565b005b3480156102c5575f80fd5b506102d96102d43660046126b4565b6108a3565b6040519015158152602001610290565b3480156102f4575f80fd5b506102b861030336600461267b565b61093b565b348015610313575f80fd5b506102b86103223660046126f3565b610ac4565b348015610332575f80fd5b50610355610341366004612712565b5f9081526020819052604090206001015490565b604051908152602001610290565b34801561036e575f80fd5b5061038261037d36600461273c565b610ae8565b6040516102909190612755565b34801561039a575f80fd5b506102d96103a936600461279b565b610b6b565b3480156103b9575f80fd5b506102b86103c83660046127b4565b610c4c565b3480156103d8575f80fd5b506102b86103e7366004612823565b610c70565b3480156103f7575f80fd5b506102b86104063660046127b4565b610d33565b6102b86104193660046128c2565b610d65565b348015610429575f80fd5b506102b8610438366004612a3b565b610e53565b6102b861044b366004612b50565b611035565b34801561045b575f80fd5b5060015460ff166102d9565b348015610472575f80fd5b506006546104939073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610290565b3480156104c3575f80fd5b506103556104d2366004612bca565b611089565b3480156104e2575f80fd5b506103556104f1366004612bca565b6111e5565b348015610501575f80fd5b506102b861051036600461279b565b611365565b348015610520575f80fd5b506002546104939073ffffffffffffffffffffffffffffffffffffffff1681565b6102b861054f366004612c34565b611402565b6102b8610562366004612cf0565b6114e1565b348015610572575f80fd5b506102d96105813660046127b4565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156105c1575f80fd5b506106436105d036600461273c565b60056020525f90815260409020805460019091015467ffffffffffffffff8083169261ffff68010000000000000000820416926fffffffffffffffffffffffffffffffff6a0100000000000000000000909204821692918116917001000000000000000000000000000000009091041685565b6040805167ffffffffffffffff968716815261ffff90951660208601526fffffffffffffffffffffffffffffffff938416908501529116606083015291909116608082015260a001610290565b34801561069b575f80fd5b506103555f81565b3480156106ae575f80fd5b506103556106bd366004612d5e565b611616565b3480156106cd575f80fd5b506007546104939073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f9575f80fd5b506102b8610708366004612dad565b6117a3565b348015610718575f80fd5b5060015461049390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b348015610749575f80fd5b506102b861075836600461279b565b611851565b348015610768575f80fd5b50610355610777366004612d5e565b6118f5565b348015610787575f80fd5b506102b8610796366004612dc6565b611a56565b6102b86107a9366004612e45565b611a9f565b3480156107b9575f80fd5b506001546107e7907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610290565b34801561080b575f80fd5b506102b861081a3660046127b4565b611b7d565b34801561082a575f80fd5b506006546108539074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610290565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561089281611ba1565b61089d848484611bae565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061093557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561096581611ba1565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff166109e2576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610a4f575f80fd5b505af1158015610a61573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b5f610ace81611ba1565b8115610ae057610adc611be3565b5050565b610adc611c62565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610b5f57602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b305790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610bbe57505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610c33575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610c4057506001919050565b505f919050565b919050565b5f82815260208190526040902060010154610c6681611ba1565b61089d8383611cb9565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610c9a81611ba1565b610ca2611d89565b6007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610cfc90879087908790600401612ec6565b5f604051808303815f87803b158015610d13575f80fd5b505af1158015610d25573d5f803e3d5ffd5b5050505061089d6001600455565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610d8f81611ba1565b610d97611d89565b610db788610da58686611dcc565b610daf8787611dee565b8a8a8a611e06565b506007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610e1290879087908790600401612ec6565b5f604051808303815f87803b158015610e29575f80fd5b505af1158015610e3b573d5f803e3d5ffd5b50505050610e496001600455565b5050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610e7d81611ba1565b5f5b8251811015610ff9575f838281518110610e9b57610e9b612ee9565b6020908102919091018101516040805160a080820183528385015167ffffffffffffffff908116835260608086015161ffff9081168589019081526080808901516fffffffffffffffffffffffffffffffff908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff165f9081526005909a5296909820945185549851945188166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff9590921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090991690841617979097179290921695909517825551600191820180549351909516700100000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931693169290921717909155919091019050610e7f565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc53826040516110299190612f16565b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561105f81611ba1565b611067611d89565b611075878787878787611e06565b506110806001600455565b50505050505050565b5f8461109481610b6b565b6110ca576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110d2611f73565b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a1660208084018290528a831684860152606084018a905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f434ee01600000000000000000000000000000000000000000000000000000000815292936101009091049091169163434ee0169161119a918591908a908a90600401612fbc565b602060405180830381865afa1580156111b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d99190613079565b98975050505050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61121081611ba1565b8561121a81610b6b565b611250576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8b1660208084018290528b831684860152606084018b905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f566ef76200000000000000000000000000000000000000000000000000000000815292936101009091049091169163566ef76291611318918591908b908b90600401612fbc565b6020604051808303815f875af1158015611334573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113589190613079565b9998505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561138f81611ba1565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561142c81611ba1565b611434611d89565b6006546040517f91d20fa100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906391d20fa1908490349061149c908f908f908f908f908f908f908f908f90600401613090565b5f604051808303818589803b1580156114b3575f80fd5b5088f11580156114c5573d5f803e3d5ffd5b5050505050506114d56001600455565b50505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561150b81611ba1565b611513611d89565b6006545f9061155190602085019074010000000000000000000000000000000000000000900463ffffffff16611549828761279b565b898989611e06565b90505f61155e8234613128565b60065490915073ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08601358360208801611593818a61279b565b60808a01356115a560a08c018c61313b565b6115b260c08e018e61313b565b6040518a63ffffffff1660e01b81526004016115d497969594939291906131d6565b5f604051808303818589803b1580156115eb575f80fd5b5088f11580156115fd573d5f803e3d5ffd5b505050505050505061160f6001600455565b5050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61164181611ba1565b8461164b81610b6b565b611681576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528881166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f65003784000000000000000000000000000000000000000000000000000000008152929361010090910490911691636500378491611758918591908b908b90600401613239565b6020604051808303815f875af1158015611774573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117989190613079565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756117cd81611ba1565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561187b81611ba1565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611029565b5f8361190081610b6b565b611936576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528781166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f337c7a9e00000000000000000000000000000000000000000000000000000000815292936101009091049091169163337c7a9e91611a0d918591908a908a90600401613239565b602060405180830381865afa158015611a28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4c9190613079565b9695505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a8081611ba1565b63ffffffff84165f90815260036020526040902061160f9084846125a0565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611ac981611ba1565b611ad1611d89565b60065473ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08401353460208601611b03818861279b565b6080880135611b1560a08a018a61313b565b611b2260c08c018c61313b565b6040518a63ffffffff1660e01b8152600401611b4497969594939291906131d6565b5f604051808303818589803b158015611b5b575f80fd5b5088f1158015611b6d573d5f803e3d5ffd5b505050505050610adc6001600455565b5f82815260208190526040902060010154611b9781611ba1565b61089d8383611fb2565b611bab8133612077565b50565b73ffffffffffffffffffffffffffffffffffffffff8316611bd857611bd38282612101565b505050565b611bd3838383612203565b611beb611f73565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611c6a612271565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611c38565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015611d1657505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15611d755760018054601590611d4e907501000000000000000000000000000000000000000000900467ffffffffffffffff166132e9565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836122ad565b5060019392505050565b600260045403611dc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600455565b5f611ddb6031602d848661330f565b611de491613336565b60e01c9392505050565b5f611dff611dfc84846123a6565b90565b9392505050565b5f808367ffffffffffffffff811115611e2157611e2161294f565b604051908082528060200260200182016040528015611e4a578160200160208202803683370190505b5090505f5b84811015611f26575f868683818110611e6a57611e6a612ee9565b905060400201803603810190611e80919061337e565b90505f815f015173ffffffffffffffffffffffffffffffffffffffff16826020015187906040515f60405180830381858888f193505050503d805f8114611ee2576040519150601f19603f3d011682016040523d82523d5f602084013e611ee7565b606091505b5050905080848481518110611efe57611efe612ee9565b911515602092830291909101820152820151611f1a90866133d3565b94505050600101611e4f565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c3468888888888886604051611f6096959493929190613422565b60405180910390a1509695505050505050565b60015460ff1615611fb0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561200e57505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b1561206d5760018054601590612046907501000000000000000000000000000000000000000000900467ffffffffffffffff166134b2565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836123be565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610adc576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661214e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146121a4576040519150601f19603f3d011682016040523d82523d5f602084013e6121a9565b606091505b5050905080611bd3576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016120f8565b73ffffffffffffffffffffffffffffffffffffffff8216612250576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bd373ffffffffffffffffffffffffffffffffffffffff84168383612477565b60015460ff16611fb0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561233d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610935565b505f610935565b5f6123b560516031848661330f565b611dff916134f3565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610935565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251611bd393879390925f9283929183919082885af180612520576040513d5f823e3d81fd5b50505f513d91508115612537578060011415612551565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561089d576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016120f8565b828054828255905f5260205f2090601f01602090048101928215612634579160200282015f5b8382111561260657833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026125c6565b80156126325782816101000a81549060ff02191690556001016020815f01049283019260010302612606565b505b50612640929150612644565b5090565b5b80821115612640575f8155600101612645565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f805f6060848603121561268d575f80fd5b61269684612658565b92506126a460208501612658565b9150604084013590509250925092565b5f602082840312156126c4575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611dff575f80fd5b5f60208284031215612703575f80fd5b81358015158114611dff575f80fd5b5f60208284031215612722575f80fd5b5035919050565b803563ffffffff81168114610c47575f80fd5b5f6020828403121561274c575f80fd5b611dff82612729565b602080825282518282018190525f9190848201906040850190845b8181101561278f57835160ff1683529284019291840191600101612770565b50909695505050505050565b5f602082840312156127ab575f80fd5b611dff82612658565b5f80604083850312156127c5575f80fd5b823591506127d560208401612658565b90509250929050565b5f8083601f8401126127ee575f80fd5b50813567ffffffffffffffff811115612805575f80fd5b60208301915083602082850101111561281c575f80fd5b9250929050565b5f805f60408486031215612835575f80fd5b833567ffffffffffffffff81111561284b575f80fd5b612857868287016127de565b909790965060209590950135949350505050565b5f6060828403121561287b575f80fd5b50919050565b5f8083601f840112612891575f80fd5b50813567ffffffffffffffff8111156128a8575f80fd5b6020830191508360208260061b850101111561281c575f80fd5b5f805f805f805f60e0888a0312156128d8575f80fd5b6128e2898961286b565b9650606088013567ffffffffffffffff808211156128fe575f80fd5b61290a8b838c01612881565b909850965060808a0135955060a08a0135915080821115612929575f80fd5b506129368a828b016127de565b989b979a5095989497959660c090950135949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff8111828210171561299f5761299f61294f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156129ec576129ec61294f565b604052919050565b803567ffffffffffffffff81168114610c47575f80fd5b803561ffff81168114610c47575f80fd5b80356fffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f6020808385031215612a4c575f80fd5b823567ffffffffffffffff80821115612a63575f80fd5b818501915085601f830112612a76575f80fd5b813581811115612a8857612a8861294f565b612a96848260051b016129a5565b818152848101925060c0918202840185019188831115612ab4575f80fd5b938501935b82851015612b445780858a031215612acf575f80fd5b612ad761297c565b612ae086612729565b8152612aed8787016129f4565b878201526040612afe8188016129f4565b908201526060612b0f878201612a0b565b908201526080612b20878201612a1c565b9082015260a0612b31878201612a1c565b9082015284529384019392850192612ab9565b50979650505050505050565b5f805f805f8060e08789031215612b65575f80fd5b612b6f888861286b565b9550612b7d60608801612729565b9450612b8b60808801612658565b935060a087013567ffffffffffffffff811115612ba6575f80fd5b612bb289828a01612881565b979a969950949794969560c090950135949350505050565b5f805f805f60808688031215612bde575f80fd5b612be786612729565b9450612bf560208701612658565b935060408601359250606086013567ffffffffffffffff811115612c17575f80fd5b612c23888289016127de565b969995985093965092949392505050565b5f805f805f805f805f60e08a8c031215612c4c575f80fd5b612c558a612658565b9850612c6360208b01612658565b975060408a01359650612c7860608b01612a0b565b955060808a013567ffffffffffffffff80821115612c94575f80fd5b612ca08d838e016127de565b909750955060a08c0135915080821115612cb8575f80fd5b50612cc58c828d016127de565b9a9d999c50979a9699959894979660c00135949350505050565b5f610100828403121561287b575f80fd5b5f805f8060608587031215612d03575f80fd5b843567ffffffffffffffff80821115612d1a575f80fd5b612d2688838901612881565b9096509450602087013593506040870135915080821115612d45575f80fd5b50612d5287828801612cdf565b91505092959194509250565b5f805f60408486031215612d70575f80fd5b612d7984612658565b9250602084013567ffffffffffffffff811115612d94575f80fd5b612da0868287016127de565b9497909650939450505050565b5f60208284031215612dbd575f80fd5b611dff82612a0b565b5f805f60408486031215612dd8575f80fd5b612de184612729565b9250602084013567ffffffffffffffff80821115612dfd575f80fd5b818601915086601f830112612e10575f80fd5b813581811115612e1e575f80fd5b8760208260051b8501011115612e32575f80fd5b6020830194508093505050509250925092565b5f60208284031215612e55575f80fd5b813567ffffffffffffffff811115612e6b575f80fd5b612e7784828501612cdf565b949350505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f612ed9604083018587612e7f565b9050826020830152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f919060409081850190868401855b82811015612faf578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c09093019290850190600101612f32565b5091979650505050505050565b845173ffffffffffffffffffffffffffffffffffffffff908116825260208087015163ffffffff1690830152604080870151909116818301526060808701519083015260808087015161ffff90811682850152865467ffffffffffffffff80821660a08701529381901c90911660c085015260501c6fffffffffffffffffffffffffffffffff90811660e08501526001870154908116610100850152901c166101208201525f610160806101408401526117988184018587612e7f565b5f60208284031215613089575f80fd5b5051919050565b5f73ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525087604083015261ffff8716606083015260c060808301526130d960c083018688612e7f565b82810360a08401526130ec818587612e7f565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610935576109356130fb565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261316e575f80fd5b83018035915067ffffffffffffffff821115613188575f80fd5b60200191503681900382131561281c575f80fd5b63ffffffff6131aa82612729565b1682526020810135602083015267ffffffffffffffff6131cc604083016129f4565b1660408301525050565b6131e0818961319c565b73ffffffffffffffffffffffffffffffffffffffff8716606082015285608082015260e060a08201525f61321860e083018688612e7f565b82810360c084015261322b818587612e7f565b9a9950505050505050505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff8088511684528060208901511660208501525061ffff60408801511660408401526132d56060840187805467ffffffffffffffff808216845261ffff8260401c1660208501526fffffffffffffffffffffffffffffffff808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b806101008401526117988184018587612e7f565b5f67ffffffffffffffff808316818103613305576133056130fb565b6001019392505050565b5f808585111561331d575f80fd5b83861115613329575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156133765780818660040360031b1b83161692505b505092915050565b5f6040828403121561338e575f80fd5b6040516040810181811067ffffffffffffffff821117156133b1576133b161294f565b6040526133bd83612658565b8152602083013560208201528091505092915050565b80820180821115610935576109356130fb565b5f815180845260208085019450602084015f5b838110156134175781511515875295820195908201906001016133f9565b509495945050505050565b5f60e08201613431838a61319c565b63ffffffff8816606084015273ffffffffffffffffffffffffffffffffffffffff878116608085015260e060a085015290859052859061010084015f5b8781101561349f578261348085612658565b168252602084810135908301526040938401939091019060010161346e565b5084810360c08601526130ec81876133e6565b5f67ffffffffffffffff8216806134cb576134cb6130fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b80356020831015610935577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b169291505056fea2646970667358221220bf4067662d56dc81125eda238718adb88046662d26b0b352f03d651c8af9702b64736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b5038038062001b508339810160408190526200003391620000cf565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000080565b5063ffffffff1660a052670de0b6b3a7640000608052620000fb565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215620000e0575f80fd5b815163ffffffff81168114620000f4575f80fd5b9392505050565b60805160a051611a2c620001245f395f818161023a01526102ee01525f61083d0152611a2c5ff3fe608060405260043610610096575f3560e01c8063566ef76211610066578063715018a61161004c578063715018a6146101715780638da5cb5b14610185578063f2fde38b146101b8575f80fd5b8063566ef762146101335780636500378414610152575f80fd5b806301e33667146100a1578063337c7a9e146100c2578063434ee016146100f457806354fd4d5014610113575f80fd5b3661009d57005b5f80fd5b3480156100ac575f80fd5b506100c06100bb366004611549565b6101d7565b005b3480156100cd575f80fd5b506100e16100dc3660046115dd565b6101ef565b6040519081526020015b60405180910390f35b3480156100ff575f80fd5b506100e161010e366004611644565b610408565b34801561011e575f80fd5b506040805160018082526020820152016100eb565b34801561013e575f80fd5b506100e161014d366004611644565b61060a565b34801561015d575f80fd5b506100e161016c3660046115dd565b610620565b34801561017c575f80fd5b506100c061062d565b348015610190575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100eb565b3480156101c3575f80fd5b506100c06101d236600461168d565b610640565b6101df6106a3565b6101ea8383836106f5565b505050565b5f6101fd60208501856116ad565b67ffffffffffffffff165f0361026c576040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024015b60405180910390fd5b5f80806102a960018261028260208b018b6116ad565b61029260a08c0160808d016116ad565b6102a260808d0160608e016116f1565b8b8b610725565b919450925090505f8080806102c160208d018d61168d565b6040517f88a4124c00000000000000000000000000000000000000000000000000000000815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152871660248201526044810188905273ffffffffffffffffffffffffffffffffffffffff91909116906388a4124c90606401608060405180830381865afa158015610360573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610384919061170c565b929650909450925090506103ce846103a260408e0160208f0161175e565b8e60400160208101906103b5919061175e565b8e60400160208101906103c891906116f1565b856107b5565b97506103ee8784848f60400160208101906103e9919061175e565b6108ab565b6103f890896117ac565b9c9b505050505050505050505050565b5f61041660208501856116ad565b67ffffffffffffffff165f036104715761043660408601602087016117c5565b6040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610263565b5f806104c38161048f61048a60408b0160208c016117c5565b505f90565b61049c60208a018a6116ad565b6104ac60a08b0160808c016116ad565b6104bc60808c0160608d016116f1565b8a8a610725565b5090925090505f8080806104da60208c018c61168d565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61050560408e0160208f016117c5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff91909116600482015260608e0135602482015260448101889052606401608060405180830381865afa15801561056e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610592919061170c565b929650909450925090506105d6846105b060408d0160208e0161175e565b8d60800160208101906105c3919061175e565b8d60400160208101906103c891906116f1565b96506105f18684848e60800160208101906103e9919061175e565b6105fb90886117ac565b9b9a5050505050505050505050565b5f61061785858585610408565b95945050505050565b5f610617858585856101ef565b6106356106a3565b61063e5f610911565b565b6106486106a3565b73ffffffffffffffffffffffffffffffffffffffff8116610697576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610263565b6106a081610911565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461063e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610263565b73ffffffffffffffffffffffffffffffffffffffff831661071a576101ea8282610985565b6101ea838383610a87565b5f805f8061073686868d8d8b610af5565b805160608201516080830151919650935090915061075e9067ffffffffffffffff8a166117e8565b60208201516107779067ffffffffffffffff8c166117ac565b61078191906117ac565b92508060400151156107a757606461079a8460666117e8565b6107a491906117ff565b92505b509750975097945050505050565b5f8061ffff8616156107c757856107c9565b845b90505f6127106107dd61ffff84168a6117e8565b6107e791906117ff565b90506fffffffffffffffffffffffffffffffff8416158061081857506fffffffffffffffffffffffffffffffff8516155b156108265791506106179050565b5f88856fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000886fffffffffffffffffffffffffffffffff1661087991906117e8565b61088391906117ff565b61088d91906117ac565b905081811161089c578161089e565b805b9998505050505050505050565b5f8415610909576127108261ffff16846fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff16886108eb91906117e8565b6108f591906117ff565b6108ff91906117e8565b61061791906117ff565b949350505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166109d2576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610a28576040519150601f19603f3d011682016040523d82523d5f602084013e610a2d565b606091505b50509050806101ea576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610263565b73ffffffffffffffffffffffffffffffffffffffff8216610ad4576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101ea73ffffffffffffffffffffffffffffffffffffffff8416838361110f565b610b2a6040518060a001604052805f81526020015f81526020015f151581526020015f63ffffffff1681526020015f81525090565b5f859003610b63576040517e575ea100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80805b87831015610fbc575f368180610b7e8d8d8961119c565b9950919550935091508690507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff851601610ca6578a15610bf1576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610bfd85856111f1565b915091508b8015610c1f57505f816fffffffffffffffffffffffffffffffff16115b15610c5b576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff87166004820152602401610263565b806fffffffffffffffffffffffffffffffff168a5f01818151610c7e91906117ac565b905250610c9d6fffffffffffffffffffffffffffffffff8316896117ac565b97505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff851601610d48578a15610d0d576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f610d18848461126c565b509050806fffffffffffffffffffffffffffffffff16895f01818151610d3e91906117ac565b905250610fb39050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff851601610e75578915610daf576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610dbb85856112c1565b9250925050816fffffffffffffffffffffffffffffffff165f03610e0b576040517fa169d0e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806fffffffffffffffffffffffffffffffff168a5f01818151610e2e91906117ac565b90525060208a0180516fffffffffffffffffffffffffffffffff84169190610e579083906117ac565b90525060808a01805190610e6a82611837565b815250505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60ff851601610eab5760016040890152610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff851601610f7c578a610f11576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f805f610f1e868661134b565b925092509250806fffffffffffffffffffffffffffffffff168b5f01818151610f4791906117ac565b905250610f666fffffffffffffffffffffffffffffffff84168a6117ac565b9850610f72828961186e565b9750505050610fb3565b6040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b50505050610b67565b828814610ff8576040517f990776ea00000000000000000000000000000000000000000000000000000000815260048101849052602401610263565b83516fffffffffffffffffffffffffffffffff861610156110625783516040517e84ce0200000000000000000000000000000000000000000000000000000000815260048101919091526fffffffffffffffffffffffffffffffff86166024820152604401610263565b815f0361109b576040517fe5eb8f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8680156110ac575063ffffffff8116155b156110e3576040517f6cc33f0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81846020018181516110f591906117ac565b90525063ffffffff16606084015250909695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526101ea9084906113cc565b5f368160018401816111af888884611471565b6002929092019190506111c3888884611497565b94506001820161ffff821683016111dc81838b8d611892565b979b909a50969850505061ffff160193505050565b5f8060108314801590611205575060208314155b1561123c576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124784845f6114bb565b915060208314611257575f611263565b611263848460106114bb565b90509250929050565b5f80603083146112a8576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112b384845f6114bb565b9150611263848460106114e1565b5f8080601284148015906112d6575060228414155b1561130d576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61131885855f611471565b9250611326858560026114bb565b915060228414611336575f611342565b611342858560126114bb565b90509250925092565b5f808060148414801590611360575060248414155b15611397576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113a285855f6114bb565b92506113b0858560106114fb565b9150602484146113c0575f611342565b611342858560146114bb565b5f8060205f8451602086015f885af1806113eb576040513d5f823e3d81fd5b50505f513d9150811561140257806001141561141c565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561146b576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610263565b50505050565b5f6002820161148281848688611892565b61148b916118b9565b60f01c95945050505050565b5f8383838181106114aa576114aa611901565b919091013560f81c95945050505050565b5f601082016114cc81848688611892565b6114d59161192e565b60801c95945050505050565b5f602082016114f281848688611892565b61061791611974565b5f6004820161150c81848688611892565b611515916119b0565b60e01c95945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611544575f80fd5b919050565b5f805f6060848603121561155b575f80fd5b61156484611521565b925061157260208501611521565b9150604084013590509250925092565b5f60a08284031215611592575f80fd5b50919050565b5f8083601f8401126115a8575f80fd5b50813567ffffffffffffffff8111156115bf575f80fd5b6020830191508360208285010111156115d6575f80fd5b9250929050565b5f805f808486036101208112156115f2575f80fd5b60608112156115ff575f80fd5b508493506116108660608701611582565b925061010085013567ffffffffffffffff81111561162c575f80fd5b61163887828801611598565b95989497509550505050565b5f805f806101608587031215611658575f80fd5b6116628686611582565b93506116718660a08701611582565b925061014085013567ffffffffffffffff81111561162c575f80fd5b5f6020828403121561169d575f80fd5b6116a682611521565b9392505050565b5f602082840312156116bd575f80fd5b813567ffffffffffffffff811681146116a6575f80fd5b6fffffffffffffffffffffffffffffffff811681146106a0575f80fd5b5f60208284031215611701575f80fd5b81356116a6816116d4565b5f805f806080858703121561171f575f80fd5b845193506020850151611731816116d4565b6040860151909350611742816116d4565b6060860151909250611753816116d4565b939692955090935050565b5f6020828403121561176e575f80fd5b813561ffff811681146116a6575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156117bf576117bf61177f565b92915050565b5f602082840312156117d5575f80fd5b813563ffffffff811681146116a6575f80fd5b80820281158282048414176117bf576117bf61177f565b5f82611832577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118675761186761177f565b5060010190565b63ffffffff81811683821601908082111561188b5761188b61177f565b5092915050565b5f80858511156118a0575f80fd5b838611156118ac575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156118f95780818660020360031b1b83161692505b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156118f95760109490940360031b84901b1690921692915050565b803560208310156117bf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156118f95760049490940360031b84901b169092169291505056fea2646970667358221220ca9d45c801b5ccbb302dcb12078bab5268980f6f82de99fc1d137bac6c0848e664736f6c6343000816003360c060405234801562000010575f80fd5b5060405162004aae38038062004aae8339810160408190526200003391620004ca565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b03861617905582828686612ee05f865f5b8551811015620000d357620000c97f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000b557620000b5620005a5565b60200260200101516200027860201b60201c565b5060010162000071565b505f5b815181101562000124576200011a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000b557620000b5620005a5565b50600101620000d6565b505050505050806001600160401b03165f036200015457604051635f86e17760e01b815260040160405180910390fd5b806001600160401b0316825110156200019a5781516040516378e2c15760e11b81526001600160401b039182166004820152908216602482015260440160405180910390fd5b5f805b835181101562000229575f848281518110620001bd57620001bd620005a5565b60200260200101519050826001600160a01b0316816001600160a01b031611620001fa576040516305fa937f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600460205260409020805460ff19166001908117909155909250016200019d565b50509051600580546001600160401b0393841668010000000000000000026001600160801b0319909116939092169290921717905550505063ffffffff92831660805250501660a052620005f3565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015620002c957505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620003165760018054601590620002f190600160a81b90046001600160401b0316620005b9565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200032283836200032e565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff16620003d1575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003883390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000328565b505f62000328565b805163ffffffff81168114620003ed575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b0381168114620003ed575f80fd5b5f82601f8301126200042d575f80fd5b815160206001600160401b03808311156200044c576200044c620003f2565b8260051b604051601f19603f83011681018181108482111715620004745762000474620003f2565b604052938452602081870181019490810192508785111562000494575f80fd5b6020870191505b84821015620004bf57620004af8262000406565b835291830191908301906200049b565b979650505050505050565b5f805f805f805f60e0888a031215620004e1575f80fd5b620004ec88620003d9565b9650620004fc60208901620003d9565b60408901519096506001600160401b038082111562000519575f80fd5b620005278b838c016200041d565b96506200053760608b0162000406565b955060808a01519150808211156200054d575f80fd5b6200055b8b838c016200041d565b945060a08a01519150808216821462000572575f80fd5b60c08a01519193508082111562000587575f80fd5b50620005968a828b016200041d565b91505092959891949750929550565b634e487b7160e01b5f52603260045260245ffd5b5f6001600160401b038281166002600160401b03198101620005e957634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b60805160a05161447d620006315f395f818161090e0152818161253401526126c301525f818161084f0152818161173901526122a4015261447d5ff3fe6080604052600436106102c0575f3560e01c806395d376d711610170578063cd88b903116100d1578063e395eb5c11610087578063f42ed2ed11610062578063f42ed2ed1461096e578063fd62e75014610981578063fdb9b0f1146109a1575f80fd5b8063e395eb5c146108fd578063f010cb2314610930578063f3b4ebd01461094f575f80fd5b8063d2ae2104116100b7578063d2ae210414610886578063d547741f146108bf578063dafe0ccc146108de575f80fd5b8063cd88b9031461081f578063cf34c7681461083e575f80fd5b8063c358de0a11610126578063c5e193cd1161010c578063c5e193cd146107b4578063c7a823e0146107d3578063c7b2370b14610800575f80fd5b8063c358de0a14610764578063c416aa5114610783575f80fd5b8063a217fddf11610156578063a217fddf14610704578063aef18bf714610717578063b143044b14610745575f80fd5b806395d376d71461064e5780639e94496514610661575f80fd5b806330bb3aac116102255780635c975abb116101db578063741bef1a116101b6578063741bef1a1461058f5780638585c945146105e057806391d14854146105ff575f80fd5b80635c975abb1461052b578063724e78da14610542578063736c0d5b14610561575f80fd5b806336568abe1161020b57806336568abe146104ce57806352d3b871146104ed5780635553fb8e1461050c575f80fd5b806330bb3aac1461049057806331cb6105146104af575f80fd5b80631703a0181161027a57806326e67a371161026057806326e67a37146104265780632de11376146104525780632f2ff15d14610471575f80fd5b80631703a018146103a5578063248a9ca3146103ea575f80fd5b806301ffc9a7116102aa57806301ffc9a7146103385780631095b6d71461036757806316c38b3c14610386575f80fd5b8062bf2e80146102c457806301e3366714610317575b5f80fd5b3480156102cf575f80fd5b506001546102ff907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b348015610322575f80fd5b50610336610331366004613597565b6109c0565b005b348015610343575f80fd5b506103576103523660046135d5565b6109fb565b604051901515815260200161030e565b348015610372575f80fd5b50610336610381366004613597565b610a93565b348015610391575f80fd5b506103366103a036600461362a565b610c1d565b3480156103b0575f80fd5b506005546103d19068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161030e565b3480156103f5575f80fd5b50610418610404366004613643565b5f9081526020819052604090206001015490565b60405190815260200161030e565b348015610431575f80fd5b5061044561044036600461366d565b610c41565b60405161030e9190613686565b34801561045d575f80fd5b5061035761046c3660046136cc565b610cc4565b34801561047c575f80fd5b5061033661048b3660046136e7565b610da5565b34801561049b575f80fd5b506104186104aa366004613771565b610ef4565b3480156104ba575f80fd5b506103366104c93660046137e4565b611067565b3480156104d9575f80fd5b506103366104e83660046136e7565b6110aa565b3480156104f8575f80fd5b50610336610507366004613817565b6110dc565b348015610517575f80fd5b50610418610526366004613897565b6112a5565b348015610536575f80fd5b5060015460ff16610357565b34801561054d575f80fd5b5061033661055c3660046136cc565b611418565b34801561056c575f80fd5b5061035761057b3660046136cc565b60046020525f908152604090205460ff1681565b34801561059a575f80fd5b506002546105bb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030e565b3480156105eb575f80fd5b506103366105fa3660046138ea565b6114bd565b34801561060a575f80fd5b506103576106193660046136e7565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61041861065c366004613919565b611502565b34801561066c575f80fd5b506106c961067b36600461366d565b60066020525f908152604090205467ffffffffffffffff81169068010000000000000000810461ffff16906a010000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff909416845261ffff90921660208401526fffffffffffffffffffffffffffffffff169082015260600161030e565b34801561070f575f80fd5b506104185f81565b348015610722575f80fd5b50610357610731366004613643565b60076020525f908152604090205460ff1681565b348015610750575f80fd5b5061033661075f3660046139be565b6116d7565b34801561076f575f80fd5b5061033661077e3660046139fd565b6119db565b34801561078e575f80fd5b506001546105bb90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156107bf575f80fd5b506104186107ce366004613897565b611a89565b3480156107de575f80fd5b506107f26107ed366004613a16565b611c62565b60405161030e929190613a7e565b34801561080b575f80fd5b5061033661081a3660046136cc565b611e65565b34801561082a575f80fd5b50610336610839366004613ac9565b611f09565b348015610849575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161030e565b348015610891575f80fd5b506001546103d1907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b3480156108ca575f80fd5b506103366108d93660046136e7565b611f59565b3480156108e9575f80fd5b506103366108f8366004613597565b61206e565b348015610908575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b34801561093b575f80fd5b5061041861094a366004613b0b565b61219e565b34801561095a575f80fd5b50610336610969366004613b71565b6121d9565b61041861097c366004613bab565b61244a565b34801561098c575f80fd5b506005546103d19067ffffffffffffffff1681565b3480156109ac575f80fd5b506104186109bb366004613bab565b612603565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109ea81612790565b6109f584848461279a565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610a8d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610abd81612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16610b3a576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610ba7575f80fd5b505af1158015610bb9573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b5f610c2781612790565b8115610c3957610c356127cf565b5050565b610c3561284e565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cb857602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610c895790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610d1757505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610d8c575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610d9957506001919050565b505f919050565b919050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480610df357507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610e1d57507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b15610e6057303314610e5b576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eea565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb057610e5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6040517f94fdc372000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b6109f583836128a5565b5f83610eff81610cc4565b610f35576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a16602080840182905267ffffffffffffffff808c16858701528a8416606086015260055468010000000000000000900416608085015260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660a08601525f92835260069091529084902093517f7bfa20a9000000000000000000000000000000000000000000000000000000008152929361010090910490911691637bfa20a99161101c918591908a908a90600401613c97565b602060405180830381865afa158015611037573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105b9190613d63565b98975050505050505050565b3033146110a0576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c358282612975565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561110681612790565b5f5b82811015611266573684848381811061112357611123613d7a565b9050608002019050604051806060016040528082602001602081019061114991906138ea565b67ffffffffffffffff16815260200161116860608401604085016139fd565b61ffff1681526020016111816080840160608501613dc6565b6fffffffffffffffffffffffffffffffff16905260065f6111a5602085018561366d565b63ffffffff16815260208082019290925260409081015f20835181549385015194909201516fffffffffffffffffffffffffffffffff166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff61ffff90951668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941667ffffffffffffffff90931692909217929092179290921691909117905550600101611108565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051611298929190613ddf565b60405180910390a1505050565b5f816112b081610cc4565b6112e6576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808a16602080850182905267ffffffffffffffff808b168688015289851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517f7bfa20a9000000000000000000000000000000000000000000000000000000008152939461010090920490921692637bfa20a9926113ce928692600401613edd565b602060405180830381865afa1580156113e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140d9190613d63565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561144281612790565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146114f6576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ff81612b73565b50565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61152d81612790565b61153d60a08601608087016136cc565b61154681610cc4565b61157c576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810190915260025473ffffffffffffffffffffffffffffffffffffffff1681525f906020808201906115b6908a018a61366d565b63ffffffff1681526020016115d160808a0160608b016138ea565b67ffffffffffffffff1681526020016115f060a08a0160808b016136cc565b73ffffffffffffffffffffffffffffffffffffffff908116825260055468010000000000000000900467ffffffffffffffff166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff16604090940193909352929350610100909104169063df2b057e9083906006905f90611681908d018d61366d565b63ffffffff1663ffffffff1681526020019081526020015f2089896040518563ffffffff1660e01b81526004016116bb9493929190613c97565b6020604051808303815f875af11580156113e9573d5f803e3d5ffd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561170181612790565b5f5b828110156109f5573684848381811061171e5761171e613d7a565b90506020028101906117309190613fb2565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611766602083018361366d565b63ffffffff161461177757506119d3565b4281606001351161178857506119d3565b5f6117c0611799602084018461366d565b6117a960408501602086016136cc565b6117b66040860186613fee565b866060013561219e565b90505f6117d4826107ed6080860186613fee565b50905080611817576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a15050506119d3565b5f6118366118286040860186613fee565b6118319161404f565b612c8a565b905080156118cd575f8381526007602052604090205460ff1615611896577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab9784846040516118859291906140f7565b60405180910390a1505050506119d3565b5f83815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b5f806118df60408701602088016136cc565b73ffffffffffffffffffffffffffffffffffffffff166119026040880188613fee565b6040516119109291906141bc565b5f604051808303815f865af19150503d805f8114611949576040519150601f19603f3d011682016040523d82523d5f602084013e61194e565b606091505b5091509150816119cc578215611992575f85815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516119c39291906141cb565b60405180910390a15b5050505050505b600101611703565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a0581612790565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d906020016114b1565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de611ab481612790565b82611abe81610cc4565b611af4576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808b16602080850182905267ffffffffffffffff808c16868801528a851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517fdf2b057e00000000000000000000000000000000000000000000000000000000815293946101009092049092169263df2b057e92611bdc928692600401613edd565b6020604051808303815f875af1158015611bf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c1c9190613d63565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef84604051611c4f91815260200190565b60405180910390a1505050949350505050565b6005545f908190611c8a9068010000000000000000900467ffffffffffffffff166041614210565b8314611c9b57505f90506001611e5d565b5f611cf2866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290525f90605c01604051602081830303815290604052805190602001209050919050565b90505f805b60055468010000000000000000900467ffffffffffffffff16811015611e5257365f8888611d26856041614210565b90611d32866001614227565b611d3d906041614210565b92611d4a9392919061423a565b915091505f80611d8f8785858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612d7292505050565b5090925090505f816003811115611da857611da8613a51565b14611dc0575f60019850985050505050505050611e5d565b8573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611611e06575f60029850985050505050505050611e5d565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205460ff16611e45575f60039850985050505050505050611e5d565b5093505050600101611cf7565b5060015f9350935050505b935093915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611e8f81612790565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e0906020016114b1565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611f3381612790565b63ffffffff84165f908152600360205260409020611f529084846134be565b5050505050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480611fa757507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80611fd157507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b156120145730331461200f576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612064565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb05761200f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6109f58383612dbb565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561209881612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16612115576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f07b18bde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906307b18bde906044015f604051808303815f87803b158015612182575f80fd5b505af1158015612194573d5f803e3d5ffd5b5050505050505050565b5f85858386866040516020016121b8959493929190614261565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511612216576040517f0bbaf26300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3061222760408301602084016136cc565b73ffffffffffffffffffffffffffffffffffffffff161461229d5761225260408201602083016136cc565b6040517f1ce0bfcd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610ee1565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166122d1602083018361366d565b63ffffffff1614612324576122e9602082018261366d565b6040517f2697e1c200000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610ee1565b5f612335611799602084018461366d565b90505f612349826107ed6080860186613fee565b50905080612383576040517f15ecadee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526007602052604090205460ff16156123ce576040517f9d6a45a600000000000000000000000000000000000000000000000000000000815260048101839052602401610ee1565b5f828152600760205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556109f5907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217759061243890860186613fee565b81019061244591906136cc565b6128a5565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61247581612790565b8861247f81610cc4565b6124b5576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528c811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fbbc5a33b00000000000000000000000000000000000000000000000000000000815292936101009091049091169163bbc5a33b916125b4918591908d908d908d908d906004016142d2565b6020604051808303815f875af11580156125d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f49190613d63565b9b9a5050505050505050505050565b5f8761260e81610cc4565b612644576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528b811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fd358b30000000000000000000000000000000000000000000000000000000000815292936101009091049091169163d358b30091612743918591908c908c908c908c906004016142d2565b602060405180830381865afa15801561275e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127829190613d63565b9a9950505050505050505050565b6114ff8133612e80565b73ffffffffffffffffffffffffffffffffffffffff83166127c4576127bf8282612f05565b505050565b6127bf838383613007565b6127d7613075565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6128566130b4565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612824565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561290257505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15612961576001805460159061293a907501000000000000000000000000000000000000000000900467ffffffffffffffff16614397565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836130f0565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205481151560ff9091161515036129fb576040517f58c8d2a000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201528115156024820152604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260046020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001683151517905581612a6c57600554612a679060019067ffffffffffffffff166143bd565b612a84565b600554612a849067ffffffffffffffff1660016143e5565b60055490915067ffffffffffffffff680100000000000000009091048116908216811115612af2576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808416600483015282166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff84161790556040805173ffffffffffffffffffffffffffffffffffffffff8616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610c0f565b8067ffffffffffffffff165f03612bb6576040517f5f86e17700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff908116908216811015612c15576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808316600483015283166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a23249906020016114b1565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0223536e0000000000000000000000000000000000000000000000000000000014801590612d1f57507fffffffff0000000000000000000000000000000000000000000000000000000082167fab750e750000000000000000000000000000000000000000000000000000000014155b8015610a8d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f704316e500000000000000000000000000000000000000000000000000000000141592915050565b5f805f8351604103612da9576020840151604085015160608601515f1a612d9b888285856131e9565b955095509550505050612db4565b505081515f91506002905b9250925092565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015612e1757505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b15612e765760018054601590612e4f907501000000000000000000000000000000000000000000900467ffffffffffffffff16614406565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836132dc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c35576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216612f52576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612fa8576040519150601f19603f3d011682016040523d82523d5f602084013e612fad565b606091505b50509050806127bf576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216613054576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127bf73ffffffffffffffffffffffffffffffffffffffff84168383613395565b60015460ff16156130b2576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60015460ff166130b2576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556131803390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610a8d565b505f610a8d565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561322257505f915060039050826132d2565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613273573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166132c957505f9250600191508290506132d2565b92505f91508190505b9450945094915050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610a8d565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017815282516127bf93879390925f9283929183919082885af18061343e576040513d5f823e3d81fd5b50505f513d9150811561345557806001141561346f565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ee1565b828054828255905f5260205f2090601f01602090048101928215613552579160200282015f5b8382111561352457833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026134e4565b80156135505782816101000a81549060ff02191690556001016020815f01049283019260010302613524565b505b5061355e929150613562565b5090565b5b8082111561355e575f8155600101613563565b73ffffffffffffffffffffffffffffffffffffffff811681146114ff575f80fd5b5f805f606084860312156135a9575f80fd5b83356135b481613576565b925060208401356135c481613576565b929592945050506040919091013590565b5f602082840312156135e5575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114613614575f80fd5b9392505050565b80358015158114610da0575f80fd5b5f6020828403121561363a575f80fd5b6136148261361b565b5f60208284031215613653575f80fd5b5035919050565b803563ffffffff81168114610da0575f80fd5b5f6020828403121561367d575f80fd5b6136148261365a565b602080825282518282018190525f9190848201906040850190845b818110156136c057835160ff16835292840192918401916001016136a1565b50909695505050505050565b5f602082840312156136dc575f80fd5b813561361481613576565b5f80604083850312156136f8575f80fd5b82359150602083013561370a81613576565b809150509250929050565b803567ffffffffffffffff81168114610da0575f80fd5b5f8083601f84011261373c575f80fd5b50813567ffffffffffffffff811115613753575f80fd5b60208301915083602082850101111561376a575f80fd5b9250929050565b5f805f805f60808688031215613785575f80fd5b61378e8661365a565b945061379c60208701613715565b935060408601356137ac81613576565b9250606086013567ffffffffffffffff8111156137c7575f80fd5b6137d38882890161372c565b969995985093965092949392505050565b5f80604083850312156137f5575f80fd5b823561380081613576565b915061380e6020840161361b565b90509250929050565b5f8060208385031215613828575f80fd5b823567ffffffffffffffff8082111561383f575f80fd5b818501915085601f830112613852575f80fd5b813581811115613860575f80fd5b8660208260071b8501011115613874575f80fd5b60209290920196919550909350505050565b803561ffff81168114610da0575f80fd5b5f805f80608085870312156138aa575f80fd5b6138b385613886565b93506138c160208601613886565b92506138cf60408601613715565b915060608501356138df81613576565b939692955090935050565b5f602082840312156138fa575f80fd5b61361482613715565b5f60a08284031215613913575f80fd5b50919050565b5f805f6040848603121561392b575f80fd5b833567ffffffffffffffff80821115613942575f80fd5b61394e87838801613903565b94506020860135915080821115613963575f80fd5b506139708682870161372c565b9497909650939450505050565b5f8083601f84011261398d575f80fd5b50813567ffffffffffffffff8111156139a4575f80fd5b6020830191508360208260051b850101111561376a575f80fd5b5f80602083850312156139cf575f80fd5b823567ffffffffffffffff8111156139e5575f80fd5b6139f18582860161397d565b90969095509350505050565b5f60208284031215613a0d575f80fd5b61361482613886565b5f805f60408486031215613a28575f80fd5b83359250602084013567ffffffffffffffff811115613a45575f80fd5b6139708682870161372c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b82151581526040810160048310613abc577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8260208301529392505050565b5f805f60408486031215613adb575f80fd5b613ae48461365a565b9250602084013567ffffffffffffffff811115613aff575f80fd5b6139708682870161397d565b5f805f805f60808688031215613b1f575f80fd5b613b288661365a565b94506020860135613b3881613576565b9350604086013567ffffffffffffffff811115613b53575f80fd5b613b5f8882890161372c565b96999598509660600135949350505050565b5f60208284031215613b81575f80fd5b813567ffffffffffffffff811115613b97575f80fd5b613ba384828501613903565b949350505050565b5f805f805f805f6080888a031215613bc1575f80fd5b8735613bcc81613576565b9650602088013567ffffffffffffffff80821115613be8575f80fd5b613bf48b838c0161372c565b909850965060408a0135915080821115613c0c575f80fd5b613c188b838c0161372c565b909650945060608a0135915080821115613c30575f80fd5b50613c3d8a828b0161372c565b989b979a50959850939692959293505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f610140613d0e838873ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613d4f60c08401875467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8061012084015261140d8184018587613c50565b5f60208284031215613d73575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80356fffffffffffffffffffffffffffffffff81168114610da0575f80fd5b5f60208284031215613dd6575f80fd5b61361482613da7565b60208082528181018390525f90604080840186845b87811015613e6f5763ffffffff613e0a8361365a565b16835267ffffffffffffffff613e21868401613715565b168584015261ffff613e34858401613886565b168484015260606fffffffffffffffffffffffffffffffff613e57828501613da7565b16908401526080928301929190910190600101613df4565b5090979650505050505050565b5f81518084525f5b81811015613ea057602081850181015186830182015201613e84565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f610140613f54838773ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613f9560c08401865467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b80610120840152613fa881840185613e7c565b9695505050505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613fe4575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614021575f80fd5b83018035915067ffffffffffffffff82111561403b575f80fd5b60200191503681900382131561376a575f80fd5b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561408f5780818660040360031b1b83161692505b505092915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126140ca575f80fd5b830160208101925035905067ffffffffffffffff8111156140e9575f80fd5b80360382131561376a575f80fd5b6040815263ffffffff6141098461365a565b1660408201525f602084013561411e81613576565b73ffffffffffffffffffffffffffffffffffffffff1660608301526141466040850185614097565b60a0608085015261415b60e085018284613c50565b915050606085013560a08401526141756080860186614097565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08584030160c08601526141aa838284613c50565b93505050508260208301529392505050565b818382375f9101908152919050565b828152604060208201525f613ba36040830184613e7c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610a8d57610a8d6141e3565b80820180821115610a8d57610a8d6141e3565b5f8085851115614248575f80fd5b83861115614254575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008660e01b1681527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008560601b166004820152836018820152818360388301375f9101603801908152949350505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff808a511684528060208b01511660208501525067ffffffffffffffff60408a015116604084015261ffff60608a015116606084015261436160808401895467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8060e08401526143748184018789613c50565b905082810361010084015261438a818587613c50565b9998505050505050505050565b5f67ffffffffffffffff8083168181036143b3576143b36141e3565b6001019392505050565b67ffffffffffffffff8281168282160390808211156143de576143de6141e3565b5092915050565b67ffffffffffffffff8181168382160190808211156143de576143de6141e3565b5f67ffffffffffffffff82168061441f5761441f6141e3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019291505056fea26469706673582212208293bcc557e204de553c5250d4aeaa3a84335fc59a6c7b5a242fbc34745baa1464736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002470380380620024708339810160408190526200003391620000c8565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000079565b5063ffffffff90911660a052608052620000fe565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8060408385031215620000da575f80fd5b825163ffffffff81168114620000ee575f80fd5b6020939093015192949293505050565b60805160a0516123426200012e5f395f81816107ac015261082601525f81816109120152610cb901526123425ff3fe6080604052600436106100e7575f3560e01c80638da5cb5b11610087578063de0a93c311610057578063de0a93c314610322578063df2b057e14610396578063f2fde38b146103a9578063f5ff608f146103c8575f80fd5b80638da5cb5b1461029e5780639ac23d28146102d1578063bbc5a33b146102f0578063d358b30014610303575f80fd5b806339f26dfc116100c257806339f26dfc1461022c57806354fd4d501461024b578063715018a61461026b5780637bfa20a91461027f575f80fd5b806301e33667146100f257806310b65f76146101135780632565c24514610157575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5061011161010c366004611a78565b6103e7565b005b34801561011e575f80fd5b5061014461012d366004611ac2565b63ffffffff165f9081526001602052604090205490565b6040519081526020015b60405180910390f35b348015610162575f80fd5b506101ec610171366004611ac2565b60036020525f908152604090205463ffffffff8082169167ffffffffffffffff64010000000082048116926c0100000000000000000000000083049091169174010000000000000000000000000000000000000000810482169178010000000000000000000000000000000000000000000000009091041685565b6040805163ffffffff968716815267ffffffffffffffff95861660208201529390941693830193909352831660608201529116608082015260a00161014e565b348015610237575f80fd5b50610111610246366004611b13565b6103ff565b348015610256575f80fd5b5060408051600180825260208201520161014e565b348015610276575f80fd5b506101116104af565b34801561028a575f80fd5b50610144610299366004611bae565b6104c2565b3480156102a9575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b3480156102dc575f80fd5b506101116102eb366004611c15565b61068a565b6101446102fe366004611cd2565b610747565b34801561030e575f80fd5b5061014461031d366004611cd2565b610761565b34801561032d575f80fd5b50600254604080516effffffffffffffffffffffffffffff80841682526f0100000000000000000000000000000084041660208201527e0100000000000000000000000000000000000000000000000000000000000090920461ffff169082015260600161014e565b6101446103a4366004611bae565b61099c565b3480156103b4575f80fd5b506101116103c3366004611d67565b6109b2565b3480156103d3575f80fd5b506101116103e2366004611d80565b610a15565b6103ef610a8e565b6103fa838383610ae0565b505050565b610407610a8e565b6002805461ffff9092167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6effffffffffffffffffffffffffffff9485166f01000000000000000000000000000000027fffff00000000000000000000000000000000000000000000000000000000000090941694909516939093179190911792909216179055565b6104b7610a8e565b6104c05f610b10565b565b5f6104d06020850185611e04565b67ffffffffffffffff165f03610530576104f06040860160208701611ac2565b6040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b61053a8383610b84565b505f61055e61054f60a0880160808901611e04565b67ffffffffffffffff16610c25565b90505f8061056f6020890189611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61059a60408b0160208c01611ac2565b856105a860208c018c611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa158015610617573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063b9190611e3c565b93505050915061067e828860200160208101906106589190611e8e565b61066860c08c0160a08d01611e8e565b61067860608c0160408d01611ea7565b85610c32565b98975050505050505050565b610692610a8e565b8281146106cb576040517fb54ecc3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b83811015610740578282828181106106e7576106e7611ec2565b905060a0020160035f87878581811061070257610702611ec2565b90506020020160208101906107179190611ac2565b63ffffffff16815260208101919091526040015f206107368282611efb565b50506001016106cd565b5050505050565b5f610756878787878787610761565b979650505050505050565b5f61076f6020870187611e04565b67ffffffffffffffff165f036107d9576040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152602401610527565b6107e38383610b84565b505f6107f861054f60608a0160408b01611e04565b90505f8061080960208b018b611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c7f00000000000000000000000000000000000000000000000000000000000000008561085360208e018e611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa1580156108c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e69190611e3c565b9350505091505f6108f78989610d27565b90505f6fffffffffffffffffffffffffffffffff83166109377f0000000000000000000000000000000000000000000000000000000000000000846120c4565b6109419190612108565b905061098c610950828661211b565b61096060408e0160208f01611e8e565b8e60600160208101906109739190611e8e565b8e60400160208101906109869190611ea7565b87610c32565b9c9b505050505050505050505050565b5f6109a9858585856104c2565b95945050505050565b6109ba610a8e565b73ffffffffffffffffffffffffffffffffffffffff8116610a09576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610527565b610a1281610b10565b50565b610a1d610a8e565b5f5b818110156103fa57828282818110610a3957610a39611ec2565b9050604002016020013560015f015f858585818110610a5a57610a5a611ec2565b610a709260206040909202019081019150611ac2565b63ffffffff16815260208101919091526040015f2055600101610a1f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146104c0576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610527565b73ffffffffffffffffffffffffffffffffffffffff8316610b05576103fa8282610e0f565b6103fa838383610f11565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808215610bde575f80610b99868685610f7f565b6040517f7085244b00000000000000000000000000000000000000000000000000000000815260ff851660048201529096509294508593505060249091019050610527565b808314610c1a576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610527565b5f9150505b92915050565b5f610c1f82610120610fd8565b5f8061ffff861615610c445785610c46565b845b90505f612710610c5a61ffff84168a6120c4565b610c649190612108565b90506fffffffffffffffffffffffffffffffff84161580610c9557506fffffffffffffffffffffffffffffffff8516155b15610ca35791506109a99050565b5f846fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000876fffffffffffffffffffffffffffffffff16610cf591906120c4565b610cff9190612108565b610d09908a61211b565b9050818111610d185781610d1a565b805b9998505050505050505050565b5f80610d36848461103c61124b565b6002548151919250610d5f916effffffffffffffffffffffffffffff9091169061ffff1661212e565b6effffffffffffffffffffffffffffff169150806020015115610dca5760025461271090610db3907e01000000000000000000000000000000000000000000000000000000000000900461ffff16846120c4565b610dbd9190612108565b610dc7908361211b565b91505b806040015115610e0857600254610e05906f0100000000000000000000000000000090046effffffffffffffffffffffffffffff168361211b565b91505b5092915050565b73ffffffffffffffffffffffffffffffffffffffff8216610e5c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610eb2576040519150601f19603f3d011682016040523d82523d5f602084013e610eb7565b606091505b50509050806103fa576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610527565b73ffffffffffffffffffffffffffffffffffffffff8216610f5e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103fa73ffffffffffffffffffffffffffffffffffffffff8416838361185d565b5f36816001840181610f928888846118ea565b6002830192909150610faa9089908990600301611910565b94506002820161ffff82168301610fc381838b8d612161565b979b909a50969850505061ffff160193505050565b5f80610fe56041856120c4565b9050610ff2602082612188565b1561101a57611002602082612188565b61100c908261219b565b61101790602061211b565b90505b806110278461010461211b565b611031919061211b565b610e0590602061211b565b61104860018583611934565b6110556001856002611975565b156112455763ffffffff8085165f90815260036020908152604091829020825160a0810184529054808516825267ffffffffffffffff64010000000082048116938301939093526c01000000000000000000000000810490921692810192909252740100000000000000000000000000000000000000008104831660608301527801000000000000000000000000000000000000000000000000900490911660808201528284156111a957816020015167ffffffffffffffff168467ffffffffffffffff16111561116657815160208301516103e89163ffffffff169061113c90876121ae565b61114691906121cf565b61115091906121f3565b826040015161115f9190612219565b90506111a9565b6103e8825f015163ffffffff1685846020015161118391906121ae565b61118d91906121cf565b61119791906121f3565b82604001516111a691906121ae565b90505b42826060015163ffffffff16826111c09190612219565b67ffffffffffffffff1610806111f3575060808201516111e69063ffffffff164261211b565b8167ffffffffffffffff16115b15611242576040517f0c5a8d2300000000000000000000000000000000000000000000000000000000815263ffffffff8716600482015267ffffffffffffffff82166024820152604401610527565b50505b50505050565b604080516060810182525f80825260208201819052918101829052908085818661127682600261211b565b9261128393929190612161565b61128c9161223a565b60f01c905061129c60028361211b565b915061ffff81166001146112dc576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112e760028361211b565b91505f8683876112f882600261211b565b9261130593929190612161565b61130e9161223a565b60f01c905061131e60028461211b565b92508061ffff165f0361135d576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff168352505f5b825f015161ffff168161ffff1610156115c6575f86868481811061138c5761138c611ec2565b919091013560f81c91506113a3905060018461211b565b925060ff81166001146113e2576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113ed60028461211b565b92505f8784886113fe82600261211b565b9261140b93929190612161565b6114149161223a565b60f01c905061142460028561211b565b93507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff82160161158a575f88858961146082600261211b565b9261146d93929190612161565b6114769161223a565b60f01c905061148660028661211b565b9450845f8a828b61149882600461211b565b926114a593929190612161565b6114ae91612280565b60e01c90506114be60048361211b565b91505f8b8b848181106114d3576114d3611ec2565b600192013560f81c821492506114eb9190508461211b565b92505f8c848d6114fc82600861211b565b9261150993929190612161565b611512916122c6565b60c01c90506115278383835f8f63ffffffff16565b508a925061153c91505061ffff83168761211b565b1115611574576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158261ffff82168661211b565b9450506115bc565b6040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600101611366565b508381101561181c575f8585838181106115e2576115e2611ec2565b919091013560f81c91506115f9905060018361211b565b915060ff8116600114611638576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86838761164782600261211b565b9261165493929190612161565b61165d9161223a565b60f01c905061166d60028461211b565b925061ffff81166001146116ad576040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787858181106116c0576116c0611ec2565b919091013560f81c91506116d7905060018561211b565b935060ff81166116ed576001602086015261175c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff821601611723576001604086015261175c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff82160161158a5760016020860181905260408601525b5f88858961176b82600461211b565b9261177893929190612161565b61178191612280565b60e01c905061179160048661211b565b94505f8989878181106117a6576117a6611ec2565b600192013560f81c821492506117be9190508761211b565b95505f8a878b6117cf82600861211b565b926117dc93929190612161565b6117e5916122c6565b60c01c90506117f560088861211b565b965061180883838360018d63ffffffff16565b61181360168861211b565b96505050505050505b808414611855576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526103fa9084906119a2565b5f600282016118fb81848688612161565b6119049161223a565b60f01c95945050505050565b5f83838381811061192357611923611ec2565b919091013560f81c95945050505050565b61193f838383611975565b6103fa576040517f50fae9eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8083165f90815260208590526040812054909161199a91908490611a4116565b949350505050565b5f8060205f8451602086015f885af1806119c1576040513d5f823e3d81fd5b50505f513d915081156119d85780600114156119f2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611245576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610527565b600160ff919091161b16151590565b803573ffffffffffffffffffffffffffffffffffffffff81168114611a73575f80fd5b919050565b5f805f60608486031215611a8a575f80fd5b611a9384611a50565b9250611aa160208501611a50565b9150604084013590509250925092565b63ffffffff81168114610a12575f80fd5b5f60208284031215611ad2575f80fd5b8135611add81611ab1565b9392505050565b80356effffffffffffffffffffffffffffff81168114611a73575f80fd5b803561ffff81168114611a73575f80fd5b5f805f60608486031215611b25575f80fd5b611b2e84611ae4565b9250611b3c60208501611ae4565b9150611b4a60408501611b02565b90509250925092565b5f60608284031215611b63575f80fd5b50919050565b5f8083601f840112611b79575f80fd5b50813567ffffffffffffffff811115611b90575f80fd5b602083019150836020828501011115611ba7575f80fd5b9250929050565b5f805f80848603610140811215611bc3575f80fd5b60c0811215611bd0575f80fd5b50849350611be18660c08701611b53565b925061012085013567ffffffffffffffff811115611bfd575f80fd5b611c0987828801611b69565b95989497509550505050565b5f805f8060408587031215611c28575f80fd5b843567ffffffffffffffff80821115611c3f575f80fd5b818701915087601f830112611c52575f80fd5b813581811115611c60575f80fd5b8860208260051b8501011115611c74575f80fd5b602092830196509450908601359080821115611c8e575f80fd5b818701915087601f830112611ca1575f80fd5b813581811115611caf575f80fd5b88602060a083028501011115611cc3575f80fd5b95989497505060200194505050565b5f805f805f80868803610120811215611ce9575f80fd5b6080811215611cf6575f80fd5b50869550611d078860808901611b53565b945060e087013567ffffffffffffffff80821115611d23575f80fd5b611d2f8a838b01611b69565b9096509450610100890135915080821115611d48575f80fd5b50611d5589828a01611b69565b979a9699509497509295939492505050565b5f60208284031215611d77575f80fd5b611add82611a50565b5f8060208385031215611d91575f80fd5b823567ffffffffffffffff80821115611da8575f80fd5b818501915085601f830112611dbb575f80fd5b813581811115611dc9575f80fd5b8660208260061b8501011115611ddd575f80fd5b60209290920196919550909350505050565b67ffffffffffffffff81168114610a12575f80fd5b5f60208284031215611e14575f80fd5b8135611add81611def565b6fffffffffffffffffffffffffffffffff81168114610a12575f80fd5b5f805f8060808587031215611e4f575f80fd5b845193506020850151611e6181611e1f565b6040860151909350611e7281611e1f565b6060860151909250611e8381611e1f565b939692955090935050565b5f60208284031215611e9e575f80fd5b611add82611b02565b5f60208284031215611eb7575f80fd5b8135611add81611e1f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8135610c1f81611ab1565b8135611f0681611ab1565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135611f4681611def565b6bffffffffffffffff000000008160201b16905080837fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008416171784556040850135611f9181611def565b73ffffffffffffffff0000000000000000000000008160601b169050837fffffffffffffffffffffffff000000000000000000000000000000000000000084161793508084831717855560608601359250611feb83611ab1565b77ffffffff00000000000000000000000000000000000000008360a01b167fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff8516831782171785555050505061209361204660808401611eef565b82547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1660c09190911b7bffffffff00000000000000000000000000000000000000000000000016178255565b5050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610c1f57610c1f612097565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612116576121166120db565b500490565b80820180821115610c1f57610c1f612097565b6effffffffffffffffffffffffffffff81811683821602808216919082811461215957612159612097565b505092915050565b5f808585111561216f575f80fd5b8386111561217b575f80fd5b5050820193919092039150565b5f82612196576121966120db565b500690565b81810381811115610c1f57610c1f612097565b67ffffffffffffffff828116828216039080821115610e0857610e08612097565b67ffffffffffffffff81811683821602808216919082811461215957612159612097565b5f67ffffffffffffffff8084168061220d5761220d6120db565b92169190910492915050565b67ffffffffffffffff818116838216019080821115610e0857610e08612097565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156121595760029490940360031b84901b1690921692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156121595760049490940360031b84901b1690921692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156121595760089490940360031b84901b169092169291505056fea2646970667358221220cccc97c15d4a10960156cf1d97eac992ad00f3710384385711595e0370e0871a64736f6c6343000816003360e060405234801562000010575f80fd5b5060405162001e1538038062001e15833981016040819052620000339162000172565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b62000064816200010b565b50600180546001600160a01b0319166001600160a01b0384811691909117909155811660808190525f60a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620000ca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000f09190620001af565b63ffffffff1660c052505060636003556064600455620001db565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016f575f80fd5b50565b5f806040838503121562000184575f80fd5b825162000191816200015a565b6020840151909250620001a4816200015a565b809150509250929050565b5f60208284031215620001c0575f80fd5b815163ffffffff81168114620001d4575f80fd5b9392505050565b60805160a05160c051611bf3620002225f395f6103fc01525f61036f01525f818161033c015281816106e90152818161081201528181610a5c0152610cc30152611bf35ff3fe60806040526004361061018e575f3560e01c8063715018a6116100d5578063996f79c01161007e578063dabca06311610058578063dabca0631461051f578063f2fde38b1461053e578063fd9be5221461055d57610195565b8063996f79c0146104bf578063aec336e6146104d4578063d80e9bd9146104f357610195565b80638da5cb5b116100af5780638da5cb5b146104545780638f58aa7a1461047d578063909532381461049c57610195565b8063715018a6146103d757806372607537146103eb57806372d713221461043357610195565b80634389e58f1161013757806361d027b31161011157806361d027b31461035e5780636251b637146103915780636750cd4c146103b757610195565b80634389e58f146102d357806354fd4d50146103015780635e280f111461032b57610195565b80631881d94d116101685780631881d94d1461026d5780631c7c294e14610288578063334993ff146102b457610195565b806301ffc9a7146101c75780630e97289b146101fb57806312cc947f1461024c57610195565b3661019557005b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156101d2575f80fd5b506101e66101e136600461127f565b61057c565b60405190151581526020015b60405180910390f35b348015610206575f80fd5b506001546102279073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f2565b348015610257575f80fd5b5061026b6102663660046112fc565b610614565b005b348015610278575f80fd5b5060026040516101f2919061133b565b348015610293575f80fd5b506002546102279073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102bf575f80fd5b5061026b6102ce36600461137a565b6107e7565b3480156102de575f80fd5b506102f26102ed3660046114c1565b6107fa565b6040516101f29392919061159b565b34801561030c575f80fd5b50604080515f80825260208201526002918101919091526060016101f2565b348015610336575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b348015610369575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b34801561039c575f80fd5b506103a5600181565b60405160ff90911681526020016101f2565b3480156103c2575f80fd5b506101e66103d13660046115ed565b50600190565b3480156103e2575f80fd5b5061026b610965565b3480156103f6575f80fd5b5061041e7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101f2565b34801561043e575f80fd5b50610447610978565b6040516101f29190611606565b34801561045f575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610227565b348015610488575f80fd5b5061026b610497366004611644565b610a04565b3480156104a7575f80fd5b506104b160035481565b6040519081526020016101f2565b3480156104ca575f80fd5b506104b160045481565b3480156104df575f80fd5b5061026b6104ee36600461166e565b610b5c565b3480156104fe575f80fd5b5061051261050d366004611689565b610bab565b6040516101f291906116ff565b34801561052a575f80fd5b5061026b610539366004611716565b610beb565b348015610549575f80fd5b5061026b61055836600461166e565b610c03565b348015610568575f80fd5b5061026b610577366004611644565b610c6b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061060e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff1615801590610653575060025473ffffffffffffffffffffffffffffffffffffffff163314155b1561068a576040517f70b216ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60405180606001604052806106a08585610d5b565b63ffffffff1681526020016106b58585610d7d565b81526020016106c48585610d9c565b67ffffffffffffffff169052905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a825d747826107198686610dbe565b6107238787610dcf565b604051610731929190611750565b6040805191829003822060e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168352845163ffffffff1660048401526020850151602484015293015167ffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091166064820152608481019190915260a4015f604051808303815f87803b1580156107cc575f80fd5b505af11580156107de573d5f803e3d5ffd5b50505050505050565b6107ef610dea565b600491909155600355565b604080518082019091525f80825260208201526060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461087f576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61089061088b87611776565b610e3c565b915084515f146108a0578461092a565b600580546108ad90611811565b80601f01602080910402602001604051908101604052809291908181526020018280546108d990611811565b80156109245780601f106108fb57610100808354040283529160200191610924565b820191905f5260205f20905b81548152906001019060200180831161090757829003601f168201915b50505050505b90506109368282610ea1565b6040518060400160405280600454815260200185610954575f610958565b6003545b9052969195509350915050565b61096d610dea565b6109765f610f2a565b565b6005805461098590611811565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190611811565b80156109fc5780601f106109d3576101008083540402835291602001916109fc565b820191905f5260205f20905b8154815290600101906020018083116109df57829003601f168201915b505050505081565b610a0c610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610a59576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae7919061185c565b905073ffffffffffffffffffffffffffffffffffffffff8116610b36576040517f54c1781b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff82168484610f9e565b505050565b610b64610dea565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b604080518082019091525f80825260208201526040518060400160405280600454815260200183610bdc575f610be0565b6003545b905295945050505050565b610bf3610dea565b6005610bff82826118c2565b5050565b610c0b610dea565b73ffffffffffffffffffffffffffffffffffffffff8116610c5f576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610c6881610f2a565b50565b610c73610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610cc0576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4e919061185c565b9050610b5781848461102b565b5f610d6a600d600984866119da565b610d7391611a01565b60e01c9392505050565b5f610d8c602d600d84866119da565b610d9591611a49565b9392505050565b5f610dab6009600184866119da565b610db491611a85565b60c01c9392505050565b5f610d95610dcc848461105b565b90565b365f610dde83605181876119da565b915091505b9250929050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610976576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c56565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610e8b986001989197919673ffffffffffffffffffffffffffffffffffffffff169501611acb565b6040516020818303038152906040529050919050565b6001546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063faed6c5890610ef99085908590600401611b90565b5f604051808303815f87803b158015610f10575f80fd5b505af1158015610f22573d5f803e3d5ffd5b505050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b5790849061106a565b73ffffffffffffffffffffffffffffffffffffffff831661105057610b57828261110f565b610b57838383611211565b5f610d8c6051603184866119da565b5f8060205f8451602086015f885af180611089576040513d5f823e3d81fd5b50505f513d915081156110a05780600114156110ba565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611109576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c56565b50505050565b73ffffffffffffffffffffffffffffffffffffffff821661115c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146111b2576040519150601f19603f3d011682016040523d82523d5f602084013e6111b7565b606091505b5050905080610b57576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c56565b73ffffffffffffffffffffffffffffffffffffffff821661125e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff84168383610f9e565b5f6020828403121561128f575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d95575f80fd5b5f8083601f8401126112ce575f80fd5b50813567ffffffffffffffff8111156112e5575f80fd5b602083019150836020828501011115610de3575f80fd5b5f806020838503121561130d575f80fd5b823567ffffffffffffffff811115611323575f80fd5b61132f858286016112be565b90969095509350505050565b6020810160038310611374577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f806040838503121561138b575f80fd5b50508035926020909101359150565b5f60e082840312156113aa575f80fd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff81118282101715611400576114006113b0565b60405290565b5f82601f830112611415575f80fd5b813567ffffffffffffffff80821115611430576114306113b0565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611476576114766113b0565b8160405283815286602085880101111561148e575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803580151581146114bc575f80fd5b919050565b5f805f606084860312156114d3575f80fd5b833567ffffffffffffffff808211156114ea575f80fd5b6114f68783880161139a565b9450602086013591508082111561150b575f80fd5b5061151886828701611406565b925050611527604085016114ad565b90509250925092565b5f5b8381101561154a578181015183820152602001611532565b50505f910152565b5f8151808452611569816020860160208601611530565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8351815260208085015190820152608060408201525f6115be6080830185611552565b82810360608401526115d08185611552565b9695505050505050565b803563ffffffff811681146114bc575f80fd5b5f602082840312156115fd575f80fd5b610d95826115da565b602081525f610d956020830184611552565b73ffffffffffffffffffffffffffffffffffffffff81168114610c68575f80fd5b80356114bc81611618565b5f8060408385031215611655575f80fd5b823561166081611618565b946020939093013593505050565b5f6020828403121561167e575f80fd5b8135610d9581611618565b5f805f806060858703121561169c575f80fd5b843567ffffffffffffffff808211156116b3575f80fd5b6116bf8883890161139a565b955060208701359150808211156116d4575f80fd5b506116e1878288016112be565b90945092506116f49050604086016114ad565b905092959194509250565b81518152602080830151908201526040810161060e565b5f60208284031215611726575f80fd5b813567ffffffffffffffff81111561173c575f80fd5b61174884828501611406565b949350505050565b818382375f9101908152919050565b803567ffffffffffffffff811681146114bc575f80fd5b5f60e08236031215611786575f80fd5b61178e6113dd565b6117978361175f565b81526117a5602084016115da565b60208201526117b660408401611639565b60408201526117c7606084016115da565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156117f9575f80fd5b61180536828601611406565b60c08301525092915050565b600181811c9082168061182557607f821691505b6020821081036113aa577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6020828403121561186c575f80fd5b8151610d9581611618565b601f821115610b5757805f5260205f20601f840160051c8101602085101561189c5750805b601f840160051c820191505b818110156118bb575f81556001016118a8565b5050505050565b815167ffffffffffffffff8111156118dc576118dc6113b0565b6118f0816118ea8454611811565b84611877565b602080601f831160018114611942575f841561190c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610f22565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561198e5788860151825594840194600190910190840161196f565b50858210156119ca57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b5f80858511156119e8575f80fd5b838611156119f4575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611a415780818660040360031b1b83161692505b505092915050565b8035602083101561060e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015611a415760089490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611b7c816071850160208701611530565b919091016071019998505050505050505050565b604081525f611ba26040830185611552565b8281036020840152611bb48185611552565b9594505050505056fea2646970667358221220153f6a8e912d5720c2f1c4bf884b915b03d8f933123bf4fbba154ab615acb52564736f6c6343000816003360c060405234801562000010575f80fd5b5060405162003f7b38038062003f7b8339810160408190526200003391620002c2565b83838383838360128484818181818d6001600160a01b0381166200007057604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200007b8162000191565b506001600160a01b038083166080528116620000aa57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b158015620000ef575f80fd5b505af115801562000102573d5f803e3d5ffd5b50505050505050506200011a620001e060201b60201c565b60ff168360ff16101562000141576040516301e9714b60e41b815260040160405180910390fd5b6200014e60068462000360565b6200015b90600a6200047b565b60a052506008915062000171905083826200051c565b5060096200018082826200051c565b5050505050505050505050620005e8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000209575f80fd5b81516001600160401b0380821115620002265762000226620001e5565b604051601f8301601f19908116603f01168101908282118183101715620002515762000251620001e5565b81604052838152602092508660208588010111156200026e575f80fd5b5f91505b8382101562000291578582018301518183018401529082019062000272565b5f602085830101528094505050505092915050565b80516001600160a01b0381168114620002bd575f80fd5b919050565b5f805f8060808587031215620002d6575f80fd5b84516001600160401b0380821115620002ed575f80fd5b620002fb88838901620001f9565b9550602087015191508082111562000311575f80fd5b506200032087828801620001f9565b9350506200033160408601620002a6565b91506200034160608601620002a6565b905092959194509250565b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156200037c576200037c6200034c565b92915050565b600181815b80851115620003c257815f1904821115620003a657620003a66200034c565b80851615620003b457918102915b93841c939080029062000387565b509250929050565b5f82620003da575060016200037c565b81620003e857505f6200037c565b81600181146200040157600281146200040c576200042c565b60019150506200037c565b60ff8411156200042057620004206200034c565b50506001821b6200037c565b5060208310610133831016604e8410600b841016171562000451575081810a6200037c565b6200045d838362000382565b805f19048211156200047357620004736200034c565b029392505050565b5f6200048b60ff841683620003ca565b9392505050565b600181811c90821680620004a757607f821691505b602082108103620004c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200051757805f5260205f20601f840160051c81016020851015620004f35750805b601f840160051c820191505b8181101562000514575f8155600101620004ff565b50505b505050565b81516001600160401b03811115620005385762000538620001e5565b620005508162000549845462000492565b84620004cc565b602080601f83116001811462000586575f84156200056e5750858301515b5f19600386901b1c1916600185901b178555620005e0565b5f85815260208120601f198616915b82811015620005b65788860151825594840194600190910190840162000595565b5085821015620005d457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60805160a05161392b620006505f395f81816106f301528181611f9b0152818161200d015261229a01525f81816105a301528181610b5901528181611296015281816115bc01528181611a17015281816123ee0152818161251301526125fb015261392b5ff3fe6080604052600436106102d7575f3560e01c80637d25a05e1161017b578063bb0b6a53116100d1578063d045a0dc11610087578063f2fde38b11610062578063f2fde38b146108d0578063fc0c546a1461052c578063ff7bd03d146108ef575f80fd5b8063d045a0dc1461084d578063d424388514610860578063dd62ed3e1461087f575f80fd5b8063bd815db0116100b7578063bd815db0146107fa578063c7c7f5b31461080d578063ca5eb5e11461082e575f80fd5b8063bb0b6a53146107b0578063bc70b354146107db575f80fd5b8063963efcaa11610131578063a9059cbb1161010c578063a9059cbb14610746578063b731ea0a14610765578063b98bd07014610791575f80fd5b8063963efcaa146106e25780639dc29fac146107155780639f68b96414610734575f80fd5b8063857749b011610161578063857749b0146106925780638da5cb5b146106a557806395d89b41146106ce575f80fd5b80637d25a05e1461063957806382413eac14610673575f80fd5b8063313ce567116102305780635535d461116101e65780636fc1b31e116101c15780636fc1b31e146105c557806370a08231146105e4578063715018a614610625575f80fd5b80635535d4611461053e5780635a0dfe4d1461055d5780635e280f1114610592575f80fd5b80633b6f743b116102165780633b6f743b146104e157806340c10f191461050d57806352ae28791461052c575f80fd5b8063313ce567146104a15780633400288b146104c2575f80fd5b8063134d4f251161029057806318160ddd1161026b57806318160ddd146104505780631f5e13341461046e57806323b872dd14610482575f80fd5b8063134d4f25146103c8578063156a0d0f146103ef57806317442b701461042f575f80fd5b80630d35b415116102c05780630d35b41514610334578063111ecdad1461036257806313137d65146103b3575f80fd5b806306fdde03146102db578063095ea7b314610305575b5f80fd5b3480156102e6575f80fd5b506102ef61090e565b6040516102fc91906127f6565b60405180910390f35b348015610310575f80fd5b5061032461031f366004612829565b61099e565b60405190151581526020016102fc565b34801561033f575f80fd5b5061035361034e366004612869565b6109b7565b6040516102fc9392919061289b565b34801561036d575f80fd5b5060045461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102fc565b6103c66103c13660046129a5565b610b57565b005b3480156103d3575f80fd5b506103dc600281565b60405161ffff90911681526020016102fc565b3480156103fa575f80fd5b50604080517f02e49c2c00000000000000000000000000000000000000000000000000000000815260016020820152016102fc565b34801561043a575f80fd5b50604080516001815260026020820152016102fc565b34801561045b575f80fd5b506007545b6040519081526020016102fc565b348015610479575f80fd5b506103dc600181565b34801561048d575f80fd5b5061032461049c366004612a3e565b610c56565b3480156104ac575f80fd5b5060125b60405160ff90911681526020016102fc565b3480156104cd575f80fd5b506103c66104dc366004612a94565b610c7b565b3480156104ec575f80fd5b506105006104fb366004612abb565b610c91565b6040516102fc9190612b0a565b348015610518575f80fd5b506103c6610527366004612829565b610cf5565b348015610537575f80fd5b503061038e565b348015610549575f80fd5b506102ef610558366004612b32565b610cff565b348015610568575f80fd5b50610324610577366004612a94565b63ffffffff919091165f908152600160205260409020541490565b34801561059d575f80fd5b5061038e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d0575f80fd5b506103c66105df366004612b63565b610da1565b3480156105ef575f80fd5b506104606105fe366004612b63565b73ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604090205490565b348015610630575f80fd5b506103c6610e23565b348015610644575f80fd5b5061065a610653366004612a94565b5f92915050565b60405167ffffffffffffffff90911681526020016102fc565b34801561067e575f80fd5b5061032461068d366004612b7e565b610e36565b34801561069d575f80fd5b5060066104b0565b3480156106b0575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661038e565b3480156106d9575f80fd5b506102ef610e58565b3480156106ed575f80fd5b506104607f000000000000000000000000000000000000000000000000000000000000000081565b348015610720575f80fd5b506103c661072f366004612829565b610e67565b34801561073f575f80fd5b505f610324565b348015610751575f80fd5b50610324610760366004612829565b610e71565b348015610770575f80fd5b5060025461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561079c575f80fd5b506103c66107ab366004612c22565b610e7e565b3480156107bb575f80fd5b506104606107ca366004612c61565b60016020525f908152604090205481565b3480156107e6575f80fd5b506102ef6107f5366004612c7a565b610e98565b6103c6610808366004612c22565b611052565b61082061081b366004612cd7565b611216565b6040516102fc929190612d5e565b348015610839575f80fd5b506103c6610848366004612b63565b611249565b6103c661085b3660046129a5565b6112f0565b34801561086b575f80fd5b506103c661087a366004612b63565b611338565b34801561088a575f80fd5b50610460610899366004612db0565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260066020908152604080832093909416825291909152205490565b3480156108db575f80fd5b506103c66108ea366004612b63565b6113b3565b3480156108fa575f80fd5b50610324610909366004612ddc565b611416565b60606008805461091d90612df6565b80601f016020809104026020016040519081016040528092919081815260200182805461094990612df6565b80156109945780601f1061096b57610100808354040283529160200191610994565b820191905f5260205f20905b81548152906001019060200180831161097757829003601f168201915b5050505050905090565b5f336109ab81858561144a565b60019150505b92915050565b604080518082019091525f808252602082015260606109e760405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a569190612e41565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac29190612e5c565b604080518082018252848152602080820184905282515f80825291810190935290975091925090610b15565b604080518082019091525f815260606020820152815260200190600190039081610aee5790505b5093505f80610b39604089013560608a0135610b3460208c018c612c61565b61145c565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610bcd576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b60208701803590610be790610be2908a612c61565b6114b0565b14610c3e57610bf96020880188612c61565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610bc4565b610c4d87878787878787611504565b50505050505050565b5f33610c63858285611695565b610c6e858585611762565b60019150505b9392505050565b610c8361180b565b610c8d828261185d565b5050565b604080518082019091525f80825260208201525f610cbf60408501356060860135610b346020880188612c61565b9150505f80610cce86846118b1565b9092509050610ceb610ce36020880188612c61565b838388611a02565b9695505050505050565b610c8d8282611aed565b600360209081525f928352604080842090915290825290208054610d2290612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4e90612df6565b8015610d995780601f10610d7057610100808354040283529160200191610d99565b820191905f5260205f20905b815481529060010190602001808311610d7c57829003601f168201915b505050505081565b610da961180b565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610e2b61180b565b610e345f611b47565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b60606009805461091d90612df6565b610c8d8282611bbb565b5f336109ab818585611762565b610e8661180b565b610c8d610e938284612f80565b611c15565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ecb90612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef790612df6565b8015610f425780601f10610f1957610100808354040283529160200191610f42565b820191905f5260205f20905b815481529060010190602001808311610f2557829003601f168201915b5050505050905080515f03610f905783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610e509350505050565b5f839003610f9f579050610e50565b6002831061101c57610fe584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611d1692505050565b80610ff38460028188613089565b604051602001611005939291906130b0565b604051602081830303815290604052915050610e50565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc492919061311d565b5f5b81811015611155573683838381811061106f5761106f613130565b9050602002810190611081919061315d565b90506110b36110936020830183612c61565b602083013563ffffffff919091165f908152600160205260409020541490565b6110bd575061114d565b3063d045a0dc60c08301358360a08101356110dc610100830183613199565b6110ed610100890160e08a01612b63565b6110fb6101208a018a613199565b6040518963ffffffff1660e01b815260040161111d979695949392919061320f565b5f604051808303818588803b158015611134575f80fd5b505af1158015611146573d5f803e3d5ffd5b5050505050505b600101611054565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa15801561119e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111e391908101906132a2565b6040517f8351eea7000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b61121e612747565b604080518082019091525f808252602082015261123c858585611d5b565b915091505b935093915050565b61125161180b565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b1580156112d7575f80fd5b505af11580156112e9573d5f803e3d5ffd5b5050505050565b333014611329576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c4d87878787878787610c3e565b61134061180b565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610e18565b6113bb61180b565b73ffffffffffffffffffffffffffffffffffffffff811661140a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b61141381611b47565b50565b5f60208201803590600190839061142d9086612c61565b63ffffffff16815260208101919091526040015f20541492915050565b6114578383836001611e53565b505050565b5f8061146785611f98565b915081905083811015611241576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610bc4565b63ffffffff81165f90815260016020526040812054806109b1576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610bc4565b5f6115156115128787611fce565b90565b90505f6115408261152e6115298a8a611fe5565b612007565b61153b60208d018d612c61565b61203c565b90506028861115611626575f61157c61155f60608c0160408d0161330b565b61156c60208d018d612c61565b846115778c8c612070565b6120ba565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906115f79086908d905f908790600401613326565b5f604051808303815f87803b15801561160e575f80fd5b505af1158015611620573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61166c60208d018d612c61565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600660209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461175c578181101561174e576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610bc4565b61175c84848484035f611e53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166117b1576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8216611800576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b6114578383836120ec565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610e34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610bc4565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61190c85602001356118c686612293565b6118d360a0890189613199565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061230692505050565b90935090505f8161191e576001611921565b60025b90506119416119336020880188612c61565b826107f560808a018a613199565b60045490935073ffffffffffffffffffffffffffffffffffffffff1680156119f8576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906119b79088908890600401613364565b602060405180830381865afa1580156119d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f69190613388565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff168152602001611a71896114b0565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611aa69291906133a3565b6040805180830381865afa158015611ac0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae49190613474565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611b3c576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d5f83836120ec565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611c0a576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d825f836120ec565b5f5b8151811015611ce657611c46828281518110611c3557611c35613130565b602002602001015160400151611d16565b818181518110611c5857611c58613130565b60200260200101516040015160035f848481518110611c7957611c79613130565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611cb057611cb0613130565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611cdd91906134d2565b50600101611c17565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610e1891906135ee565b600281015161ffff8116600314610c8d57816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b611d63612747565b604080518082019091525f80825260208201525f80611d9833604089013560608a0135611d9360208c018c612c61565b612398565b915091505f80611da889846118b1565b9092509050611dd4611dbd60208b018b612c61565b8383611dce368d90038d018d613695565b8b6123bd565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611e22908d018d612c61565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff8416611ea2576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8316611ef1576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600660209081526040808320938716835292905220829055801561175c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611f8a91815260200190565b60405180910390a350505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000611fc481846136f2565b6109b1919061372a565b5f611fdc6020828486613089565b610c7491613741565b5f611ff4602860208486613089565b611ffd9161377d565b60c01c9392505050565b5f6109b17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff841661372a565b5f73ffffffffffffffffffffffffffffffffffffffff841661205e5761dead93505b6120688484611aed565b509092915050565b606061207f8260288186613089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b6060848484846040516020016120d394939291906137c5565b6040516020818303038152906040529050949350505050565b73ffffffffffffffffffffffffffffffffffffffff8316612123578060075f8282546121189190613842565b909155506121d39050565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260056020526040902054818110156121a8576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610bc4565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526005602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166121fc57600780548290039055612227565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526005602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161228691815260200190565b60405180910390a3505050565b5f806122bf7f0000000000000000000000000000000000000000000000000000000000000000846136f2565b905067ffffffffffffffff8111156109b1576040517fe2ce941300000000000000000000000000000000000000000000000000000000815260048101829052602401610bc4565b805160609015158061236757848460405160200161235392919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b60405160208183030381529060405261238e565b8484338560405160200161237e9493929190613855565b6040516020818303038152906040525b9150935093915050565b5f806123a585858561145c565b90925090506123b48683611bbb565b94509492505050565b6123c5612747565b5f6123d2845f01516124d0565b6020850151909150156123ec576123ec8460200151612510565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff1681526020016124498c6114b0565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b81526004016124849291906133a3565b60806040518083038185885af11580156124a0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906124c591906138ad565b979650505050505050565b5f81341461250c576040517f9f704120000000000000000000000000000000000000000000000000000000008152346004820152602401610bc4565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259e9190612e41565b905073ffffffffffffffffffffffffffffffffffffffff81166125ed576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805133602482018190527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff81811660448501526064808501889052855180860390910181526084909401909452602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001781528451610c8d96881695899361175c9388935f9283929091839182885af1806126c7576040513d5f823e3d81fd5b50505f513d915081156126de5780600114156126f8565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561175c576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610bc4565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161278660405180604001604052805f81526020015f81525090565b905290565b5f5b838110156127a557818101518382015260200161278d565b50505f910152565b5f81518084526127c481602086016020860161278b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610c7460208301846127ad565b73ffffffffffffffffffffffffffffffffffffffff81168114611413575f80fd5b5f806040838503121561283a575f80fd5b823561284581612808565b946020939093013593505050565b5f60e08284031215612863575f80fd5b50919050565b5f60208284031215612879575f80fd5b813567ffffffffffffffff81111561288f575f80fd5b610e5084828501612853565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612932578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261291f878901826127ad565b97505093820193908201906001016128d5565b50508751606088015250505060208501516080850152509050610e50565b5f60608284031215612863575f80fd5b5f8083601f840112612970575f80fd5b50813567ffffffffffffffff811115612987575f80fd5b60208301915083602082850101111561299e575f80fd5b9250929050565b5f805f805f805f60e0888a0312156129bb575f80fd5b6129c58989612950565b965060608801359550608088013567ffffffffffffffff808211156129e8575f80fd5b6129f48b838c01612960565b909750955060a08a01359150612a0982612808565b90935060c08901359080821115612a1e575f80fd5b50612a2b8a828b01612960565b989b979a50959850939692959293505050565b5f805f60608486031215612a50575f80fd5b8335612a5b81612808565b92506020840135612a6b81612808565b929592945050506040919091013590565b803563ffffffff81168114612a8f575f80fd5b919050565b5f8060408385031215612aa5575f80fd5b61284583612a7c565b8015158114611413575f80fd5b5f8060408385031215612acc575f80fd5b823567ffffffffffffffff811115612ae2575f80fd5b612aee85828601612853565b9250506020830135612aff81612aae565b809150509250929050565b8151815260208083015190820152604081016109b1565b803561ffff81168114612a8f575f80fd5b5f8060408385031215612b43575f80fd5b612b4c83612a7c565b9150612b5a60208401612b21565b90509250929050565b5f60208284031215612b73575f80fd5b8135610c7481612808565b5f805f8060a08587031215612b91575f80fd5b612b9b8686612950565b9350606085013567ffffffffffffffff811115612bb6575f80fd5b612bc287828801612960565b9094509250506080850135612bd681612808565b939692955090935050565b5f8083601f840112612bf1575f80fd5b50813567ffffffffffffffff811115612c08575f80fd5b6020830191508360208260051b850101111561299e575f80fd5b5f8060208385031215612c33575f80fd5b823567ffffffffffffffff811115612c49575f80fd5b612c5585828601612be1565b90969095509350505050565b5f60208284031215612c71575f80fd5b610c7482612a7c565b5f805f8060608587031215612c8d575f80fd5b612c9685612a7c565b9350612ca460208601612b21565b9250604085013567ffffffffffffffff811115612cbf575f80fd5b612ccb87828801612960565b95989497509550505050565b5f805f8385036080811215612cea575f80fd5b843567ffffffffffffffff811115612d00575f80fd5b612d0c87828801612853565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612d3e575f80fd5b506020840191506060840135612d5381612808565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff60208501511660208301526040840151612d99604084018280518252602090810151910152565b5082516080830152602083015160a0830152610c74565b5f8060408385031215612dc1575f80fd5b8235612dcc81612808565b91506020830135612aff81612808565b5f60608284031215612dec575f80fd5b610c748383612950565b600181811c90821680612e0a57607f821691505b602082108103612863577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208284031215612e51575f80fd5b8151610c7481612808565b5f60208284031215612e6c575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715612ec357612ec3612e73565b60405290565b6040805190810167ffffffffffffffff81118282101715612ec357612ec3612e73565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f3357612f33612e73565b604052919050565b5f67ffffffffffffffff821115612f5457612f54612e73565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612f9a57612f9a612e73565b8360051b6020612fab818301612eec565b868152918501918181019036841115612fc2575f80fd5b865b8481101561307d57803586811115612fda575f80fd5b88016060368290031215612fec575f80fd5b612ff4612ea0565b612ffd82612a7c565b815261300a868301612b21565b8682015260408083013589811115613020575f80fd5b929092019136601f840112613033575f80fd5b823561304661304182612f3b565b612eec565b8181523689838701011115613059575f80fd5b818986018a8301375f91810189019190915290820152845250918301918301612fc4565b50979650505050505050565b5f8085851115613097575f80fd5b838611156130a3575f80fd5b5050820193919092039150565b5f84516130c181846020890161278b565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610e506020830184866130d6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261318f575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126131cc575f80fd5b83018035915067ffffffffffffffff8211156131e6575f80fd5b60200191503681900382131561299e575f80fd5b67ffffffffffffffff81168114611413575f80fd5b63ffffffff61321d89612a7c565b168152602088013560208201525f6040890135613239816131fa565b67ffffffffffffffff811660408401525087606083015260e0608083015261326560e0830187896130d6565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c08401526132948185876130d6565b9a9950505050505050505050565b5f602082840312156132b2575f80fd5b815167ffffffffffffffff8111156132c8575f80fd5b8201601f810184136132d8575f80fd5b80516132e661304182612f3b565b8181528560208385010111156132fa575f80fd5b611ae482602083016020860161278b565b5f6020828403121561331b575f80fd5b8135610c74816131fa565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f610ceb60808301846127ad565b604081525f61337660408301856127ad565b8281036020840152611ae481856127ad565b5f60208284031215613398575f80fd5b8151610c7481612aae565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a060808401526133d860e08401826127ad565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a085015261341382826127ad565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215613456575f80fd5b61345e612ec9565b9050815181526020820151602082015292915050565b5f60408284031215613484575f80fd5b610c748383613446565b601f82111561145757805f5260205f20601f840160051c810160208510156134b35750805b601f840160051c820191505b818110156112e9575f81556001016134bf565b815167ffffffffffffffff8111156134ec576134ec612e73565b613500816134fa8454612df6565b8461348e565b602080601f831160018114613552575f841561351c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556135e6565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561359e5788860151825594840194600190910190840161357f565b50858210156135da57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015613687578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052613673818601836127ad565b968901969450505090860190600101613615565b509098975050505050505050565b5f604082840312156136a5575f80fd5b6136ad612ec9565b82358152602083013560208201528091505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f82613725577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109b1576109b16136c5565b803560208310156109b1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156137bd5780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161383281602c85016020870161278b565b91909101602c0195945050505050565b808201808211156109b1576109b16136c5565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f825161389d81604885016020870161278b565b9190910160480195945050505050565b5f608082840312156138bd575f80fd5b6138c5612ea0565b8251815260208301516138d7816131fa565b60208201526138e98460408501613446565b6040820152939250505056fea2646970667358221220a7e78c28d4976391911497373c3bfff426de060fa72d1fbc537e431a0fece95964736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b1c38038062001b1c833981016040819052620000339162000240565b808383600362000044838262000351565b50600462000053828262000351565b5050505f8062000069836200009b60201b60201c565b91509150816200007b5760126200007d565b805b60ff1660a05250506001600160a01b03166080525062000452915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691620000e3916200041d565b5f60405180830381855afa9150503d805f81146200011d576040519150601f19603f3d011682016040523d82523d5f602084013e62000122565b606091505b50915091508180156200013757506020815110155b156200016e575f818060200190518101906200015491906200043a565b905060ff81116200016c576001969095509350505050565b505b505f9485945092505050565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015620001aa57818101518382015260200162000190565b50505f910152565b5f82601f830112620001c2575f80fd5b81516001600160401b0380821115620001df57620001df6200017a565b604051601f8301601f19908116603f011681019082821181831017156200020a576200020a6200017a565b8160405283815286602085880101111562000223575f80fd5b620002368460208301602089016200018e565b9695505050505050565b5f805f6060848603121562000253575f80fd5b83516001600160401b03808211156200026a575f80fd5b6200027887838801620001b2565b945060208601519150808211156200028e575f80fd5b506200029d86828701620001b2565b604086015190935090506001600160a01b0381168114620002bc575f80fd5b809150509250925092565b600181811c90821680620002dc57607f821691505b602082108103620002fb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200034c57805f5260205f20601f840160051c81016020851015620003285750805b601f840160051c820191505b8181101562000349575f815560010162000334565b50505b505050565b81516001600160401b038111156200036d576200036d6200017a565b62000385816200037e8454620002c7565b8462000301565b602080601f831160018114620003bb575f8415620003a35750858301515b5f19600386901b1c1916600185901b17855562000415565b5f85815260208120601f198616915b82811015620003eb57888601518255948401946001909101908401620003ca565b50858210156200040957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251620004308184602087016200018e565b9190910192915050565b5f602082840312156200044b575f80fd5b5051919050565b60805160a051611693620004895f395f6105d301525f818161027c0152818161043101528181610a880152610bd601526116935ff3fe608060405234801561000f575f80fd5b50600436106101b0575f3560e01c806370a08231116100f3578063ba08765211610093578063ce96cb771161006e578063ce96cb77146103c3578063d905777e146103d6578063dd62ed3e146103e9578063ef8b30f7146103b0575f80fd5b8063ba0876521461039d578063c63d75b6146102a6578063c6e6f592146103b0575f80fd5b80639dc29fac116100ce5780639dc29fac14610351578063a9059cbb14610364578063b3d7f6b914610377578063b460af941461038a575f80fd5b806370a082311461030157806394bf804d1461033657806395d89b4114610349575f80fd5b806323b872dd1161015e578063402d267d11610139578063402d267d146102a657806340c10f19146102d95780634cdad506146101e45780636e553f65146102ee575f80fd5b806323b872dd14610235578063313ce5671461024857806338d52e0f14610262575f80fd5b8063095ea7b31161018e578063095ea7b3146101f75780630a28a4771461021a57806318160ddd1461022d575f80fd5b806301e1d114146101b457806306fdde03146101cf57806307a2d13a146101e4575b5f80fd5b6101bc61042e565b6040519081526020015b60405180910390f35b6101d76104e3565b6040516101c69190611222565b6101bc6101f236600461128c565b610573565b61020a6102053660046112cb565b610584565b60405190151581526020016101c6565b6101bc61022836600461128c565b61059b565b6002546101bc565b61020a6102433660046112f3565b6105a7565b6102506105cc565b60405160ff90911681526020016101c6565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c6565b6101bc6102b436600461132c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b6102ec6102e73660046112cb565b6105f7565b005b6101bc6102fc366004611345565b610605565b6101bc61030f36600461132c565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b6101bc610344366004611345565b610655565b6101d761068f565b6102ec61035f3660046112cb565b61069e565b61020a6103723660046112cb565b6106a8565b6101bc61038536600461128c565b6106b5565b6101bc61039836600461136f565b6106c1565b6101bc6103ab36600461136f565b610750565b6101bc6103be36600461128c565b6107d6565b6101bc6103d136600461132c565b6107e1565b6101bc6103e436600461132c565b610810565b6101bc6103f73660046113a8565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b5f7f00000000000000000000000000000000000000000000000000000000000000006040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa1580156104ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104de91906113d0565b905090565b6060600380546104f2906113e7565b80601f016020809104026020016040519081016040528092919081815260200182805461051e906113e7565b80156105695780601f1061054057610100808354040283529160200191610569565b820191905f5260205f20905b81548152906001019060200180831161054c57829003601f168201915b5050505050905090565b5f61057e825f61083a565b92915050565b5f33610591818585610872565b5060019392505050565b5f61057e826001610884565b5f336105b48582856108b3565b6105bf858585610980565b60019150505b9392505050565b5f6104de817f0000000000000000000000000000000000000000000000000000000000000000611465565b6106018282610a29565b5050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610635565b60405180910390fd5b5f61063f856107d6565b905061064d33858784610a83565b949350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f610681856106b5565b905061064d33858388610a83565b6060600480546104f2906113e7565b6106018282610b2f565b5f33610591818585610980565b5f61057e82600161083a565b5f806106cc836107e1565b90508085111561072e576040517ffe9cceec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107388661059b565b90506107473386868985610b89565b95945050505050565b5f8061075b83610810565b9050808511156107bd576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107c786610573565b9050610747338686848a610b89565b5f61057e825f610884565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e905f61083a565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e565b5f6105c561084661042e565b61085190600161147e565b61085c5f600a6115af565b600254610869919061147e565b85919085610c8a565b61087f8383836001610ccc565b505050565b5f6105c561089382600a6115af565b6002546108a0919061147e565b6108a861042e565b61086990600161147e565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461097a578181101561096c576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018290526044810183905260640161062c565b61097a84848484035f610ccc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109cf576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8216610a1e576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b61087f838383610e03565b73ffffffffffffffffffffffffffffffffffffffff8216610a78576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b6106015f8383610e03565b610aaf7f0000000000000000000000000000000000000000000000000000000000000000853085610faa565b610ab98382610a29565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051610b21929190918252602082015260400190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b7e576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b610601825f83610e03565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610bc757610bc78386836108b3565b610bd18382610b2f565b610bfc7f00000000000000000000000000000000000000000000000000000000000000008584611033565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051610c7b929190918252602082015260400190565b60405180910390a45050505050565b5f610cb7610c9783611071565b8015610cb257505f8480610cad57610cad6115bd565b868809115b151590565b610cc286868661109d565b610747919061147e565b73ffffffffffffffffffffffffffffffffffffffff8416610d1b576040517fe602df050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8316610d6a576040517f94280d620000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600160209081526040808320938716835292905220829055801561097a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b2191815260200190565b73ffffffffffffffffffffffffffffffffffffffff8316610e3a578060025f828254610e2f919061147e565b90915550610eea9050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020819052604090205481811015610ebf576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602481018290526044810183905260640161062c565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610f1357600280548290039055610f3e565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f9d91815260200190565b60405180910390a3505050565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283811660448301526064820183905261097a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611172565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261087f91859182169063a9059cbb90606401610fec565b5f6002826003811115611086576110866115ea565b6110909190611617565b60ff166001149050919050565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f036110f0578382816110e6576110e66115bd565b04925050506105c5565b808411611107576111076003851502601118611211565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f8060205f8451602086015f885af180611191576040513d5f823e3d81fd5b50505f513d915081156111a85780600114156111c2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561097a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161062c565b634e487b715f52806020526024601cfd5b5f602080835283518060208501525f5b8181101561124e57858101830151858201604001528201611232565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f6020828403121561129c575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112c6575f80fd5b919050565b5f80604083850312156112dc575f80fd5b6112e5836112a3565b946020939093013593505050565b5f805f60608486031215611305575f80fd5b61130e846112a3565b925061131c602085016112a3565b9150604084013590509250925092565b5f6020828403121561133c575f80fd5b6105c5826112a3565b5f8060408385031215611356575f80fd5b82359150611366602084016112a3565b90509250929050565b5f805f60608486031215611381575f80fd5b83359250611391602085016112a3565b915061139f604085016112a3565b90509250925092565b5f80604083850312156113b9575f80fd5b6113c2836112a3565b9150611366602084016112a3565b5f602082840312156113e0575f80fd5b5051919050565b600181811c908216806113fb57607f821691505b602082108103611432577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff818116838216019081111561057e5761057e611438565b8082018082111561057e5761057e611438565b600181815b808511156114ea57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156114d0576114d0611438565b808516156114dd57918102915b93841c9390800290611496565b509250929050565b5f826115005750600161057e565b8161150c57505f61057e565b8160018114611522576002811461152c57611548565b600191505061057e565b60ff84111561153d5761153d611438565b50506001821b61057e565b5060208310610133831016604e8410600b841016171561156b575081810a61057e565b6115758383611491565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156115a7576115a7611438565b029392505050565b5f6105c560ff8416836114f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff83168061164e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff8416069150509291505056fea2646970667358221220e4c7204716e83cc6436d4c089c98eaebf1301b2ac725b313f068e28e347d110264736f6c6343000816003360e060405234801562000010575f80fd5b506040516200355f3803806200355f833981016040819052620000339162000240565b828282826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000099919062000287565b8282818181813380620000c557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000d081620001d0565b506001600160a01b038083166080528116620000ff57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b15801562000144575f80fd5b505af115801562000157573d5f803e3d5ffd5b50505050505050506200016f6200021f60201b60201c565b60ff168360ff16101562000196576040516301e9714b60e41b815260040160405180910390fd5b620001a3600684620002c4565b620001b090600a620003df565b60a0525050506001600160a01b0390921660c05250620003ef9350505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b80516001600160a01b03811681146200023b575f80fd5b919050565b5f805f6060848603121562000253575f80fd5b6200025e8462000224565b92506200026e6020850162000224565b91506200027e6040850162000224565b90509250925092565b5f6020828403121562000298575f80fd5b815160ff81168114620002a9575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b60ff8281168282160390811115620002e057620002e0620002b0565b92915050565b600181815b808511156200032657815f19048211156200030a576200030a620002b0565b808516156200031857918102915b93841c9390800290620002eb565b509250929050565b5f826200033e57506001620002e0565b816200034c57505f620002e0565b8160018114620003655760028114620003705762000390565b6001915050620002e0565b60ff841115620003845762000384620002b0565b50506001821b620002e0565b5060208310610133831016604e8410600b8410161715620003b5575081810a620002e0565b620003c18383620002e6565b805f1904821115620003d757620003d7620002b0565b029392505050565b5f620002a960ff8416836200032e565b60805160a05160c0516130f16200046e5f395f818161069e015281816119b40152611b9001525f8181610514015281816118f10152818161196a0152611a6601525f81816104110152818161088301528181610f6d015281816112810152818161156601528181611bf201528181611de90152611ee001526130f15ff3fe6080604052600436106101f5575f3560e01c806382413eac11610117578063bc70b354116100ac578063d045a0dc1161007c578063f2fde38b11610062578063f2fde38b14610671578063fc0c546a14610690578063ff7bd03d146106c2575f80fd5b8063d045a0dc1461063f578063d424388514610652575f80fd5b8063bc70b354146105cd578063bd815db0146105ec578063c7c7f5b3146105ff578063ca5eb5e114610620575f80fd5b80639f68b964116100e75780639f68b96414610544578063b731ea0a14610557578063b98bd07014610583578063bb0b6a53146105a2575f80fd5b806382413eac146104a0578063857749b0146104bf5780638da5cb5b146104da578063963efcaa14610503575f80fd5b80633b6f743b1161018d5780635e280f111161015d5780635e280f11146104005780636fc1b31e14610433578063715018a6146104525780637d25a05e14610466575f80fd5b80633b6f743b1461035157806352ae28791461037d5780635535d4611461038f5780635a0dfe4d146103bb575f80fd5b8063156a0d0f116101c8578063156a0d0f146102bd57806317442b70146102fd5780631f5e13341461031e5780633400288b14610332575f80fd5b80630d35b415146101f9578063111ecdad1461023057806313137d6514610281578063134d4f2514610296575b5f80fd5b348015610204575f80fd5b50610218610213366004611ffe565b6106e1565b6040516102279392919061209b565b60405180910390f35b34801561023b575f80fd5b5060045461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610227565b61029461028f3660046121c6565b610881565b005b3480156102a1575f80fd5b506102aa600281565b60405161ffff9091168152602001610227565b3480156102c8575f80fd5b50604080517f02e49c2c0000000000000000000000000000000000000000000000000000000081526001602082015201610227565b348015610308575f80fd5b5060408051600181526002602082015201610227565b348015610329575f80fd5b506102aa600181565b34801561033d575f80fd5b5061029461034c366004612277565b610980565b34801561035c575f80fd5b5061037061036b3660046122ac565b610996565b60405161022791906122fb565b348015610388575f80fd5b503061025c565b34801561039a575f80fd5b506103ae6103a9366004612323565b6109fc565b6040516102279190612354565b3480156103c6575f80fd5b506103f06103d5366004612277565b63ffffffff919091165f908152600160205260409020541490565b6040519015158152602001610227565b34801561040b575f80fd5b5061025c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043e575f80fd5b5061029461044d366004612366565b610a9e565b34801561045d575f80fd5b50610294610b20565b348015610471575f80fd5b50610487610480366004612277565b5f92915050565b60405167ffffffffffffffff9091168152602001610227565b3480156104ab575f80fd5b506103f06104ba366004612381565b610b33565b3480156104ca575f80fd5b5060405160068152602001610227565b3480156104e5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661025c565b34801561050e575f80fd5b506105367f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610227565b34801561054f575f80fd5b5060016103f0565b348015610562575f80fd5b5060025461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561058e575f80fd5b5061029461059d366004612425565b610b55565b3480156105ad575f80fd5b506105366105bc366004612464565b60016020525f908152604090205481565b3480156105d8575f80fd5b506103ae6105e736600461247d565b610b6f565b6102946105fa366004612425565b610d29565b61061261060d3660046124da565b610eed565b604051610227929190612561565b34801561062b575f80fd5b5061029461063a366004612366565b610f20565b61029461064d3660046121c6565b610fc7565b34801561065d575f80fd5b5061029461066c366004612366565b61100f565b34801561067c575f80fd5b5061029461068b366004612366565b61108a565b34801561069b575f80fd5b507f000000000000000000000000000000000000000000000000000000000000000061025c565b3480156106cd575f80fd5b506103f06106dc3660046125b3565b6110ed565b604080518082019091525f8082526020820152606061071160405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078091906125cd565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ec91906125e8565b604080518082018252848152602080820184905282515f8082529181019093529097509192509061083f565b604080518082019091525f8152606060208201528152602001906001900390816108185790505b5093505f80610863604089013560608a013561085e60208c018c612464565b611121565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146108f7576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b602087018035906109119061090c908a612464565b611175565b14610968576109236020880188612464565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602088013560248201526044016108ee565b610977878787878787876111c9565b50505050505050565b61098861135a565b61099282826113ac565b5050565b604080518082019091525f80825260208201525f6109c46040850135606086013561085e6020880188612464565b9150505f806109d38684611400565b90925090506109f06109e86020880188612464565b838388611551565b93505050505b92915050565b600360209081525f928352604080842090915290825290208054610a1f9061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4b9061262c565b8015610a965780601f10610a6d57610100808354040283529160200191610a96565b820191905f5260205f20905b815481529060010190602001808311610a7957829003601f168201915b505050505081565b610aa661135a565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610b2861135a565b610b315f61163c565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b610b5d61135a565b610992610b6a8284612757565b6116b0565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ba29061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bce9061262c565b8015610c195780601f10610bf057610100808354040283529160200191610c19565b820191905f5260205f20905b815481529060010190602001808311610bfc57829003601f168201915b5050505050905080515f03610c675783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610b4d9350505050565b5f839003610c76579050610b4d565b60028310610cf357610cbc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506117b192505050565b80610cca8460028188612860565b604051602001610cdc93929190612887565b604051602081830303815290604052915050610b4d565b83836040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9291906128f4565b5f5b81811015610e2c5736838383818110610d4657610d46612907565b9050602002810190610d589190612934565b9050610d8a610d6a6020830183612464565b602083013563ffffffff919091165f908152600160205260409020541490565b610d945750610e24565b3063d045a0dc60c08301358360a0810135610db3610100830183612970565b610dc4610100890160e08a01612366565b610dd26101208a018a612970565b6040518963ffffffff1660e01b8152600401610df497969594939291906129e6565b5f604051808303818588803b158015610e0b575f80fd5b505af1158015610e1d573d5f803e3d5ffd5b5050505050505b600101610d2b565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015610e75573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610eba9190810190612a79565b6040517f8351eea70000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b610ef5611fa4565b604080518082019091525f8082526020820152610f138585856117f6565b915091505b935093915050565b610f2861135a565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b158015610fae575f80fd5b505af1158015610fc0573d5f803e3d5ffd5b5050505050565b333014611000576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097787878787878787610968565b61101761135a565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610b15565b61109261135a565b73ffffffffffffffffffffffffffffffffffffffff81166110e1576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016108ee565b6110ea8161163c565b50565b5f6020820180359060019083906111049086612464565b63ffffffff16815260208101919091526040015f20541492915050565b5f8061112c856118ee565b915081905083811015610f18576040517f71c4efed00000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016108ee565b63ffffffff81165f90815260016020526040812054806109f6576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff841660048201526024016108ee565b5f6111da6111d78787611924565b90565b90505f611205826111f36111ee8a8a611942565b611964565b61120060208d018d612464565b611999565b905060288611156112eb575f61124161122460608c0160408d01612ae2565b61123160208d018d612464565b8461123c8c8c6119e3565b611a2d565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112bc9086908d905f908790600401612afd565b5f604051808303815f87803b1580156112d3575f80fd5b505af11580156112e5573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61133160208d018d612464565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b31576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016108ee565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61145b856020013561141586611a5f565b61142260a0890189612970565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611ad292505050565b90935090505f8161146d576001611470565b60025b90506114906114826020880188612464565b826105e760808a018a612970565b60045490935073ffffffffffffffffffffffffffffffffffffffff168015611547576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906115069088908890600401612b45565b602060405180830381865afa158015611521573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115459190612b69565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff1681526020016115c089611175565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016115f5929190612b84565b6040805180830381865afa15801561160f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116339190612c55565b95945050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b8151811015611781576116e18282815181106116d0576116d0612907565b6020026020010151604001516117b1565b8181815181106116f3576116f3612907565b60200260200101516040015160035f84848151811061171457611714612907565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f84848151811061174b5761174b612907565b60200260200101516020015161ffff1661ffff1681526020019081526020015f2090816117789190612cb3565b506001016116b2565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610b159190612dcf565b600281015161ffff811660031461099257816040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b6117fe611fa4565b604080518082019091525f80825260208201525f8061183333604089013560608a013561182e60208c018c612464565b611b64565b915091505f806118438984611400565b909250905061186f61185860208b018b612464565b8383611869368d90038d018d612e76565b8b611bc1565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118bd908d018d612464565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b5f7f000000000000000000000000000000000000000000000000000000000000000061191a8184612ea6565b6109f69190612ede565b5f6119326020828486612860565b61193b91612f1a565b9392505050565b5f611951602860208486612860565b61195a91612f56565b60c01c9392505050565b5f6109f67f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff8416612ede565b5f6119db73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585611cd4565b509092915050565b60606119f28260288186612860565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606084848484604051602001611a469493929190612f9e565b6040516020818303038152906040529050949350505050565b5f80611a8b7f000000000000000000000000000000000000000000000000000000000000000084612ea6565b905067ffffffffffffffff8111156109f6576040517fe2ce9413000000000000000000000000000000000000000000000000000000008152600481018290526024016108ee565b8051606090151580611b33578484604051602001611b1f92919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b604051602081830303815290604052611b5a565b84843385604051602001611b4a949392919061301b565b6040516020818303038152906040525b9150935093915050565b5f80611b71858585611121565b9092509050611bb873ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016873085611d5a565b94509492505050565b611bc9611fa4565b5f611bd6845f0151611da6565b602085015190915015611bf057611bf08460200151611de6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff168152602001611c4d8c611175565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b8152600401611c88929190612b84565b60806040518083038185885af1158015611ca4573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611cc99190613073565b979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052611d5591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611f05565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052611da09186918216906323b872dd90608401611d0e565b50505050565b5f813414611de2576040517f9f7041200000000000000000000000000000000000000000000000000000000081523460048201526024016108ee565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7491906125cd565b905073ffffffffffffffffffffffffffffffffffffffff8116611ec3576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61099273ffffffffffffffffffffffffffffffffffffffff8216337f000000000000000000000000000000000000000000000000000000000000000085611d5a565b5f8060205f8451602086015f885af180611f24576040513d5f823e3d81fd5b50505f513d91508115611f3b578060011415611f55565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611da0576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016108ee565b60405180606001604052805f80191681526020015f67ffffffffffffffff168152602001611fe360405180604001604052805f81526020015f81525090565b905290565b5f60e08284031215611ff8575f80fd5b50919050565b5f6020828403121561200e575f80fd5b813567ffffffffffffffff811115612024575f80fd5b610b4d84828501611fe8565b5f5b8381101561204a578181015183820152602001612032565b50505f910152565b5f8151808452612069816020860160208601612030565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612132578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261211f87890182612052565b97505093820193908201906001016120d5565b50508751606088015250505060208501516080850152509050610b4d565b5f60608284031215611ff8575f80fd5b5f8083601f840112612170575f80fd5b50813567ffffffffffffffff811115612187575f80fd5b60208301915083602082850101111561219e575f80fd5b9250929050565b73ffffffffffffffffffffffffffffffffffffffff811681146110ea575f80fd5b5f805f805f805f60e0888a0312156121dc575f80fd5b6121e68989612150565b965060608801359550608088013567ffffffffffffffff80821115612209575f80fd5b6122158b838c01612160565b909750955060a08a0135915061222a826121a5565b90935060c0890135908082111561223f575f80fd5b5061224c8a828b01612160565b989b979a50959850939692959293505050565b803563ffffffff81168114612272575f80fd5b919050565b5f8060408385031215612288575f80fd5b6122918361225f565b946020939093013593505050565b80151581146110ea575f80fd5b5f80604083850312156122bd575f80fd5b823567ffffffffffffffff8111156122d3575f80fd5b6122df85828601611fe8565b92505060208301356122f08161229f565b809150509250929050565b8151815260208083015190820152604081016109f6565b803561ffff81168114612272575f80fd5b5f8060408385031215612334575f80fd5b61233d8361225f565b915061234b60208401612312565b90509250929050565b602081525f61193b6020830184612052565b5f60208284031215612376575f80fd5b813561193b816121a5565b5f805f8060a08587031215612394575f80fd5b61239e8686612150565b9350606085013567ffffffffffffffff8111156123b9575f80fd5b6123c587828801612160565b90945092505060808501356123d9816121a5565b939692955090935050565b5f8083601f8401126123f4575f80fd5b50813567ffffffffffffffff81111561240b575f80fd5b6020830191508360208260051b850101111561219e575f80fd5b5f8060208385031215612436575f80fd5b823567ffffffffffffffff81111561244c575f80fd5b612458858286016123e4565b90969095509350505050565b5f60208284031215612474575f80fd5b61193b8261225f565b5f805f8060608587031215612490575f80fd5b6124998561225f565b93506124a760208601612312565b9250604085013567ffffffffffffffff8111156124c2575f80fd5b6124ce87828801612160565b95989497509550505050565b5f805f83850360808112156124ed575f80fd5b843567ffffffffffffffff811115612503575f80fd5b61250f87828801611fe8565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612541575f80fd5b506020840191506060840135612556816121a5565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff6020850151166020830152604084015161259c604084018280518252602090810151910152565b5082516080830152602083015160a083015261193b565b5f606082840312156125c3575f80fd5b61193b8383612150565b5f602082840312156125dd575f80fd5b815161193b816121a5565b5f602082840312156125f8575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b600181811c9082168061264057607f821691505b602082108103611ff8577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b6040516060810167ffffffffffffffff8111828210171561269a5761269a6125ff565b60405290565b6040805190810167ffffffffffffffff8111828210171561269a5761269a6125ff565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561270a5761270a6125ff565b604052919050565b5f67ffffffffffffffff82111561272b5761272b6125ff565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612771576127716125ff565b8360051b60206127828183016126c3565b868152918501918181019036841115612799575f80fd5b865b84811015612854578035868111156127b1575f80fd5b880160603682900312156127c3575f80fd5b6127cb612677565b6127d48261225f565b81526127e1868301612312565b86820152604080830135898111156127f7575f80fd5b929092019136601f84011261280a575f80fd5b823561281d61281882612712565b6126c3565b8181523689838701011115612830575f80fd5b818986018a8301375f9181018901919091529082015284525091830191830161279b565b50979650505050505050565b5f808585111561286e575f80fd5b8386111561287a575f80fd5b5050820193919092039150565b5f8451612898818460208901612030565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610b4d6020830184866128ad565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112612966575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129a3575f80fd5b83018035915067ffffffffffffffff8211156129bd575f80fd5b60200191503681900382131561219e575f80fd5b67ffffffffffffffff811681146110ea575f80fd5b63ffffffff6129f48961225f565b168152602088013560208201525f6040890135612a10816129d1565b67ffffffffffffffff811660408401525087606083015260e06080830152612a3c60e0830187896128ad565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c0840152612a6b8185876128ad565b9a9950505050505050505050565b5f60208284031215612a89575f80fd5b815167ffffffffffffffff811115612a9f575f80fd5b8201601f81018413612aaf575f80fd5b8051612abd61281882612712565b818152856020838501011115612ad1575f80fd5b611633826020830160208601612030565b5f60208284031215612af2575f80fd5b813561193b816129d1565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f612b3b6080830184612052565b9695505050505050565b604081525f612b576040830185612052565b82810360208401526116338185612052565b5f60208284031215612b79575f80fd5b815161193b8161229f565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a06080840152612bb960e0840182612052565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a0850152612bf48282612052565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215612c37575f80fd5b612c3f6126a0565b9050815181526020820151602082015292915050565b5f60408284031215612c65575f80fd5b61193b8383612c27565b601f821115611d5557805f5260205f20601f840160051c81016020851015612c945750805b601f840160051c820191505b81811015610fc0575f8155600101612ca0565b815167ffffffffffffffff811115612ccd57612ccd6125ff565b612ce181612cdb845461262c565b84612c6f565b602080601f831160018114612d33575f8415612cfd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612dc7565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612d7f57888601518255948401946001909101908401612d60565b5085821015612dbb57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015612e68578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612e5481860183612052565b968901969450505090860190600101612df6565b509098975050505050505050565b5f60408284031215612e86575f80fd5b612e8e6126a0565b82358152602083013560208201528091505092915050565b5f82612ed9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109f6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b803560208310156109f6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015612f965780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161300b81602c850160208701612030565b91909101602c0195945050505050565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f8251613063816048850160208701612030565b9190910160480195945050505050565b5f60808284031215613083575f80fd5b61308b612677565b82518152602083015161309d816129d1565b60208201526130af8460408501612c27565b6040820152939250505056fea26469706673582212201d2eeb249efab86d32800173e736d788fc450154b978b7660829bc5ead288d1364736f6c6343000816003361016060405234801562000011575f80fd5b50604051620024be380380620024be833981016040819052620000349162000608565b60015f556001600160a01b03808416608052821660a081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa15801562000087573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000659565b6001600160a01b0390811660c052811660e081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa158015620000fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000122919062000659565b6001600160a01b0316610100816001600160a01b03168152505060a0516001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a1919062000659565b6001600160a01b03166101208190526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620001ea573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200021091906200067e565b63ffffffff1661014052608051610100516001600160a01b039081169116146200026c576101005160805160405163070bc55b60e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b6080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d1919062000659565b6001600160a01b031660c0516001600160a01b031614620003815760c0516080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000354919062000659565b60405163ba9d665f60e01b81526001600160a01b0392831660048201529116602482015260440162000263565b60e0516001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e69190620006a3565b620004145760e051604051637e0a8a5760e11b81526001600160a01b03909116600482015260240162000263565b60c05160405163095ea7b360e01b81526001600160a01b0385811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af115801562000465573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200048b9190620006a3565b506101005160405163095ea7b360e01b81526001600160a01b0383811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620004de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005049190620006a3565b50816001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000542573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005689190620006a3565b15620005e75760c05160405163095ea7b360e01b81526001600160a01b0384811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620005bf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005e59190620006a3565b505b505050620006c4565b6001600160a01b038116811462000605575f80fd5b50565b5f805f606084860312156200061b575f80fd5b83516200062881620005f0565b60208501519093506200063b81620005f0565b60408501519092506200064e81620005f0565b809150509250925092565b5f602082840312156200066a575f80fd5b81516200067781620005f0565b9392505050565b5f602082840312156200068f575f80fd5b815163ffffffff8116811462000677575f80fd5b5f60208284031215620006b4575f80fd5b8151801515811462000677575f80fd5b60805160a05160c05160e051610100516101205161014051611d246200079a5f395f81816102a5015261111301525f8181610200015261096b01525f818161027201528181610375015261119101525f818161018701528181610a1d0152610d4d01525f81816101540152818161031101526111b701525f818160e2015281816103be015281816108dd015281816109c601528181610da7015261113e01525f81816101ba015281816104560152818161055701528181610627015281816107230152818161104201526113290152611d245ff3fe6080604052600436106100c6575f3560e01c80636fad06f511610071578063a99ecc541161004c578063a99ecc5414610261578063aa72fe3f14610294578063d0a10260146102dc575f80fd5b80636fad06f5146101ef5780637e6e1e10146102225780639a6b198c1461024e575f80fd5b8063369caf83116100a1578063369caf8314610176578063411557d1146101a957806353174fa4146101dc575f80fd5b80630bfec755146100d157806319197ec61461012e5780631df34fa314610143575f80fd5b366100cd57005b5f80fd5b3480156100dc575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c36600461160e565b6102ef565b005b34801561014e575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b348015610181575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b4575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b6101416101ea36600461160e565b610353565b3480156101fa575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561022d575f80fd5b5061024161023c366004611661565b6103a9565b60405161012591906116c5565b61014161025c3660046116dc565b610843565b34801561026c575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561029f575f80fd5b506102c77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610125565b6101416102ea36600461177c565b610953565b6102f7610c50565b61033973ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d20565b61034e60015f55565b505050565b61035b610c50565b61039d73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d7a565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036105e0576040517fd905777e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063d905777e90602401602060405180830381865afa15801561049d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c19190611813565b905080841115610528576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716600482015260248101859052604481018290526064015b60405180910390fd5b6040517f4cdad506000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634cdad50690602401602060405180830381865afa1580156105b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d59190611813565b6040840152506107a8565b6040517f402d267d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063402d267d90602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611813565b9050808411156106f4576040517f79012fb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602481018590526044810182905260640161051f565b6040517fef8b30f7000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef8b30f790602401602060405180830381865afa15801561077d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a19190611813565b6040840152505b6040517f3b6f743b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690633b6f743b906107fc9085905f9060040161190a565b6040805180830381865afa158015610816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a919061197a565b95945050505050565b33301461087e576040517fa19dbf0000000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b5f808380602001905181019061089491906119e9565b91509150803410156108db576040517f7cb769dc0000000000000000000000000000000000000000000000000000000081526004810182905234602482015260440161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361093f5761093a85848432610d20565b61094b565b61094b85848432610d7a565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146109c4576040517f91ac5e4f00000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015610a6c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15610abb576040517f84fb3f0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816600482015260240161051f565b5f610ac68686610dcd565b90505f610ad38787610dee565b90505f610ae08888610dfd565b6040517f9a6b198c0000000000000000000000000000000000000000000000000000000081529091503090639a6b198c903490610b27908e90889087908990600401611ad0565b5f604051808303818588803b158015610b3e575f80fd5b505af193505050508015610b50575060015b610c19573d808015610b7d576040519150601f19603f3d011682016040523d82523d5f602084013e610b82565b606091505b507f7cb769dc00000000000000000000000000000000000000000000000000000000610bad82611b15565b7fffffffff000000000000000000000000000000000000000000000000000000001603610bdc57805181602001fd5b610be98b8a8a8632610e47565b6040518a907ffe509803c09416b28ff3d8f690c8b0c61462a892c46d5430c8fb20abe472daf0905f90a250610c44565b60405189907f27b5aea9f5736c02241d8a0272e9ec988ea44cf85c4b4760329431aa19678394905f90a25b50505050505050505050565b60025f5403610c8b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052610d1a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610f6c565b50505050565b5f610d2b858561100b565b9050610d3b8184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5050505050565b5f610d8585856112eb565b9050610d958184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5f610ddc604c602c8486611b64565b610de591611b8b565b90505b92915050565b5f610ddc602c600c8486611b64565b6060610e0c82604c8186611b64565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b610e8c6040518060e001604052805f63ffffffff1681526020015f80191681526020015f81526020015f81526020016060815260200160608152602001606081525090565b610e96858561136d565b63ffffffff168152610ea88585610dcd565b602080830191909152604080830185905280518082018252348082525f9382019390935290517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89169263c7c7f5b3929091610f219186918890600401611bc7565b60c06040518083038185885af1158015610f3d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f629190611c16565b5050505050505050565b5f8060205f8451602086015f885af180610f8b576040513d5f823e3d81fd5b50505f513d91508115610fa2578060011415610fbc565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610d1a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161051f565b6040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018290523060248201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636e553f65906044015b6020604051808303815f875af115801561109e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de59190611813565b80821015611106576040517f71c4efed000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161051f565b5050565b815163ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116911603611242575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146111b5577f00000000000000000000000000000000000000000000000000000000000000006111d7565b7f00000000000000000000000000000000000000000000000000000000000000005b90503415611211576040517f7578d2bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1a61121f846020015190565b604085015173ffffffffffffffffffffffffffffffffffffffff8416919061138f565b604080518082018252348082525f602083015291517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169263c7c7f5b39290916112aa9187918790600401611bc7565b60c06040518083038185885af11580156112c6573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d739190611c16565b6040517fba08765200000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ba08765290606401611082565b5f61137c600c60088486611b64565b61138591611ca6565b60e01c9392505050565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261034e91859182169063a9059cbb90606401610cd3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff8111828210171561141d5761141d6113cd565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561146a5761146a6113cd565b604052919050565b63ffffffff81168114611483575f80fd5b50565b803561149181611472565b919050565b5f67ffffffffffffffff8211156114af576114af6113cd565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126114ea575f80fd5b81356114fd6114f882611496565b611423565b818152846020838601011115611511575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0828403121561153d575f80fd5b6115456113fa565b905061155082611486565b8152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff8082111561158a575f80fd5b611596858386016114db565b608084015260a08401359150808211156115ae575f80fd5b6115ba858386016114db565b60a084015260c08401359150808211156115d2575f80fd5b506115df848285016114db565b60c08301525092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611491575f80fd5b5f805f60608486031215611620575f80fd5b83359250602084013567ffffffffffffffff81111561163d575f80fd5b6116498682870161152d565b925050611658604085016115eb565b90509250925092565b5f805f8060808587031215611674575f80fd5b61167d856115eb565b935061168b602086016115eb565b925060408501359150606085013567ffffffffffffffff8111156116ad575f80fd5b6116b98782880161152d565b91505092959194509250565b815181526020808301519082015260408101610de8565b5f805f80608085870312156116ef575f80fd5b6116f8856115eb565b935060208501359250604085013567ffffffffffffffff81111561171a575f80fd5b611726878288016114db565b949793965093946060013593505050565b5f8083601f840112611747575f80fd5b50813567ffffffffffffffff81111561175e575f80fd5b602083019150836020828501011115611775575f80fd5b9250929050565b5f805f805f805f60a0888a031215611792575f80fd5b61179b886115eb565b965060208801359550604088013567ffffffffffffffff808211156117be575f80fd5b6117ca8b838c01611737565b90975095508591506117de60608b016115eb565b945060808a01359150808211156117f3575f80fd5b506118008a828b01611737565b989b979a50959850939692959293505050565b5f60208284031215611823575f80fd5b5051919050565b5f5b8381101561184457818101518382015260200161182c565b50505f910152565b5f815180845261186381602086016020860161182a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526118d760e085018261184c565b905060a083015184820360a08601526118f0828261184c565b91505060c083015184820360c086015261083a828261184c565b604081525f61191c6040830185611895565b905082151560208301529392505050565b5f6040828403121561193d575f80fd5b6040516040810181811067ffffffffffffffff82111715611960576119606113cd565b604052825181526020928301519281019290925250919050565b5f6040828403121561198a575f80fd5b610de5838361192d565b805161149181611472565b5f82601f8301126119ae575f80fd5b81516119bc6114f882611496565b8181528460208386010111156119d0575f80fd5b6119e182602083016020870161182a565b949350505050565b5f80604083850312156119fa575f80fd5b825167ffffffffffffffff80821115611a11575f80fd5b9084019060e08287031215611a24575f80fd5b611a2c6113fa565b611a3583611994565b8152602083015160208201526040830151604082015260608301516060820152608083015182811115611a66575f80fd5b611a728882860161199f565b60808301525060a083015182811115611a89575f80fd5b611a958882860161199f565b60a08301525060c083015182811115611aac575f80fd5b611ab88882860161199f565b60c08301525060209590950151949694955050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f611b04608083018561184c565b905082606083015295945050505050565b5f815160208301517fffffffff0000000000000000000000000000000000000000000000000000000080821693506004831015611b5c5780818460040360031b1b83161693505b505050919050565b5f8085851115611b72575f80fd5b83861115611b7e575f80fd5b5050820193919092039150565b80356020831015610de8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b608081525f611bd96080830186611895565b9050611bf2602083018580518252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff83166060830152949350505050565b5f8082840360c0811215611c28575f80fd5b6080811215611c35575f80fd5b506040516060810167ffffffffffffffff8282108183111715611c5a57611c5a6113cd565b8160405285518352602086015191508082168214611c76575f80fd5b506020820152611c89856040860161192d565b60408201529150611c9d846080850161192d565b90509250929050565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611ce65780818660040360031b1b83161692505b50509291505056fea26469706673582212203c210af0c85b10469f135dd49d1274fa8e04b8bee0c2069213c4acfe2a3036b564736f6c63430008160033608060405234801561000f575f80fd5b50610a8c8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e5c5e9a31461002d575b5f80fd5b61004061003b3660046106f8565b610057565b60405161004e9291906107cf565b60405180910390f35b606080610064848461006f565b915091509250929050565b60608060028310156100b4576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f6100c260028286886107fc565b6100cb91610823565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161029357805f5b86831015610220575f61011460018501858a8c6107fc565b61011d9161086b565b60f81c90505f81900361015e576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016100ab565b8160ff165f03610170578091506101ac565b8160ff168160ff16146101ac57365f61018b86868c8e6107fc565b9150915061019c89898685856102aa565b9099509750859450919250829150505b60018401935f906101c290600301868b8d6107fc565b6101cb91610823565b60f01c90505f81900361020d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016100ab565b8060020161ffff168501945050506100fc565b82871461025c576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016100ab565b600287111561028c57365f61027385858b8d6107fc565b9150915061028488888585856102aa565b909850965050505b50506102a1565b61029e82878761041d565b93505b50509250929050565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161034457865115610307578684846040516020016102f3939291906108b1565b60405160208183030381529060405261033d565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650610412565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016103db5785511561039e5785848460405160200161038a939291906108b1565b6040516020818303038152906040526103d4565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550610412565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016100ab565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff8516016105425760228214610484576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6104a46104966022600286886107fc565b61049f916108d7565b61069f565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050610698565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff8516016106605760428211158061057d5750606282115b156105b4576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c66104966022600286886107fc565b90505f6105da6104966042602287896107fc565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe850161060d866042818a6107fc565b610616916108d7565b60405160086020938403029190911c9250610647916001916011918391889183916031916002918b918b9101610914565b6040516020818303038152906040529350505050610698565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016100ab565b9392505050565b5f6fffffffffffffffffffffffffffffffff8211156106f4576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016100ab565b5090565b5f8060208385031215610709575f80fd5b823567ffffffffffffffff80821115610720575f80fd5b818501915085601f830112610733575f80fd5b813581811115610741575f80fd5b866020828501011115610752575f80fd5b60209290920196919550909350505050565b5f5b8381101561077e578181015183820152602001610766565b50505f910152565b5f815180845261079d816020860160208601610764565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f6107e16040830185610786565b82810360208401526107f38185610786565b95945050505050565b5f808585111561080a575f80fd5b83861115610816575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156108635780818660020360031b1b83161692505b505092915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156108635760019490940360031b84901b1690921692915050565b5f84516108c2818460208901610764565b8201838582375f930192835250909392505050565b8035602083101561090e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b165b92915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008b60f01b166001840152808a60f81b1660038401527fffffffffffffffffffffffffffffffff000000000000000000000000000000008960801b166004840152808860f81b166014840152506109dc601583018760f01b7fffff000000000000000000000000000000000000000000000000000000000000169052565b610a0d601783018660f81b7fff00000000000000000000000000000000000000000000000000000000000000169052565b610a3e601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea26469706673582212204c5336eb5e4cfed89d8f0ececad030c194802d04a3053cab299816b06066820764736f6c6343000816003375736572412073686f756c64206861766520616c6c20746f6b656e73206166746572206c7a52656365697665206f6e20706f6c79676f6e207368617265206f6674636f6d706f736572416464726573732073686f756c64206861766520746865206e6f20746f6b656e73206166746572206c7a436f6d706f7365206f6e20617262a2646970667358221220624bf08ba3b294a72f8ba16258cca4fcbff0f0b7c646032698cd3f7741ffdfa564736f6c63430008160033",
+ "sourceMap": "1105:3578:136:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21149:174:74;;;;;;;;;;-1:-1:-1;21149:174:74;;;;;:::i;:::-;;:::i;:::-;;1563:26:135;;;;;;;;;;-1:-1:-1;1563:26:135;;;;-1:-1:-1;;;;;1563:26:135;;;;;;-1:-1:-1;;;;;854:55:139;;;836:74;;824:2;809:18;1563:26:135;;;;;;;;23482:633:74;;;;;;:::i;:::-;;:::i;1441:108:136:-;;;;;;;;;;;;;:::i;4416:50:74:-;;;;;;;;;;;;4461:5;4416:50;;;;;3782:6:139;3770:19;;;3752:38;;3740:2;3725:18;4416:50:74;3608:188:139;1178:27:135;;;;;;;;;;-1:-1:-1;1178:27:135;;;;;;;-1:-1:-1;;;;;1178:27:135;;;1135:36;;;;;;;;;;;;1168:3;1135:36;;;;;4223:10:139;4211:23;;;4193:42;;4181:2;4166:18;1135:36:135;4049:192:139;1764:51:135;;;;;;;;;;;;1806:9;1764:51;;;;;4392:25:139;;;4380:2;4365:18;1764:51:135;4246:177:139;4297:50:74;;;;;;;;;;;;4343:4;4297:50;;;;;4604:32:139;4592:45;;;4574:64;;4562:2;4547:18;4297:50:74;4428:216:139;1653:104:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5226:166:74:-;;;;;;;;;;-1:-1:-1;5226:166:74;;;;;:::i;:::-;;:::i;2907:134:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1095:34:135:-;;;;;;;;;;;;1128:1;1095:34;;4586:43:74;;;;;;;;;;-1:-1:-1;4586:43:74;;;;;;;;;;;7019:34:139;7007:47;;;6989:66;;6977:2;6962:18;4586:43:74;6843:218:139;1015:34:135;;;;;;;;;;;;1048:1;1015:34;;16845:490:74;;;;;;;;;;-1:-1:-1;16845:490:74;;;;;:::i;:::-;;:::i;3823:151:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1211:34:135:-;;;;;;;;;;-1:-1:-1;1211:34:135;;;;-1:-1:-1;;;;;1211:34:135;;;25280:469:74;;;;;;:::i;:::-;;:::i;1352:27:135:-;;;;;;;;;;-1:-1:-1;1352:27:135;;;;-1:-1:-1;;;;;1352:27:135;;;3684:133:94;;;;;;;;;;;;;:::i;3385:141::-;;;;;;;;;;;;;:::i;5976:204:73:-;;;;;;;;;;-1:-1:-1;5976:204:73;;;;;:::i;:::-;;:::i;:::-;;;;11502:6:139;11490:19;;;11472:38;;11529:34;11599:15;;;11594:2;11579:18;;11572:43;11651:15;;11631:18;;;11624:43;11460:2;11445:18;5976:204:73;11272:401:139;4530:49:74;;;;;;;;;;;;4574:5;4530:49;;1252:27:135;;;;;;;;;;-1:-1:-1;1252:27:135;;;;-1:-1:-1;;;;;1252:27:135;;;1876:52;;;;;;;;;;;;1917:11;1876:52;;1055:34;;;;;;;;;;;;1088:1;1055:34;;30440:228:74;;;;;;;;;;-1:-1:-1;30440:228:74;;;;;:::i;:::-;;:::i;:::-;;;12283:14:139;;12276:22;12258:41;;12246:2;12231:18;30440:228:74;12118:187:139;1555:3126:136;;;;;;;;;;;;;:::i;26061:4058:74:-;;;;;;;;;;-1:-1:-1;26061:4058:74;;;;;:::i;:::-;;:::i;18447:360::-;;;;;;;;;;-1:-1:-1;18447:360:74;;;;;:::i;:::-;;:::i;3193:186:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1595:52:135:-;;;;;;;;;;-1:-1:-1;1595:52:135;;;;-1:-1:-1;;;;;1595:52:135;;;1319:27;;;;;;;;;;-1:-1:-1;1319:27:135;;;;-1:-1:-1;;;;;1319:27:135;;;4229:53:74;;;;;;;;;;;;4278:4;4229:53;;5349:249:73;;;;;;;;;;-1:-1:-1;5349:249:73;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;17605:528:74:-;;;;;;;;;;-1:-1:-1;17605:528:74;;;;;:::i;:::-;;:::i;30674:338::-;;;;;;;;;;-1:-1:-1;30674:338:74;;;;;:::i;:::-;;:::i;1386:26:135:-;;;;;;;;;;-1:-1:-1;1386:26:135;;;;-1:-1:-1;;;;;1386:26:135;;;1285:27;;;;;;;;;;-1:-1:-1;1285:27:135;;;;-1:-1:-1;;;;;1285:27:135;;;21518:1958:74;;;;;;;;;;-1:-1:-1;21518:1958:74;;;;;:::i;:::-;;:::i;3047:140:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1821:48:135:-;;;;;;;;;;;;1862:7;1821:48;;1418:45;;;;;;;;;;-1:-1:-1;1418:45:135;;;;-1:-1:-1;;;;;1418:45:135;;;3532:146:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6186:197:73:-;;;;;;;;;;-1:-1:-1;6186:197:73;;;;;:::i;:::-;;:::i;:::-;;;;21332:34:139;21393:15;;;21375:34;;21457:10;21445:23;;;21440:2;21425:18;;21418:51;21505:15;;21485:18;;;21478:43;;;;21310:2;21295:18;6186:197:73;21122:405:139;30125:187:74;;;;;;;;;;-1:-1:-1;30125:187:74;;;;;:::i;:::-;;:::i;24702:376::-;;;;;;:::i;:::-;;:::i;30318:116::-;;;;;;;;;;-1:-1:-1;30318:116:74;;;;;:::i;:::-;;:::i;2754:147:94:-;;;;;;;;;;;;;:::i;2459:141::-;;;;;;;;;;;;;:::i;20814:147:74:-;;;;;;;;;;-1:-1:-1;20814:147:74;;;;;:::i;:::-;;:::i;4472:52::-;;;;;;;;;;;;4523:1;4472:52;;5786:184:73;;;;;;;;;;-1:-1:-1;5786:184:73;;;;;:::i;:::-;;:::i;:::-;;;;23649:34:139;23637:47;;;23619:66;;23716:2;23701:18;;23694:34;;;;23592:18;5786:184:73;23445:289:139;1243:204:89;;;;;;;;;;;;;:::i;4104:56:74:-;;;;;;;;;;;;4147:13;4104:56;;1516:40:135;;;;;;;;;;-1:-1:-1;1516:40:135;;;;-1:-1:-1;;;;;1516:40:135;;;5621:10886:74;;;;;;;;;;-1:-1:-1;5621:10886:74;;;;;:::i;:::-;;:::i;1470:40:135:-;;;;;;;;;;-1:-1:-1;1470:40:135;;;;-1:-1:-1;;;;;1470:40:135;;;5120:100:74;;;;;;;;;;-1:-1:-1;5120:100:74;;;;;:::i;:::-;5185:16;:28;;;;;;;;;;;;;;;5120:100;2606:142:94;;;;;;;;;;;;;:::i;24121:575:74:-;;;;;;:::i;:::-;;:::i;1934:56:135:-;;;;;;;;;;;;1975:15;1934:56;;5604:176:73;;;;;;;;;;-1:-1:-1;5604:176:73;;;;;:::i;:::-;;:::i;:::-;;;;24910:34:139;24971:15;;;24953:34;;25023:15;;;;25018:2;25003:18;;24996:43;24873:18;5604:176:73;24726:319:139;1065:26:101;;;;;;;;;;-1:-1:-1;1065:26:101;;;;;;;;19989:464:74;;;;;;;;;;-1:-1:-1;19989:464:74;;;;;:::i;:::-;;:::i;21149:174::-;21226:90;21240:7;21273:11;-1:-1:-1;;;;;21257:29:74;21249:38;;21289:1;21300:3;21306:9;;;;;;;;;;;;21226:13;:90::i;:::-;21149:174;;:::o;23482:633::-;23645:19;23678:9;:32;23688:21;:12;;:19;:21::i;:::-;23678:32;;;;;;;;;;;;;-1:-1:-1;23678:32:74;;;;-1:-1:-1;;;;;23678:32:74;;-1:-1:-1;;23754:36:74;23781:8;23754:26;:36::i;:::-;23721:69;;;;;23801:20;23824:74;;;;;;;;23831:21;:12;;:19;:21::i;:::-;23824:74;;;;;;23854:21;:12;;:19;:21::i;:::-;23824:74;;;;23877:20;:12;;:18;:20::i;:::-;23824:74;;;;23801:97;-1:-1:-1;;;;;;23908:18:74;;;:200;;;;;;;23801:97;23986:26;:12;;:24;:26::i;:::-;24026:19;:12;;:17;:19::i;:::-;24089:9;;;;;;;;-1:-1:-1;24089:9:74;;23908:200;;;;;;;;;;;;;;;24059:16;;23908:200;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23635:480;;;;23482:633;;;;:::o;1441:108:136:-;1492:13;:11;:13::i;:::-;1524:5;;1516:26;;;;;-1:-1:-1;;;;;1524:5:136;;;1516:26;;;27047:74:139;1531:10:136;27137:18:139;;;27130:34;336:42:88;;1516:7:136;;27020:18:139;;1516:26:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1441:108::o;1653:104:135:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5226:166:74:-;5313:72;5329:12;5343;5371;5357:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5357:27:74;;5313:15;:72::i;2907:134:94:-;2954:33;3018:16;2999:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2999:35:94;;;;;;;;;;;;;;;;;;;;;;;2907:134;:::o;16845:490:74:-;16976:22;17032:8;17018:23;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17018:23:74;-1:-1:-1;17010:31:74;-1:-1:-1;17068:9:74;17051:234;17085:20;17097:8;17085:9;:20;:::i;:::-;17079:26;;:3;:26;;;17051:234;;;17193:14;;;17128:12;17193:14;;;:9;:14;;;;;;;;;17174:56;;-1:-1:-1;;;;;17193:14:74;;;17174:56;;;28216:34:139;;;;17218:4:74;28266:18:139;;;28259:43;17193:14:74;28318:18:139;;;28311:50;17143:88:74;;17155:17;;28128:18:139;;17174:56:74;;;;;;;;;;;;17143:11;:88::i;:::-;17128:103;-1:-1:-1;17128:103:74;17245:5;17251:15;17257:9;17251:3;:15;:::i;:::-;17245:22;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17245:29:74;;;:22;;;;;;;;;;;:29;-1:-1:-1;17107:5:74;;17051:234;;;;17312:16;17322:5;17312:9;:16::i;:::-;16845:490;;;;;:::o;3823:151:94:-;3872:42;3948:19;3926:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3926:41:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3823:151;:::o;25280:469:74:-;25524:18;;;25491:19;25524:18;;;:9;:18;;;;;;-1:-1:-1;;;;;25524:18:74;;25491:19;;25598:39;25628:8;25598:29;:39::i;:::-;25553:84;;;;;;25647:8;-1:-1:-1;;;;;25647:18:74;;25674:5;25686:3;25647:95;25692:5;25699:3;25704:5;25711;25718:12;;25732:9;;;;;;;;;;;;25647:95;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25481:268;;;;25280:469;;;;;;;:::o;3684:133:94:-;3730:33;3794:16;3775:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3775:35:94;;;;;;;;;;;;;;;;;;;;;;3684:133;:::o;3385:141::-;3433:35;3501:18;3480:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3480:39:94;;;;;;;;;;;;;;;;;;;;;;3385:141;:::o;5976:204:73:-;6068:12;6082:11;6095:13;6127:46;6165:7;;6127:37;:46::i;:::-;6120:53;;;;;;5976:204;;;;;:::o;30440:228:74:-;30592:21;;;30525:9;30592:21;;;:12;:21;;;;;;;:34;;;;;;;;30525:9;30643:14;30592:34;5464:12:132;;;;;5451:10;;;;;;:25;;;;5443:34;;5326:168;30643:14:74;:18;30636:25;;;30440:228;;;;;:::o;1555:3126:136:-;1613:28;1647:45;1669:18;1862:7:135;1686:1:136;1669:18;:::i;:::-;-1:-1:-1;;1647:21:136;:45::i;:::-;-1:-1:-1;1716:12:136;;1731:5;;1612:80;;-1:-1:-1;1703:50:136;;-1:-1:-1;;;;;1716:12:136;;;;1731:5;1862:7:135;1703:4:136;:50::i;:::-;1765:18;1789:32;1816:1;1819;1789:26;:32::i;:::-;-1:-1:-1;1866:20:136;;1929:12;;1952:5;;1929:29;;;;;-1:-1:-1;;;;;1952:5:136;;;1929:29;;;836:74:139;1764:57:136;;-1:-1:-1;1866:20:136;;;;1832:23;;1929:12;;;;:22;;809:18:139;;1929:29:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2101:248;;;;;;;;;1128:1:135;2101:248:136;;2162:5;;1897:61;;-1:-1:-1;;;2101:248:136;;;;-1:-1:-1;;;;;2162:5:136;2101:248;;;;2182:1;2101:248;;;;2197:20;2101:248;;;;2231:76;1274:7;2305:1;2231:27;1370:24:62;;;86377:16:139;1370:24:62;;;86361:102:139;1370:24:62;;;;;;;;;86479:11:139;;;;1370:24:62;;;;1294:107;2231:27:136;:54;:76;:54;:76::i;:::-;2101:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2064:285;;2359:27;2400:17;2389:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;2359:59;;2503:20;2526:183;2669:1;1324:7;1420:14;2526:102;1274:7;2626:1;2526:40;1370:24:62;;;86377:16:139;1370:24:62;;;86361:102:139;1370:24:62;;;;;;;;;86479:11:139;;;;1370:24:62;;;;1294:107;2526:102:136;:142;:183;;:142;:183::i;:::-;2503:206;;2720:34;2757:225;;;;;;;;1088:1:135;2757:225:136;;;;;;2801:33;2818:15;-1:-1:-1;;;;;31116:23:74;;31018:129;2801:33:136;2757:225;;;;1862:7:135;2757:225:136;;;;2902:5;1862:7:135;2894:4:136;2877:21;;;;:::i;:::-;2876:31;;;;:::i;:::-;2757:225;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2757:225:136;;;;;;;;;;;3019:12;;:48;;;;;2720:262;;-1:-1:-1;;;;;;;;3019:12:136;;;;:22;;:48;;2720:262;;-1:-1:-1;;3019:48:136;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3092:5;;3078:20;;;;;-1:-1:-1;;;;;3092:5:136;;;3078:20;;;836:74:139;2993::136;;-1:-1:-1;336:42:88;;3078:13:136;;809:18:139;;3078:20:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3108:12:136;;3134:13;;3108:89;;;;;-1:-1:-1;;;;;3108:12:136;;;;-1:-1:-1;3108:17:136;;-1:-1:-1;3134:13:136;3108:89;;3150:17;;3134:3;;3190:4;;3108:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;336:42:88;-1:-1:-1;;;;;3207:12:136;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3241:12:136;;3272:9;;3241:42;;;;;-1:-1:-1;;;;;3272:9:136;;;3241:42;;;836:74:139;3232:92:136;;-1:-1:-1;3241:12:136;;;;;;-1:-1:-1;3241:22:136;;809:18:139;;3241:42:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3285:12;;;;;;;;;-1:-1:-1;;;;;3285:12:136;-1:-1:-1;;;;;3285:24:136;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3313:10;3232:8;:92::i;:::-;3383:12;;3335:63;;1088:1:135;;3383:12:136;;;-1:-1:-1;;;;;3383:12:136;20814:147:74;:::i;3335:63:136:-;3473:12;;3504:9;;3473:42;;;;;-1:-1:-1;;;;;3504:9:136;;;3473:42;;;836:74:139;3409:197:136;;3473:12;;;;;;;:22;;809:18:139;;3473:42:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3431:12;;:39;;;;;-1:-1:-1;;;;;854:55:139;;;3431:39:136;;;836:74:139;3431:12:136;;;;;;;;:22;;809:18:139;;3431:39:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:84;;;;:::i;:::-;3529:12;;;;;;;;;-1:-1:-1;;;;;3529:12:136;-1:-1:-1;;;;;3529:24:136;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3569:27;1862:7:135;3569:10:136;:27;:::i;:::-;3409:8;:197::i;:::-;3780:5;;3617:23;;3643:170;;3617:23;;1048:1:135;;1862:7;;-1:-1:-1;;;;;3780:5:136;3788:14;3746:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3643:25;:170::i;:::-;3833:11;;3824:21;;;;;-1:-1:-1;;;;;3833:11:136;;;3824:21;;;836:74:139;3617:196:136;;-1:-1:-1;336:42:88;;3824:8:136;;809:18:139;;3824:21:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3871:11:136;;3855:41;;;;;-1:-1:-1;;;;;3871:11:136;;;3855:41;;;27047:74:139;3885:10:136;27137:18:139;;;27130:34;336:42:88;;-1:-1:-1;3855:7:136;;-1:-1:-1;27020:18:139;;3855:41:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3906:20:136;;4010:12;;3906:247;;;;;-1:-1:-1;;;;;3906:20:136;;;;-1:-1:-1;3906:30:136;;-1:-1:-1;1324:7:136;;1420:14;;3906:247;;:20;4010:12;;;;;;;;;4090:10;;4122:4;;3906:247;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4186:12:136;;:39;;;;;-1:-1:-1;;;;;854:55:139;;;4186:39:136;;;836:74:139;4164:166:136;;-1:-1:-1;4186:12:136;;;;;;;;-1:-1:-1;4186:22:136;;-1:-1:-1;809:18:139;;;-1:-1:-1;4186:39:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4239:1;4164:166;;;;;;;;;;;;;;;;;:8;:166::i;:::-;4389:12;;4341:63;;1128:1:135;;-1:-1:-1;;;;;4389:12:136;20814:147:74;:::i;4341:63:136:-;4444:12;;4467:5;;4444:29;;;;;-1:-1:-1;;;;;4467:5:136;;;4444:29;;;836:74:139;4414:27:136;;4444:12;;;;;:22;;809:18:139;;4444:29:136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4414:59;-1:-1:-1;4484:190:136;4506:43;4528:21;4414:59;4506:43;:::i;:::-;4563:20;4484:190;;;;;;;;;;;;;;;;;:8;:190::i;:::-;1602:3079;;;;;;;;;;;1555:3126::o;26061:4058:74:-;26164:13;26180:21;:12;;:19;:21::i;:::-;26244:17;;;26211:19;26244:17;;;:9;:17;;;;;;26164:37;;-1:-1:-1;;;;;;26244:17:74;;;;;26297:26;26324;:12;;:24;:26::i;:::-;26352:21;:12;;:19;:21::i;:::-;26297:77;;;;;;;;;;-1:-1:-1;;;;;35498:55:139;;;26297:77:74;;;35480:74:139;26297:77:74;35590:23:139;35570:18;;;35563:51;35453:18;;26297:77:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26272:102;;;26384:25;26412:21;:12;;:19;:21::i;:::-;26384:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26465:33:74;;;;;;;;26384:49;;-1:-1:-1;26384:49:74;;-1:-1:-1;;;;;26465:31:74;;;-1:-1:-1;26465:31:74;;-1:-1:-1;26465:33:74;;;;;-1:-1:-1;26465:33:74;;;;;;;:31;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26444:54;;;;26512:5;:10;;26521:1;26512:10;26508:3605;;26613:10;26576:20;-1:-1:-1;;;;;26660:16:74;;;26677:21;:12;;:19;:21::i;:::-;26700:26;:12;;:24;:26::i;:::-;26660:70;;;;;;;;;;;37044:15:139;;;;26660:70:74;;;37026:34:139;-1:-1:-1;;;;;37096:55:139;37076:18;;;37069:83;26728:1:74;37168:18:139;;;37161:43;36970:18;;26660:70:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26660:70:74;;;;;;;;;;;;:::i;:::-;26638:92;;26763:7;26788:6;26777:31;;;;;;;;;;;;:::i;:::-;:44;;;26822:1;26777:47;;;;;;;;:::i;:::-;;;;;;;26763:62;;26840:19;26872:22;:12;;:20;:22::i;:::-;26862:33;;;;;;;:::i;:::-;;;;;;;;26840:55;;26930:23;26967:27;27037:29;;;27084:12;27114:11;27143:3;26997:163;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26997:163:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;27207:16:74;;;27224:6;27240;26997:163;27265:22;:15;27283:4;27265:22;:::i;:::-;27207:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27192:96;;27319:10;27324:4;27319;:10::i;:::-;27388:21;;;27407:1;27388:21;;;;;;;;;27306:23;;-1:-1:-1;27357:28:74;;-1:-1:-1;27388:21:74;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27388:21:74;;;;;;;;;;;;;;;27357:52;;27435:89;;;;;;;;27448:6;27435:89;;;;;;27464:6;-1:-1:-1;;;;;27435:89:74;;;;;27473:14;27435:89;;;;27489:15;27507:4;27489:22;;;;:::i;:::-;27435:89;;;;27513:10;27435:89;;;27423:6;27430:1;27423:9;;;;;;;;:::i;:::-;;;;;;;;;;:101;27538:19;;;;;-1:-1:-1;;;;;27538:11:74;;;;;:19;;27550:6;;27538:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27607:21;27671:41;;;27730:12;27760:11;27631:154;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;27631:154:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;27832:16:74;;;27849:6;27865;27631:154;27884:22;:15;27902:4;27884:22;:::i;:::-;27832:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27817:90;;27938:10;27943:4;27938;:10::i;:::-;27925:23;;27799:164;27988:83;;;;;;;;28001:6;27988:83;;;;;;28017:6;-1:-1:-1;;;;;27988:83:74;;;;;28026:8;27988:83;;;;28036:15;28054:4;28036:22;;;;:::i;:::-;27988:83;;;;28060:10;27988:83;;;27976:6;27983:1;27976:9;;;;;;;;:::i;:::-;;;;;;;;;;:95;28085:19;;;;;-1:-1:-1;;;;;28085:11:74;;;;;:19;;28097:6;;28085:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26524:1591;;;;;;;;26508:3605;;;28125:5;:11;;28134:2;28125:11;28121:1992;;28193:10;28152:18;-1:-1:-1;;;;;28241:16:74;;;28258:21;:12;;:19;:21::i;:::-;28281:26;:12;;:24;:26::i;:::-;28241:70;;;;;;;;;;;37044:15:139;;;;28241:70:74;;;37026:34:139;-1:-1:-1;;;;;37096:55:139;37076:18;;;37069:83;28309:1:74;37168:18:139;;;37161:43;36970:18;;28241:70:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28241:70:74;;;;;;;;;;;;:::i;:::-;28219:92;;28355:7;28380:6;28369:35;;;;;;;;;;;;:::i;:::-;:48;;;28418:1;28369:51;;;;;;;;:::i;:::-;;;;;;;28355:66;;28436:19;28468:22;:12;;:20;:22::i;:::-;28458:33;;;;;;;:::i;:::-;;;;;;;;28436:55;;28505:27;28562:19;:12;;:17;:19::i;:::-;28583:16;28545:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28535:66;;;;;;28505:96;;28615:23;28671:27;28745;;;28794:12;28828:11;28861:19;28701:197;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;28701:197:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;28937:16:74;;;28954:6;28970;28701:197;28995:22;:15;29013:4;28995:22;:::i;:::-;28937:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28916:102;;29049:16;29054:10;29049:4;:16::i;:::-;29114:21;;;29133:1;29114:21;;;;;;;;;29036:29;;-1:-1:-1;29083:28:74;;29114:21;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29114:21:74;;;;;;;;;;;;;;;29083:52;;29165:89;;;;;;;;29178:6;29165:89;;;;;;29194:6;-1:-1:-1;;;;;29165:89:74;;;;;29203:14;29165:89;;;;29219:15;29237:4;29219:22;;;;:::i;:::-;29165:89;;;;29243:10;29165:89;;;29153:6;29160:1;29153:9;;;;;;;;:::i;:::-;;;;;;;;;;:101;29272:19;;;;;-1:-1:-1;;;;;29272:11:74;;;;;:19;;29284:6;;29272:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28653:653;;;29373:21;29441:39;;;29502:12;29536:11;29569:19;29397:209;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;29397:209:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;29645:16:74;;;29662:6;29678;29397:209;29697:22;:15;29715:4;29697:22;:::i;:::-;29645:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29624:96;;29751:16;29756:10;29751:4;:16::i;:::-;29816:21;;;29835:1;29816:21;;;;;;;;;29738:29;;-1:-1:-1;29785:28:74;;29816:21;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29816:21:74;;;;;;;;;;;;;;;29785:52;;29867:83;;;;;;;;29880:6;29867:83;;;;;;29896:6;-1:-1:-1;;;;;29867:83:74;;;;;29905:8;29867:83;;;;29915:15;29933:4;29915:22;;;;:::i;:::-;29867:83;;;;29939:10;29867:83;;;29855:6;29862:1;29855:9;;;;;;;;:::i;:::-;;;;;;;;;;:95;29968:19;;;;;-1:-1:-1;;;;;29968:11:74;;;;;:19;;29980:6;;29968:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29355:647;;;28138:1874;;;;;;28121:1992;;;30032:70;;;;;-1:-1:-1;;;;;30032:56:74;;;;;:70;;30089:12;;;;30032:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28121:1992;26154:3965;;;;;26061:4058;;;:::o;18447:360::-;18542:9;18537:264;18561:5;:12;18557:1;:16;18537:264;;;18594:29;18646:5;18652:1;18646:8;;;;;;;;:::i;:::-;;;;;;;18594:61;;18674:9;18669:122;18693:8;:15;18689:1;:19;18669:122;;;18733:9;-1:-1:-1;;;;;18733:24:74;;18758:8;18767:1;18758:11;;;;;;;;:::i;:::-;;;;;;;;;;;18733:43;;;;;;;;;;;45514:23:139;;;18733:43:74;;;45496:42:139;18771:4:74;45554:18:139;;;45547:50;45469:18;;18733:43:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18710:3:74;;;;;-1:-1:-1;18669:122:74;;-1:-1:-1;18669:122:74;;-1:-1:-1;;18575:3:74;;18537:264;;;;18447:360;;:::o;3193:186:94:-;3249:56;3346:26;3317:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5349:249:73;5464:16;5482:21;;5505:14;5538:53;5573:8;;5583:7;5538:34;:53::i;:::-;5531:60;;;;;;;;5349:249;;;;;;;:::o;17605:528:74:-;17680:12;;17665;17702:425;17726:4;17722:1;:8;17702:425;;;17751:22;17789:5;17795:1;17789:8;;;;;;;;:::i;:::-;;;;;;;17751:47;;17817:9;17812:305;17836:4;17832:1;:8;17812:305;;;17865:20;;;17877:8;17865:20;17903:23;17942:5;17948:1;17942:8;;;;;;;;:::i;:::-;;;;;;;17903:48;;17969:16;17989:10;-1:-1:-1;;;;;17989:19:74;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17988:27:74;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17969:48;;18035:9;-1:-1:-1;;;;;18035:17:74;;18053:9;18064:37;18089:10;-1:-1:-1;;;;;31116:23:74;;31018:129;18064:37;18035:67;;;;;;;;;;;46337:23:139;;;;18035:67:74;;;46319:42:139;46377:18;;;46370:34;46292:18;;18035:67:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17847:270;;17812:305;17842:3;;17812:305;;;-1:-1:-1;;17732:3:74;;17702:425;;30674:338;30845:21;;;30799:43;30845:21;;;:12;:21;;;;;;;:34;;;;;;;;30763:24;;30893:14;30845:34;5464:12:132;;;;;5451:10;;;;;;:25;;;;5443:34;;5326:168;30893:14:74;:18;30889:117;;;30927:12;30942;:5;:10;:12::i;:::-;30982:13;;;;:7;:13;;;;;30968:27;;30927;;-1:-1:-1;30982:13:74;30968:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30913:93;30889:117;30789:223;30674:338;;;;:::o;21518:1958::-;21722:18;;;21752:1;21722:18;;;:9;:18;;;;;;-1:-1:-1;;;;;21722:18:74;21714:72;;;;;;;46617:2:139;21714:72:74;;;46599:21:139;46656:2;46636:18;;;46629:30;46695:29;46675:18;;;46668:57;46742:18;;21714:72:74;;;;;;;;;21843:21;;;21797:43;21843:21;;;:12;:21;;;;;;;:34;;;;;;;;;21916:14;21843:34;5464:12:132;;;;;5451:10;;;;;;:25;;;;5443:34;;5326:168;21916:14:74;21887:43;;21940:23;21977:13;21994:1;21977:18;21973:201;;-1:-1:-1;5464:12:132;;;;;;5451:10;;;;;;:25;;;;5443:34;21973:201:74;;;22113:13;22092:18;:34;:71;;22145:18;22092:71;;;22129:13;22092:71;22074:89;;21973:201;22190:19;;22183:1287;;22225:17;;;;:::i;:::-;;;;22290:12;22305:15;:5;:13;:15::i;:::-;22334:24;22361:13;;;:7;:13;;;;;22334:40;;22290:30;;-1:-1:-1;22334:24:74;;:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22388:34:74;;;;;22334:40;;-1:-1:-1;22388:4:74;;:15;;-1:-1:-1;22388:34:74;;-1:-1:-1;22334:40:74;;-1:-1:-1;22417:4:74;;22388:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22436:50:74;;;;;:4;;-1:-1:-1;22436:19:74;;-1:-1:-1;22436:50:74;;22456:11;;22469:16;;22436:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22501:20:74;22524:19;;;:13;:19;;;;;22501:42;;:20;;-1:-1:-1;22524:19:74;22501:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22561:71;22583:7;363:1:13;22561:21:74;:71::i;:::-;22557:369;;;22653:14;22669:16;22689:39;22720:7;22689:30;:39::i;:::-;22828:28;;22652:76;;-1:-1:-1;22652:76:74;-1:-1:-1;22652:76:74;;22746:10;;-1:-1:-1;;;;;22828:7:74;;;22652:76;;22746:10;22828:28;22746:10;22828:28;22652:76;22828:7;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22812:44;;;22882:4;22874:37;;;;;;;47766:2:139;22874:37:74;;;47748:21:139;47805:2;47785:18;;;47778:30;47844:22;47824:18;;;47817:50;47884:18;;22874:37:74;47564:344:139;22874:37:74;22634:292;;;;22557:369;22943:69;22965:7;306:1:13;22943:21:74;:69::i;:::-;22939:144;;;23032:36;;;;;:4;;:14;;:36;;23047:11;;23060:7;;23032:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22939:144;23100:66;23122:7;533:1:13;23100:21:74;:66::i;:::-;23096:163;;;23186:58;;;;;:4;;:18;;:58;;23205:11;;23218:7;;23227:16;;23186:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23096:163;-1:-1:-1;;;;;23276:23:74;;;;;;:96;;;23303:69;23325:7;418:1:13;23303:21:74;:69::i;:::-;23272:188;;;23392:53;;;;;:4;;:14;;:53;;23407:11;;23420:7;;23429:4;;23435:9;;23392:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23272:188;22211:1259;;;22183:1287;;3047:140:94;3095:34;3162:18;3141:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3532:146;3580:40;3653:18;3632:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3632:39:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6186:197:73;6275:11;6288;6301:13;6333:43;6368:7;;6333:34;:43::i;30125:187:74:-;30211:18;30232;:11;;:16;:18::i;:::-;30211:39;;30282:4;30268:10;:18;30260:45;;;;;;;49232:2:139;30260:45:74;;;49214:21:139;49271:2;49251:18;;;49244:30;49310:16;49290:18;;;49283:44;49344:18;;30260:45:74;49030:338:139;24702:376:74;24872:4;:14;24900:21;:12;;:19;:21::i;:::-;24935:26;:12;;:24;:26::i;:::-;24975:8;24997:5;25016:9;25039:22;:12;;:20;:22::i;:::-;24872:199;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24702:376;;;;;:::o;30318:116::-;30418:8;30382:9;:25;30392:8;-1:-1:-1;;;;;30392:12:74;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30382:25;;;;;;;;;;;;;-1:-1:-1;30382:25:74;:45;;;;-1:-1:-1;;;;;30382:45:74;;;;;;;;;;-1:-1:-1;30318:116:74:o;2754:147:94:-;2803:40;2876:18;2855:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2855:39:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2459:141;2508:34;2575:18;2554:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20814:147:74;20891:63;20905:7;20914:11;20927:1;20938:3;20944:9;;;;;;;;;;;;20891:13;:63::i;5786:184:73:-;5865:14;5881:16;5916:47;5955:7;;5916:38;:47::i;:::-;5909:54;;;;5786:184;;;;;;:::o;1243:204:89:-;1302:7;;1282:4;;1302:7;;1298:143;;;-1:-1:-1;1332:7:89;;;;;1243:204::o;1298:143::-;1377:39;;;;;:7;:39;;;27047:74:139;;;1398:17:89;27137:18:139;;;27130:34;1428:1:89;;1377:7;;27020:18:139;;1377:39:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;1370:60;;1243:204;:::o;5621:10886:74:-;5824:12;5807:30;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5807:30:74;-1:-1:-1;5778:59:74;;;;:13;;:59;;;;;;:::i;:::-;;5884:12;5871:26;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5871:26:74;-1:-1:-1;5847:50:74;;;;:21;;:50;;;;;;:::i;:::-;;5946:12;5932:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5932:27:74;-1:-1:-1;5907:52:74;;;;:22;;:52;;;;;;:::i;:::-;;6011:12;5997:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5997:27:74;-1:-1:-1;5969:55:74;;;;:25;;:55;;;;;;:::i;:::-;;6073:12;6059:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6059:27:74;-1:-1:-1;6034:52:74;;;;:22;;:52;;;;;;:::i;:::-;-1:-1:-1;6120:16:74;;;6134:1;6120:16;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6096:40:74;;;;:21;;-1:-1:-1;6096:40:74;;;;:::i;:::-;-1:-1:-1;6173:10:74;;;;;6181:1;6173:10;;;4392:25:139;336:42:88;;6173:7:74;;4365:18:139;;6173:10:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6146:21;:24;;6168:1;;6146:24;;;;:::i;:::-;;;;;;;;;:37;;;;-1:-1:-1;;;;;6146:37:74;;;;;;;;;;;6240:552;6262:12;6258:16;;:1;:16;;;6240:552;;;6299:10;6312:5;:1;6316;6312:5;:::i;:::-;6299:18;;;;6335:19;6357:20;6378:1;6357:23;;;;;;;;;;:::i;:::-;;;;;;;6335:45;;6425:3;6398:13;:21;;6420:1;6398:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;6473:1;-1:-1:-1;;;;;6450:25:74;:11;-1:-1:-1;;;;;6450:25:74;;6446:267;;6546:3;6559:4;6531:34;;;;;:::i;:::-;51114:10:139;51102:23;;;51084:42;;-1:-1:-1;;;;;51162:55:139;51157:2;51142:18;;51135:83;51072:2;51057:18;6531:34:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6499:13:74;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;:66;;;;;-1:-1:-1;;;;;6499:66:74;;;;;-1:-1:-1;;;;;6499:66:74;;;;;;6446:267;;;6662:3;6675:4;6682:11;6644:50;;;;;:::i;:::-;51459:10:139;51447:23;;;51429:42;;-1:-1:-1;;;;;51568:15:139;;;51563:2;51548:18;;51541:43;51620:15;51615:2;51600:18;;51593:43;51417:2;51402:18;6644:50:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6612:13:74;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;:82;;;;;-1:-1:-1;;;;;6612:82:74;;;;;-1:-1:-1;;;;;6612:82:74;;;;;;6446:267;6730:47;6747:13;:26;;6774:1;6747:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6747:29:74;6730:16;:47::i;:::-;-1:-1:-1;;6276:3:74;;6240:552;;;;6918:4;6896:28;;;;;:::i;:::-;-1:-1:-1;;;;;854:55:139;;;836:74;;824:2;809:18;6896:28:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6870:23:74;:54;;;;-1:-1:-1;;;;;6870:54:74;;;;;;;;;;-1:-1:-1;6935:8866:74;6957:12;6953:16;;:1;:16;;;6935:8866;;;7010:26;6994:12;:42;;;;;;;;:::i;:::-;;6990:8801;;7056:20;7087:13;:26;;7114:1;7087:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7087:29:74;7056:61;;7199:4;7226:12;4147:13;4217:6;7155:185;;;;;:::i;:::-;-1:-1:-1;;;;;52162:15:139;;;52144:34;;52214:15;;;;52209:2;52194:18;;52187:43;52261:2;52246:18;;52239:34;52304:2;52289:18;;52282:34;52070:3;52055:19;7155:185:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7136:8:74;:204;;;;-1:-1:-1;;;;;7136:204:74;;;;;;;;;;7380:31;;7398:12;;7380:31;;;:::i;:::-;-1:-1:-1;;;;;854:55:139;;;836:74;;824:2;809:18;7380:31:74;;;;;;;;;;;;;;;;;;;;;;;7358:8;:19;;;:53;;;;;-1:-1:-1;;;;;7358:53:74;;;;;-1:-1:-1;;;;;7358:53:74;;;;;;7493:4;7520:12;4147:13;4217:6;7448:186;;;;;:::i;:::-;-1:-1:-1;;;;;52162:15:139;;;52144:34;;52214:15;;;;52209:2;52194:18;;52187:43;52261:2;52246:18;;52239:34;52304:2;52289:18;;52282:34;52070:3;52055:19;7448:186:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7429:16:74;:205;;;;-1:-1:-1;;;;;7429:205:74;;;;;;;;;;7652:13;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;7706:8;:16;7652:72;;;;;-1:-1:-1;;;;;7706:16:74;;;7652:72;;;836:74:139;7652:29:74;;;:45;;809:18:139;;7652:72:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7742:13;:26;;7769:1;7742:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;7796:19;;7742:75;;;;;-1:-1:-1;;;;;7796:19:74;;;7742:75;;;836:74:139;7742:29:74;;;:45;;809:18:139;;7742:75:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7835:13;:26;;7862:1;7835:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;7889:16;;7835:72;;;;;-1:-1:-1;;;;;7889:16:74;;;7835:72;;;836:74:139;7835:29:74;;;:45;;809:18:139;;7835:72:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7961:8:74;:16;7925:22;:25;;-1:-1:-1;;;;;7961:16:74;;;;-1:-1:-1;7925:22:74;-1:-1:-1;7925:25:74;;;;;;;;;;:::i;:::-;;;;;;;;;;:53;;;;-1:-1:-1;;;;;7925:53:74;;;;;;8035:19;;7996:25;:28;;8035:19;;;;;7996:25;:28;;;;;;;;;;:::i;:::-;;;;;;;;;;:59;;;;-1:-1:-1;;;;;7996:59:74;;;;;;8109:16;;8073:22;:25;;8109:16;;;;;8073:22;:25;;;;;;;;;;:::i;:::-;;;;;;;;;:53;;-1:-1:-1;;;;;8073:53:74;;;;;;;;;;;;;;;8193:16;;;-1:-1:-1;8193:16:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8193:16:74;8167:42;;8251:4;8231:6;8238:1;8231:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8231:25:74;;;;:9;;;;;;;;;;:25;8310:16;;;8324:1;8310:16;;;;;;;;;8279:28;;8310:16;;8324:1;8310:16;;;;;;;-1:-1:-1;;8373:8:74;:16;8348:14;;;;-1:-1:-1;;;;;;8373:16:74;;8348:14;;-1:-1:-1;8373:16:74;;8348:14;;;;:::i;:::-;-1:-1:-1;;;;;8348:42:74;;;:14;;;;;;;;;:42;8437:19;;8412:14;;8437:19;;;8412:11;;8437:19;;8412:14;;;;;;:::i;:::-;-1:-1:-1;;;;;8412:45:74;;;:14;;;;;;;;;:45;8504:16;;8479:14;;8504:16;;;8479:11;;8504:16;;8479:14;;;;;;:::i;:::-;-1:-1:-1;;;;;8479:42:74;;;:14;;;;;;;;;:42;8723:23;;8564:276;;8602:12;;8648:3;;8678:11;;8723:23;;;8781:4;;8812:6;;8564:276;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8544:17:74;:296;;;;-1:-1:-1;;;;;8544:296:74;;;;;;;;;;8905:21;:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;8886:44;;;;;:::i;:::-;4223:10:139;4211:23;;;4193:42;;4181:2;4166:18;8886:44:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8863:20:74;:67;;;;-1:-1:-1;;;;;8863:67:74;;;;;;;;;8952:17;;:64;;;;;;;;836:74:139;;;;8952:17:74;;;;:33;;809:18:139;;8952:64:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9087:13;:21;;9109:1;9087:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;9137:5;:1;9141;9137:5;:::i;:::-;9213:23;;9054:311;;9168:11;;-1:-1:-1;;;;;9213:23:74;;9263:21;;9213:23;;9337:6;;9054:311;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9039:12:74;:326;;;;-1:-1:-1;;;;;9039:326:74;;;;;;;;;;9419:21;:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;9445:4;9405:45;;;;;:::i;:::-;46349:10:139;46337:23;;;46319:42;;46392:2;46377:18;;46370:34;46307:2;46292:18;9405:45:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9387:15:74;:63;;;;-1:-1:-1;;;;;9387:63:74;;;;;;;;;9472:96;;;;;4343:4;9472:96;;;55277:34:139;;;55327:18;;;55320:43;4461:5:74;55379:18:139;;;55372:47;9472:26:74;;55199:18:139;;9472:96:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9590:12:74;;9627:15;;9590:54;;;;;-1:-1:-1;;;;;9627:15:74;;;9590:12;:54;;836:74:139;9590:12:74;;;-1:-1:-1;9590:28:74;;-1:-1:-1;809:18:139;;9590:54:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8145:1518;;9681:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;9681:32:74;9798:16;:12;9813:1;9798:16;:::i;:::-;9767:48;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9767:48:74;;-1:-1:-1;;9767:48:74;;;;;;;;;;;-1:-1:-1;9731:84:74;;9890:16;:12;9905:1;9890:16;:::i;:::-;9864:43;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9864:43:74;;-1:-1:-1;;9864:43:74;;;;;;;;;;;-1:-1:-1;9833:28:74;;;:74;10004:16;:12;10019:1;10004:16;:::i;:::-;9962:59;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;9962:59:74;;;;;;;;;;;;;;;-1:-1:-1;9925:34:74;;;;:96;;;;10071:16;;10085:1;10071:16;;;;;;;;;10040:28;;10071:16;;;;;;;;;-1:-1:-1;;10137:16:74;;;10105:29;10137:16;;;;;;;;;10196:12;;10171:14;;10040:47;;-1:-1:-1;10137:16:74;;-1:-1:-1;;;;;10196:12:74;;;;-1:-1:-1;10040:47:74;;10105:29;10171:14;;;;:::i;:::-;;;;;;:38;-1:-1:-1;;;;;10171:38:74;;;-1:-1:-1;;;;;10171:38:74;;;;;10233:7;10228:2850;10250:12;10246:16;;:1;:16;;;10228:2850;;;10300:1;10295:6;;:1;:6;;;10291:20;10303:8;10291:20;10333:13;10349:5;:1;10353;10349:5;:::i;:::-;10423:33;;;10454:1;10423:33;;;;;;;;;10333:21;;;;;;-1:-1:-1;10377:43:74;;10423:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10377:79;;10478:26;10507:265;;;;;;;;10542:3;10507:265;;;;;;10577:11;:18;10507:265;;;;;;10628:12;:19;10507:265;;;;;;10674:1;10507:265;;;;;;10701:11;10507:265;;;;10738:12;10507:265;;;10478:294;;10836:43;;;;;;;;10861:6;10836:43;;;;;;10869:9;10836:43;;;10821:9;10831:1;10821:12;;;;;;;;:::i;:::-;;;;;;;;;;:58;10905:8;:16;:48;;;;;-1:-1:-1;;;;;10905:16:74;;;;:37;;:48;;10943:9;;10905:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10979:19:74;;:51;;;;;-1:-1:-1;;;;;10979:19:74;;;;-1:-1:-1;10979:40:74;;-1:-1:-1;10979:51:74;;11020:9;;10979:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11101:49:74;;-1:-1:-1;11189:1:74;;-1:-1:-1;11153:38:74;;-1:-1:-1;11153:38:74;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;11252:49:74;;;;;;;;11267:5;11252:49;;11282:17;;-1:-1:-1;;;;;11282:17:74;11252:49;;;;;;;;11343;;;;;;;;11252;11343;;;;;;;;;11327:13;;11101:90;;-1:-1:-1;11252:49:74;11101:90;;11217:32;;11327:13;;;;:::i;:::-;;;;;;;;;;:65;11418:8;:16;:54;;;;;-1:-1:-1;;;;;11418:16:74;;;;:42;;:54;;11461:10;;11418:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11595:329:74;;;;;;;;;;;;;11704:4;11595:329;;;;;;;;;;;;;11797:5;11595:329;;;;11844:4;11595:329;;;;11885:16;;11595:329;11885:16;11595:329;;;;11556:33;;:36;;11595:329;;-1:-1:-1;11556:33:74;-1:-1:-1;11556:36:74;;;;-1:-1:-1;11556:36:74;;;-1:-1:-1;11556:36:74;;;;:::i;:::-;;;;;;:368;;;;12015:210;;;;;;;;12069:6;12015:210;;;;;;12106:4;12015:210;;;;;;12151:5;12015:210;;;;;;12198:4;12015:210;;;;;11981:12;:28;;;12010:1;11981:31;;;;;;;;;;:::i;:::-;;;;;;:244;;;;12330:175;;;;;;;;12403:6;12330:175;;;;;;4523:1;12330:175;;;12290:12;:34;;;12325:1;12290:37;;;;;;;;;;:::i;:::-;;;;;;:215;;;;12528:19;12550:13;:23;;;;;;;;;;-1:-1:-1;;;;;12550:23:74;-1:-1:-1;;;;;12550:48:74;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12672:40;;;12710:1;12672:40;;;;;;;;;12528:72;;-1:-1:-1;12622:47:74;;12672:40;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12672:40:74;;;;;;;;;;;;;;;;12622:90;;12746:159;;;;;;;;12803:6;12746:159;;;;;;12835:48;;;;;;;;12865:11;12861:1;:15;;;;:::i;:::-;12835:48;;;;12878:1;12835:48;;;;;;;;;;;12746:159;;12734:9;;:6;;-1:-1:-1;;12734:9:74;;;;:::i;:::-;;;;;;;;;;:171;12927:23;;:40;;;;;-1:-1:-1;;;;;12927:23:74;;;;:32;;:40;;12960:6;;12927:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12989:23:74;;:70;;;;;4278:4;12989:70;;;6989:66:139;-1:-1:-1;;;;;12989:23:74;;;;-1:-1:-1;12989:46:74;;-1:-1:-1;6962:18:139;;12989:70:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10269:2809;;;;;10228:2850;10264:3;;10228:2850;;;-1:-1:-1;13234:37:74;;;13269:1;13234:37;;;;;;;;;13180:51;;13234:37;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;13334:320:74;;;;;;;;13385:17;;-1:-1:-1;;;;;13385:17:74;13334:320;;13439:18;;13334:320;;;;;;;;;;;;13494:19;;13334:320;;;;;;;-1:-1:-1;13334:320:74;;;;;;;;;;;;;;;;;;13699:63;;;;;;;;4574:5;13699:63;;;;;;;;13680:16;;;;-1:-1:-1;13334:320:74;;13680:16;;-1:-1:-1;13680:16:74;;;;:::i;:::-;;;;;;;;;;:82;13788:16;;:56;;;;;-1:-1:-1;;;;;13788:16:74;;;;:41;;:56;;13830:13;;13788:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13154:713;;13965:375;;;;;;;;14028:13;:21;;14050:1;14028:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;13965:375;;14100:4;13965:375;;;;;;;;;;14201:5;13965:375;;;;14252:4;13965:375;;;;14297:16;;13965:375;14297:16;13965:375;;;;;13915:33;;:47;;;;;;;;;;;;:::i;:::-;;;;;;:425;;;;14412:248;;;;;;;;14470:13;:21;;14492:1;14470:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;14412:248;;14529:4;14412:248;;;;14578:5;14412:248;;;;14629:4;14412:248;;;;;;;;14367:28;;;:42;;;;;;;;;;;;:::i;:::-;;;;;;:293;;;;14738:205;;;;;;;;14815:13;:21;;14837:1;14815:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;14738:205;;4523:1;14738:205;;;14687:34;;;;:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:256;15002:17;;15033:33;;15002:65;;;;;-1:-1:-1;;;;;15002:17:74;;;;:30;;:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15085:12:74;;15111:28;;;;15085:55;;;;;-1:-1:-1;;;;;15085:12:74;;;;-1:-1:-1;15085:25:74;;-1:-1:-1;15085:55:74;;:12;:55;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15158:15:74;;15195:34;;;;;15158:72;;;;;-1:-1:-1;;;;;15158:15:74;;;;-1:-1:-1;15158:36:74;;-1:-1:-1;15158:72:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7038:8207;;;;6990:8801;;;15271:28;15255:12;:44;;;;;;;;:::i;:::-;;15251:540;;15319:31;15407:4;15442:13;:26;;15469:1;15442:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;15353:137;;-1:-1:-1;;;;;15442:29:74;;;;15353:137;;;:::i;:::-;-1:-1:-1;;;;;66368:15:139;;;66350:34;;66420:15;;66415:2;66400:18;;66393:43;66277:2;66262:18;15353:137:74;;;;;;;;;;;;;;;;;;;;;;;15319:171;;15508:13;:26;;15535:1;15508:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;:66;;;;;-1:-1:-1;;;;;854:55:139;;;15508:66:74;;;836:74:139;15508:29:74;;;;:45;;809:18:139;;15508:66:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15628:10;15592:13;:22;;15615:1;15592:25;;;;;;;;;;:::i;:::-;;;;;;;;;:47;;;;;-1:-1:-1;;;;;15592:47:74;;;;;-1:-1:-1;;;;;15592:47:74;;;;;;15696:10;15657:13;:25;;15683:1;15657:28;;;;;;;;;;:::i;:::-;;;;;;;;;:50;;;;;-1:-1:-1;;;;;15657:50:74;;;;;-1:-1:-1;;;;;15657:50:74;;;;;;15301:421;15251:540;;;15746:30;;;;;66649:2:139;15746:30:74;;;66631:21:139;66688:2;66668:18;;;66661:30;66727:22;66707:18;;;66700:50;66767:18;;15746:30:74;66447:344:139;15251:540:74;6971:3;;6935:8866;;;;15837:7;15832:669;15854:12;15850:16;;:1;:16;;;15832:669;;;15887:19;15909:13;:26;;15936:1;15909:29;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;15909:29:74;;-1:-1:-1;15956:12:74;:42;;;;;;;;:::i;:::-;;15952:259;;16018:8;-1:-1:-1;;;;;16018:30:74;;4574:5;16069:13;:22;;16092:1;16069:25;;;;;;;;;;:::i;:::-;;;;;;;;;;;16018:77;;;;;;;;;;51114:10:139;51102:23;;;16018:77:74;;;51084:42:139;-1:-1:-1;;;;;16069:25:74;51142:18:139;;;51135:83;51057:18;;16018:77:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16113:8;-1:-1:-1;;;;;16113:33:74;;4574:5;16167:13;:22;;16190:1;16167:25;;;;;;;;;;:::i;:::-;;;;;;;;;;16113:83;;;;;;;;;;67034:10:139;67022:23;;;16113:83:74;;;67004:42:139;-1:-1:-1;;;;;16167:25:74;67062:18:139;;;67055:83;67154:18;;;67147:34;66977:18;;16113:83:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15952:259;16229:7;16224:267;16246:12;16242:16;;:1;:16;;;16224:267;;;16292:1;16287:6;;:1;:6;;;16283:20;16295:8;16283:20;-1:-1:-1;;;;;16321:30:74;;;16352:5;:1;16356;16352:5;:::i;:::-;16359:22;:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;16321:64;;;;;;;;;;67393:4:139;67381:17;;;16321:64:74;;;67363:36:139;-1:-1:-1;;;;;16359:25:74;67415:18:139;;;67408:83;67336:18;;16321:64:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16403:8;-1:-1:-1;;;;;16403:33:74;;16437:1;16441;16437:5;;;;:::i;:::-;16444:25;:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16403:73;;;;;;;;;;67739:4:139;67727:17;;;16403:73:74;;;67709:36:139;-1:-1:-1;;;;;16444:28:74;67761:18:139;;;67754:83;67853:18;;;67846:34;67682:18;;16403:73:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16224:267;16260:3;;16224:267;;;-1:-1:-1;;15868:3:74;;15832:669;;2606:142:94;2655:35;2723:18;2702:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2702:39:94;;;;;;;;;;;;;;;;;;;;;;2606:142;:::o;24121:575:74:-;24219:19;24252:9;:32;24262:21;:12;;:19;:21::i;:::-;24252:32;;;;;;;;;;;;;-1:-1:-1;24252:32:74;;;;-1:-1:-1;;;;;24252:32:74;;-1:-1:-1;;24326:39:74;24356:8;24326:29;:39::i;:::-;24295:70;;;;24376:20;24399:74;;;;;;;;24406:21;:12;;:19;:21::i;:::-;24399:74;;;;;;24429:21;:12;;:19;:21::i;:::-;24399:74;;;;24452:20;:12;;:18;:20::i;:::-;24399:74;;;;24376:97;-1:-1:-1;;;;;;24483:18:74;;;24522:3;24510:5;24376:97;24561:26;:12;;:24;:26::i;:::-;24601:19;:12;;:17;:19::i;:::-;24634:22;:12;;:20;:22::i;:::-;24670:9;;;;;;;;;;;;24483:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24209:487;;;;24121:575;;;:::o;5604:176:73:-;5682:11;5695:13;5727:46;5765:7;;5727:37;:46::i;19989:464:74:-;20084:13;20100:21;:12;;:19;:21::i;:::-;20084:37;;20131:18;20152:23;:12;;:21;:23::i;:::-;20231:20;;;20185:43;20231:20;;;:12;:20;;;;;;;:32;;;;;;;;20131:44;;-1:-1:-1;20318:19:74;:12;;:17;:19::i;:::-;20303:34;-1:-1:-1;20347:21:74;:5;20303:34;20347:15;:21::i;:::-;20378:13;;;;:7;:13;;;;;:28;20394:12;;20378:13;:28;:::i;:::-;-1:-1:-1;20416:19:74;;;;:13;:19;;;;;:30;20438:8;;20416:19;:30;:::i;2671:150:50:-;2734:6;2773:39;706:2;655;2773:7;;:39;:::i;:::-;2766:47;;;:::i;:::-;2759:55;;;2671:150;-1:-1:-1;;;2671:150:50:o;2148:414:73:-;2244:11;2257;2270:13;2296:10;2308:19;2331:110;2375:8;533:1:13;2331:30:73;:110::i;:::-;2295:146;;;;2459:5;2451:56;;;;;;;71628:2:139;2451:56:73;;;71610:21:139;71667:2;71647:18;;;71640:30;71706:34;71686:18;;;71679:62;71777:8;71757:18;;;71750:36;71803:19;;2451:56:73;71426:402:139;2451:56:73;2524:31;;;;;:4;;:23;;:31;;2548:6;;2524:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2517:38;;;;;;;;2148:414;;;;;:::o;2230:148:50:-;2293:6;2332:37;605:2;557:1;2332:7;;:37;:::i;2384:142::-;2447:7;2481:37;655:2;605;2481:7;;:37;:::i;:::-;2473:46;;;:::i;2078:146::-;2140:6;2179:36;557:1;493;2179:7;;:36;:::i;:::-;2172:44;;;:::i;:::-;2165:52;;;2078:146;-1:-1:-1;;;2078:146:50:o;2976:130::-;3044:7;3070:29;:17;3079:7;;3070:8;:17::i;:::-;1210:15:42;1084:151;3112:138:50;3173:7;3207:35;862:3;785:2;3207:7;;:35;:::i;1997:3163:135:-;2048:13;:11;:13::i;:::-;2086:11;;2071:55;;2086:11;;;2071:14;:55::i;:::-;1088:1;2159:18;;:9;:18;;;;2137:11;:41;;;;-1:-1:-1;;;;;2159:18:135;;;2137:41;;;;;2159:18;2311:79;2384:4;;2311:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2296:12:135;:94;;;;;-1:-1:-1;;;;;2296:94:135;;;;;;;-1:-1:-1;;2459:18:135;:9;:18;;;;;2415:79;2459:18;;;2488:4;;2415:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2400:12:135;:94;;;;-1:-1:-1;;;;;2400:94:135;;;;;;1128:1;-1:-1:-1;2563:18:135;:9;:18;;;;;2519:79;2563:18;;;2592:4;;2519:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2504:12:135;:94;;;;-1:-1:-1;;;;;2504:94:135;;;;;;;;;;2688:11;;-1:-1:-1;;2688:11:135;;2674:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2674:26:135;-1:-1:-1;2733:12:135;;2710;;2645:55;;-1:-1:-1;;;;;;2733:12:135;;2645:55;;2733:12;;2710;;;;:::i;:::-;-1:-1:-1;;;;;2710:36:135;;;:12;;;;;;;;;:36;2779:12;;2756;;2779;;;;;;;;2756:9;;2779:12;;2756;;;;;;:::i;:::-;-1:-1:-1;;;;;2756:36:135;;;:12;;;;;;;;;:36;2825:12;;2802;;2825;;;2802:9;;2812:1;;2802:12;;;;;;:::i;:::-;-1:-1:-1;;;;;2802:36:135;;;:12;;;;;;;;;;;:36;2848:25;;;;;:4;;:14;;:25;;2863:9;;2848:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3029:12;;;;;;;;;-1:-1:-1;;;;;3029:12:135;2983:60;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2971:9:135;:72;;;;-1:-1:-1;;;;;2971:72:135;;;;;;;;;1088:1;-1:-1:-1;3115:18:135;:9;:18;;;;;3068:82;2971:72;;3115:18;;3144:4;;3068:82;;;:::i;:::-;-1:-1:-1;;;;;76771:15:139;;;76753:34;;76823:15;;;76818:2;76803:18;;76796:43;76875:15;;;76870:2;76855:18;;76848:43;76680:2;76665:18;3068:82:135;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3053:12:135;:97;;;;-1:-1:-1;;;;;3053:97:135;;;;;;;;;3213:9;;3233:12;;3183:87;;3213:9;;;;3053:97;3233:12;;;;;3053:97;3183:87;;;:::i;:::-;-1:-1:-1;;;;;76771:15:139;;;76753:34;;76823:15;;;76818:2;76803:18;;76796:43;76875:15;;;76870:2;76855:18;;76848:43;76680:2;76665:18;3183:87:135;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3160:20:135;:110;;;;-1:-1:-1;;;;;3160:110:135;;;;;;-1:-1:-1;;3426:18:135;:9;:18;;;;;3382:79;3426:18;;;3455:4;;3382:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3367:12:135;:94;;;;-1:-1:-1;;;;;3367:94:135;;;;;;1128:1;-1:-1:-1;3530:18:135;:9;:18;;;;;3486:79;3530:18;;;3559:4;;3486:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3471:12:135;:94;;;;-1:-1:-1;;;;;3471:94:135;;;;;;;;;;3619:11;;-1:-1:-1;;3619:11:135;;3605:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3605:26:135;-1:-1:-1;3664:12:135;;3641;;3576:55;;-1:-1:-1;;;;;;3664:12:135;;3576:55;;3664:12;;3641;;;;:::i;:::-;-1:-1:-1;;;;;3641:36:135;;;:12;;;;;;;;;:36;3710:12;;3687;;3710;;;3687:9;;3710:12;;3687;;;;;;:::i;:::-;-1:-1:-1;;;;;3687:36:135;;;:12;;;;;;;;;:36;3756:12;;3733;;3756;;;3733:9;;3743:1;;3733:12;;;;;;:::i;:::-;-1:-1:-1;;;;;3733:36:135;;;:12;;;;;;;;;;;:36;3779:25;;;;;:4;;:14;;:25;;3794:9;;3779:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3832:12:135;;3815:48;;;;;;3832:12;;;;-1:-1:-1;;;;;3832:12:135;3815:48;;;78886:74:139;78976:18;;;78969:30;79035:2;79015:18;;;79008:30;79074:15;79054:18;;;79047:43;336:42:88;;-1:-1:-1;3815:8:135;;-1:-1:-1;79107:19:139;;3815:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3890:12:135;;3873:48;;;;;;-1:-1:-1;;;;;3890:12:135;;;3873:48;;;79349:74:139;79439:18;;;79432:30;79498:2;79478:18;;;79471:30;79537:15;79517:18;;;79510:43;336:42:88;;-1:-1:-1;3873:8:135;;-1:-1:-1;79570:19:139;;3873:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3948:12:135;;3931:48;;;;;;-1:-1:-1;;;;;3948:12:135;;;3931:48;;;79812:74:139;79902:18;;;79895:30;79961:2;79941:18;;;79934:30;80000:15;79980:18;;;79973:43;336:42:88;;-1:-1:-1;3931:8:135;;-1:-1:-1;80033:19:139;;3931:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4007:12:135;;3990:55;;;;;;-1:-1:-1;;;;;4007:12:135;;;3990:55;;;80275:74:139;80365:18;;;80358:30;80424:2;80404:18;;;80397:30;80463:22;80443:18;;;80436:50;336:42:88;;-1:-1:-1;3990:8:135;;-1:-1:-1;80503:19:139;;3990:55:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4072:12:135;;4055:48;;;;;;-1:-1:-1;;;;;4072:12:135;;;4055:48;;;80745:74:139;80835:18;;;80828:30;80894:2;80874:18;;;80867:30;80933:15;80913:18;;;80906:43;336:42:88;;-1:-1:-1;4055:8:135;;-1:-1:-1;80966:19:139;;4055:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4130:12:135;;4113:48;;;;;;-1:-1:-1;;;;;4130:12:135;;;4113:48;;;81208:74:139;81298:18;;;81291:30;81357:2;81337:18;;;81330:30;81396:15;81376:18;;;81369:43;336:42:88;;-1:-1:-1;4113:8:135;;-1:-1:-1;81429:19:139;;4113:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4189:9:135;;4172:42;;;;;;-1:-1:-1;;;;;4189:9:135;;;4172:42;;;81671:74:139;81761:18;;;81754:30;81820:2;81800:18;;;81793:30;81859:12;81839:18;;;81832:40;336:42:88;;-1:-1:-1;4172:8:135;;-1:-1:-1;81889:19:139;;4172:42:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4241:20:135;;4224:65;;;;;;-1:-1:-1;;;;;4241:20:135;;;4224:65;;;82131:74:139;82221:18;;;82214:30;82280:2;82260:18;;;82253:30;82319:24;82299:18;;;82292:52;336:42:88;;-1:-1:-1;4224:8:135;;-1:-1:-1;82361:19:139;;4224:65:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4305:11:135;;4300:34;;-1:-1:-1;;;;;;4305:11:135;;-1:-1:-1;1806:9:135;4300:4;:34::i;:::-;4349:11;;4344:34;;-1:-1:-1;;;;;4349:11:135;1806:9;4344:4;:34::i;:::-;4436:28;;;4462:1;4436:28;;;;;;;;;4389:44;;4436:28;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;4436:28:135;;;;;;;;;;;;;;;4389:75;;4495:82;;;;;;;;1128:1;4495:82;;;;;;4540:1;4495:82;;;;;;4552:22;4495:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4474:15;4490:1;4474:18;;;;;;;;:::i;:::-;;;;;;:103;;;;4608:82;;;;;;;;1088:1;4608:82;;;;;;4653:1;4608:82;;;;;;4665:22;4608:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4587:15;4603:1;4587:18;;;;;;;;:::i;:::-;;;;;;:103;;;;4721:82;;;;;;;;1048:1;4721:82;;;;;;4766:1;4721:82;;;;;;4778:22;4721:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4700:15;4716:1;4700:18;;;;;;;;:::i;:::-;;;;;;;;;;:103;4814:12;;:48;;;;;:12;;;;-1:-1:-1;;;;;4814:12:135;;:31;;:48;;4846:15;;4814:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4872:12:135;;:48;;;;;-1:-1:-1;;;;;4872:12:135;;;;-1:-1:-1;4872:31:135;;-1:-1:-1;4872:48:135;;4904:15;;4872:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4930:12:135;;:48;;;;;-1:-1:-1;;;;;4930:12:135;;;;-1:-1:-1;4930:31:135;;-1:-1:-1;4930:48:135;;4962:15;;4930:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4989:12:135;;:48;;;;;-1:-1:-1;;;;;4989:12:135;;;;-1:-1:-1;4989:31:135;;-1:-1:-1;4989:48:135;;5021:15;;4989:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5047:12:135;;:48;;;;;-1:-1:-1;;;;;5047:12:135;;;;-1:-1:-1;5047:31:135;;-1:-1:-1;5047:48:135;;5079:15;;5047:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5105:12:135;;:48;;;;;-1:-1:-1;;;;;5105:12:135;;;;-1:-1:-1;5105:31:135;;-1:-1:-1;5105:48:135;;5137:15;;5105:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:3122;;;1997:3163::o;19244:399:74:-;19342:12;19366:21;19420:13;19403:31;;;;;;;;:::i;:::-;;;;-1:-1:-1;;19403:31:74;;;;;;;;;;19390:63;;19436:16;;19403:31;19390:63;;:::i;:::-;;;;;;;;;;;;;19366:87;;19531:8;19525:15;19518:4;19508:8;19504:19;19501:1;19494:47;19486:55;;19576:4;19564:17;19554:73;;19611:1;19608;19601:12;1715:427:73;1814:12;1828:11;1841:13;1867:10;1879:19;1902:113;1946:8;418:1:13;1902:30:73;:113::i;:::-;1866:149;;;;2033:5;2025:59;;;;;;;84611:2:139;2025:59:73;;;84593:21:139;84650:2;84630:18;;;84623:30;84689:34;84669:18;;;84662:62;84760:11;84740:18;;;84733:39;84789:19;;2025:59:73;84409:405:139;2025:59:73;2101:34;;;;;:4;;:26;;:34;;2128:6;;2101:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2094:41;;;;;;;-1:-1:-1;2094:41:73;;;-1:-1:-1;1715:427:73;-1:-1:-1;;;;1715:427:73:o;2697:371:13:-;2789:12;;;2863:2;2845:20;;;;;:44;;-1:-1:-1;2887:2:13;2869:20;;;2845:44;2841:90;;;2898:33;;;;;;;;;;;;;;2841:90;2949:16;:7;;2963:1;2949:13;:16::i;:::-;2941:24;-1:-1:-1;2981:17:13;:7;;2996:1;2981:14;:17::i;:::-;2975:23;-1:-1:-1;3034:2:13;3016:20;;:45;;3060:1;3016:45;;;3039:18;:7;;3054:2;3039:14;:18::i;:::-;3008:53;;2697:371;;;;;:::o;5166:619:135:-;5253:7;;5308;5329:11;;;;;-1:-1:-1;5325:408:135;;;5356:17;5384:12;5389:7;-1:-1:-1;;5384:12:135;:::i;:::-;5356:41;;;;5505:9;5494:7;:20;;5486:49;;;;;;;85789:2:139;5486:49:135;;;85771:21:139;85828:2;85808:18;;;85801:30;85867:18;85847;;;85840:46;85903:18;;5486:49:135;85587:340:139;5486:49:135;5568:19;5578:9;5568:7;:19;:::i;:::-;5549:38;;5342:256;5325:408;;;5696:26;;;;:7;:26;:::i;:::-;5677:45;;5325:408;5749:29;5761:16;5749:11;:29::i;:::-;5742:36;;;;;5166:619;;;;;:::o;27270:117:91:-;27352:28;27357:5;27364:2;27368:4;27374:5;27352:4;:28::i;6817:372:135:-;6931:18;;6994:26;1862:7;6994:9;:26;:::i;:::-;6981:39;-1:-1:-1;7043:26:135;1862:7;7043:9;:26;:::i;:::-;7080:9;;:43;;;;;7103:6;7080:43;;;27047:74:139;27137:18;;;27130:34;;;7030:39:135;;-1:-1:-1;;;;;;7080:9:135;;:14;;27020:18:139;;7080:43:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7133:12:135;;7159:9;;7133:49;;;;;-1:-1:-1;;;;;7159:9:135;;;7133:49;;;27047:74:139;27137:18;;;27130:34;;;7133:12:135;;;;;;-1:-1:-1;7133:17:135;;-1:-1:-1;27020:18:139;;7133:49:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6817:372;;;;;:::o;2092:357:62:-;2254:12;2235:8;808:1;1059:20;2235:8;1077:1;1059:17;:20::i;:::-;:30;;;1055:82;;1116:20;:8;1134:1;1116:17;:20::i;:::-;1098:39;;;;;3782:6:139;3770:19;;;1098:39:62;;;3752:38:139;3725:18;;1098:39:62;3608:188:139;1055:82:62;2278:19:::1;2300:51;2338:4;2344:6;2300:37;:51::i;:::-;2278:73;;2368:74;2386:8;306:1:13;2435:6:62;2368:17;:74::i;:::-;2361:81:::0;2092:357;-1:-1:-1;;;;;;2092:357:62:o;4939:388::-;5124:12;5105:8;808:1;1059:20;5105:8;1077:1;1059:17;:20::i;:::-;:30;;;1055:82;;1116:20;:8;1134:1;1116:17;:20::i;1055:82::-;5148:19:::1;5170:59;5208:6;5216:4;5222:6;5170:37;:59::i;:::-;5148:81;;5246:74;5264:8;418:1:13;5313:6:62;5246:17;:74::i;:::-;5239:81:::0;4939:388;-1:-1:-1;;;;;;;4939:388:62:o;7702:184:135:-;7789:40;7798:5;7805;7789:40;;;;;;;;;;;;;;;;;:8;:40::i;:::-;7839;7848:5;7855;7839:40;;;;;;;;;;;;;;;;;:8;:40::i;640:284:71:-;824:17;877:6;885:7;894:9;905:11;860:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;853:64;;640:284;;;;;;:::o;2386:134:89:-;2484:29;;;;;:11;;;;:29;;2496:4;;2502:5;;2509:3;;2484:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1788:125:50;1851:14;;1884:22;785:2;1851:14;1884:7;;:22;:::i;3397:132::-;3461:14;;3500:21;:7;785:2;3500:7;;:21;:::i;25755:300:74:-;25871:58;;87766:66:139;25871:58:74;;;87754:79:139;87849:12;;;87842:28;;;25806:12:74;;25830:28;;87886:12:139;;25871:58:74;;;-1:-1:-1;;25871:58:74;;;;;;;;;;25861:69;;25871:58;25861:69;;;;25974:32;;;25982:1;25974:32;;;88091:25:139;88132:18;;;88125:34;;;25861:69:74;-1:-1:-1;25941:7:74;;;;;;336:42:88;;25974:7:74;;88064:18:139;;25974:32:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26023:25;;;;;;88725:19:139;;;;88760:12;;;88753:28;;;;88819:3;88815:16;;;;88833:66;88811:89;88797:12;;;88790:111;26023:25:74;;;;;;;;;88917:12:139;;;;26023:25:74;;;;25755:300;-1:-1:-1;;;;;;25755:300:74:o;3256:135:50:-;3320:14;;3359:24;:7;862:3;3359:7;;:24;:::i;1357:742:13:-;1472:16;1490:21;1472:16;1612:1;1602:11;;1472:16;1674:22;:8;;1602:11;1674:14;:22::i;:::-;1720:1;1710:11;;;;;1660:36;-1:-1:-1;1781:21:13;:8;;1710:11;1781:13;:21::i;:::-;1768:34;-1:-1:-1;1932:1:13;1923:10;;1987:13;;;;;2023:31;1987:13;1923:10;2023:8;;:31;:::i;:::-;1357:742;;2014:40;;-1:-1:-1;2014:40:13;;-1:-1:-1;;;2068:14:13;;;;-1:-1:-1;;;1357:742:13:o;4032:231:132:-;4097:13;4126:12;4132:5;5667:12;5653:10;;;5667:12;5653:10;;;5667:12;;5653:26;;5564:122;4126:12;4122:56;;;4140:38;1413:4:124;4140:11:132;:38::i;:::-;-1:-1:-1;4231:10:132;;-1:-1:-1;;4231:10:132;;;;;;;:14;4219:27;;;;;:11;;;;:27;;;;;;;4032:231::o;2119:386::-;2251:10;;2182:13;;2251:10;;;;;;;2292:12;2279:25;;2275:65;;2306:34;1315:4:124;2306:11:132;:34::i;:::-;-1:-1:-1;;2354:11:132;2387:22;;;;;;;;2354:11;2387;;:22;;;;;;;2423:29;;;2466:22;;;;;;;;;;;;;-1:-1:-1;2387:22:132;2119:386::o;2568:228:73:-;2694:10;2728:61;2759:8;2769:19;2728:30;:61::i;:::-;-1:-1:-1;2716:73:73;2568:228;-1:-1:-1;;;2568:228:73:o;1271:438::-;1371:14;1387:16;1416:10;1428:19;1451:115;1495:8;363:1:13;1451:30:73;:115::i;:::-;1415:151;;;;1584:5;1576:60;;;;;;;89142:2:139;1576:60:73;;;89124:21:139;89181:2;89161:18;;;89154:30;89220:34;89200:18;;;89193:62;89291:12;89271:18;;;89264:40;89321:19;;1576:60:73;88940:406:139;1576:60:73;1667:35;;;;;:4;;:27;;:35;;1695:6;;1667:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1646:56;;;;;;;-1:-1:-1;1271:438:73;-1:-1:-1;;;;1271:438:73:o;3074:380:13:-;3163:11;;;3244:2;3226:20;;;;;:44;;-1:-1:-1;3268:2:13;3250:20;;;3226:44;3222:87;;;3279:30;;;;;;;;;;;;;;3222:87;3325:17;:7;;3340:1;3325:14;:17::i;:::-;3319:23;-1:-1:-1;3367:17:13;:7;;3381:2;3367:13;:17::i;:::-;3352:32;-1:-1:-1;3420:2:13;3402:20;;:45;;3446:1;3402:45;;;3425:18;:7;;3440:2;3425:14;:18::i;2420:271::-;2499:14;;2565:2;2547:20;;2543:67;;2576:34;;;;;;;;;;;;;;2543:67;2629:17;:7;;2644:1;2629:14;:17::i;:::-;2620:26;-1:-1:-1;2667:17:13;:7;;2681:2;2667:13;:17::i;:::-;2656:28;;2420:271;;;;;:::o;858:407:73:-;943:11;956:13;982:10;994:19;1017:113;1061:8;306:1:13;1017:30:73;:113::i;:::-;981:149;;;;1148:5;1140:59;;;;;;;89870:2:139;1140:59:73;;;89852:21:139;89909:2;89889:18;;;89882:30;89948:34;89928:18;;;89921:62;90019:11;89999:18;;;89992:39;90048:19;;1140:59:73;89668:405:139;1140:59:73;1224:34;;;;;:4;;:26;;:34;;1251:6;;1224:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1209:49;;;;;;;;-1:-1:-1;858:407:73;-1:-1:-1;;;;858:407:73:o;2105:309:13:-;2183:11;;2243:2;2225:20;;;;;:44;;-1:-1:-1;2267:2:13;2249:20;;;2225:44;2221:90;;;2278:33;;;;;;;;;;;;;;2221:90;2327:17;:7;;2342:1;2327:14;:17::i;:::-;2321:23;-1:-1:-1;2380:2:13;2362:20;;:45;;2406:1;2362:45;;;2385:18;:7;;2400:2;2385:14;:18::i;2827:143:50:-;2892:7;2926:36;785:2;706;2926:7;;:36;:::i;2658:320:132:-;2784:12;;;;;;-1:-1:-1;;2784:16:132;;2832:10;;;;;2818:24;;;;2814:63;;2844:33;1536:4:124;2844:11:132;:33::i;:::-;2891:23;;;;;;:11;;;:23;;;;;:31;;;;2936:25;;;;;;;2658:320::o;2802:2541:73:-;3012:10;;:27;;;;;2937:10;;2949:19;;2937:10;;3012;;;-1:-1:-1;;;;;3012:10:73;;:17;;:27;;3030:8;;3012:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3012:27:73;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3306:12:73;;;3050:14;3306:12;;;;;;;;;2980:59;;-1:-1:-1;3050:14:73;;;;;;;3329:1893;3345:12;:19;3336:6;:28;3329:1893;;;3438:45;;;;;3381:16;;;;;;3438:4;;:23;;:45;;3462:12;;3476:6;;3438:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3438:45:73;;;;;;;;;;;;:::i;:::-;3380:103;;;;;;3606:19;3592:33;;:10;:33;;;3588:1591;;3645:11;;;;;-1:-1:-1;;3802:51:73;;;;3798:1367;;3892:30;;;;;:4;;:26;;:30;;3919:2;;3892:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3877:45;;-1:-1:-1;3877:45:73;-1:-1:-1;3944:18:73;3877:45;3944:18;;:::i;:::-;;-1:-1:-1;3984:22:73;4001:5;3984:22;;:::i;:::-;;;4055:11;4068:13;4038:44;;;;;;;;92313:3:139;92309:16;;;92218:66;92305:25;;;92293:38;;92365:16;;;;92361:25;92356:2;92347:12;;92340:47;92412:2;92403:12;;92051:370;4038:44:73;;;;;;;;;;;;;4028:54;;3798:1367;;;4111:53;;;;;4107:1058;;4311:31;;;;;:4;;:27;;:31;;4339:2;;4311:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4291:51;;-1:-1:-1;4291:51:73;-1:-1:-1;4364:22:73;4291:51;4364:22;;:::i;:::-;4418:41;;92617:66:139;92603:3;92599:16;;;92595:89;4418:41:73;;;92583:102:139;92701:12;;;92694:28;;;4364:22:73;;-1:-1:-1;92738:12:139;;4418:41:73;92426:330:139;4107:1058:73;4488:51;;;;;4484:681;;4585:30;;;;;:4;;:26;;:30;;4612:2;;4585:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4563:52;;-1:-1:-1;4563:52:73;-1:-1:-1;4563:52:73;-1:-1:-1;4637:18:73;4563:52;4637:18;;:::i;:::-;;-1:-1:-1;4677:22:73;4694:5;4677:22;;:::i;:::-;4731:51;;92978:66:139;92964:3;92960:16;;;92956:89;4731:51:73;;;92944:102:139;93065:66;93168:3;93164:16;;;93160:25;;93147:11;;;93140:46;93220:16;;;93216:25;93202:12;;;93195:47;4677:22:73;;-1:-1:-1;93258:12:139;;4731:51:73;92761:515:139;4484:681:73;4811:48;;;;;4807:358;;4904:27;;;;;:4;;:23;;:27;;4928:2;;4904:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4883:48;;-1:-1:-1;4883:48:73;;-1:-1:-1;4883:48:73;-1:-1:-1;4953:22:73;4883:48;4953:22;;:::i;:::-;;-1:-1:-1;4997:18:73;5012:3;4997:18;;:::i;:::-;;-1:-1:-1;5037:20:73;5053:4;5037:20;;:::i;:::-;5089:57;;93651:66:139;93746:3;93742:16;;;93738:25;;5089:57:73;;;93726:38:139;93816:66;93802:3;93798:16;;;93794:89;93780:12;;;93773:111;93918:16;;;93914:25;93900:12;;;93893:47;5037:20:73;;-1:-1:-1;93956:12:139;;5089:57:73;;;;;;;;;;;;5079:67;;4807:358;3627:1552;;;;;3588:1591;5201:10;-1:-1:-1;3329:1893:73;;-1:-1:-1;;3329:1893:73;;5236:7;:14;5254:1;5236:19;5232:73;;5279:5;;-1:-1:-1;5286:7:73;-1:-1:-1;5271:23:73;;-1:-1:-1;;;;;5271:23:73;5232:73;5322:4;;5328:7;;-1:-1:-1;2802:2541:73;-1:-1:-1;;;;;;;;2802:2541:73:o;4800:67:74:-;4842:18;:16;:18::i;:::-;4800:67::o;27055:91:91:-;27122:17;;;;;-1:-1:-1;;;;;27065:55:139;;27122:17:91;;;27047:74:139;27137:18;;;27130:34;;;27122:7:91;;;;27020:18:139;;27122:17:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27055:91;;:::o;229:215:43:-;306:6;371:1;362:10;;407:18;362:10;:6;407;;:18;:::i;:::-;400:26;;;:::i;:::-;393:34;;;229:215;-1:-1:-1;;;;;229:215:43:o;892:220::-;970:7;1036:2;1027:11;;1075:18;1027:11;:6;1075;;:18;:::i;:::-;1067:27;;;:::i;:::-;1059:36;;;892:220;-1:-1:-1;;;;;892:220:43:o;5791:168:135:-;5852:7;;;5895:18;5905:8;5895:7;:18;:::i;:::-;5880:33;-1:-1:-1;5931:14:135;5880:33;5931:7;:14;:::i;:::-;5923:29;5947:4;;-1:-1:-1;5791:168:135;-1:-1:-1;;5791:168:135:o;27666:837:91:-;27836:38;;;-1:-1:-1;;;;;854:55:139;;;27836:38:91;;;;836:74:139;;;;27836:38:91;;;;;;;;;;809:18:139;;;;27836:38:91;;;;;;;;;;;;;27819:56;;27795:20;;27819:16;;;:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27792:83;;;27885:15;27914:7;27903:30;;;;;;;;;;;;:::i;:::-;27885:48;-1:-1:-1;27970:71:91;28036:4;27970:51;28018:2;27970:38;;:22;:8;27986:5;27970:15;:22::i;:::-;:26;;:38::i;:::-;:47;;:51::i;:::-;:65;;:71::i;:::-;28087:6;28083:414;;;28156:34;;;;;;;;;;;;;;;;;;;;;;28139:52;;28112:23;;-1:-1:-1;;;;;28139:16:91;;;:52;;28156:34;28139:52;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28109:82;;;28205:14;28233:10;28222:33;;;;;;;;;;;;:::i;:::-;28205:50;;28280:7;28273:4;:14;28269:144;;;28318:14;28328:4;28318:7;:14;:::i;:::-;28307:26;;;;:::i;:::-;;;28269:144;;;28383:14;28390:7;28383:4;:14;:::i;:::-;28372:26;;;;:::i;:::-;;;28269:144;28426:60;28479:6;28426:38;;:22;:8;28442:5;28426:15;:22::i;12935:305:107:-;13013:6;13056:10;:6;13065:1;13056:10;:::i;:::-;13039:6;:13;:27;;13031:60;;;;;;;95049:2:139;13031:60:107;;;95031:21:139;95088:2;95068:18;;;95061:30;95127:22;95107:18;;;95100:50;95167:18;;13031:60:107;94847:344:139;13031:60:107;-1:-1:-1;13168:29:107;13184:3;13168:29;13162:36;;12935:305::o;3460:191:13:-;3544:12;3575:11;;;;:69;;3614:30;;;92218:66:139;92313:3;92309:16;;;92305:25;;3614:30:13;;;92293:38:139;92365:16;;;92361:25;92347:12;;;92340:47;92403:12;3614:30:13;;;;;;;;;;;;3575:69;;;3589:22;;95359:66:139;95345:3;95341:16;;;95337:89;3589:22:13;;;95325:102:139;95443:12;;3589:22:13;;;;;;;;;;;;3568:76;;3460:191;;;;:::o;6602:435:62:-;6766:12;6747:8;808:1;1059:20;6747:8;1077:1;1059:17;:20::i;:::-;:30;;;1055:82;;1116:20;:8;1134:1;1116:17;:20::i;1055:82::-;6843:8:::1;250:1:13;6912:25:62;:7;:14;:23;:25::i;:::-;:29;::::0;6940:1:::1;6912:29;:::i;:::-;6980:11;7009:7;6809:221;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6790:240;;6602:435:::0;;;;;;:::o;3828:222:13:-;3927:12;3958:11;;;;:85;;4005:38;;92978:66:139;92964:3;92960:16;;;92956:89;4005:38:13;;;92944:102:139;93065:66;93168:3;93164:16;;;93160:25;;93147:11;;;93140:46;93220:16;;;93216:25;93202:12;;;93195:47;93258:12;;4005:38:13;;;;;;;;;;;;3958:85;;;3972:30;;96727:66:139;96713:3;96709:16;;;96705:89;3972:30:13;;;96693:102:139;96846:66;96832:3;96828:16;;;96824:89;96811:11;;;96804:110;96930:12;;3972:30:13;;;;;;;;;;;;3958:85;3951:92;3828:222;-1:-1:-1;;;;3828:222:13:o;95:128:43:-;171:5;201:6;;208;201:14;;;;;;;:::i;:::-;;;;;;;;;95:128;-1:-1:-1;;;;;95:128:43:o;1776:194:124:-;1881:10;1875:4;1868:24;1918:4;1912;1905:18;1949:4;1943;1936:18;450:215:43;527:6;592:1;583:10;;628:18;583:10;:6;628;;:18;:::i;:::-;621:26;;;:::i;:::-;614:34;;;450:215;-1:-1:-1;;;;;450:215:43:o;1570:210::-;1647:7;1713:2;1704:11;;1744:18;1704:11;:6;1744;;:18;:::i;:::-;1736:27;;;:::i;:::-;1729:34;1570:210;-1:-1:-1;;;;;1570:210:43:o;765:87:73:-;825:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;812:10;;:33;;;;;-1:-1:-1;;;;;812:33:73;;;;;-1:-1:-1;;;;;812:33:73;;;;;;765:87::o;13258:156:97:-;6853:12;;;:22;;;;-1:-1:-1;;;;;6853:22:97;;;;;-1:-1:-1;6853:12:97;13371:36;6747:156;13420:143;7008:9;;;:16;;;;;;;;;;;-1:-1:-1;7008:9:97;13526:30;6909:143;13725:152;7504:10;;;;:47;;;;;;;13799:18;7504:47;;;;;;-1:-1:-1;;;;;7528:21:97;;7504:47;;;;;;13860:4;13836:34;7400:179;14946:120;15026:33;15040:4;15054:3;15026:13;:33::i;16296:213:131:-;16352:6;16382:16;16374:24;;16370:103;;;16421:41;;;;;16452:2;16421:41;;;97134:36:139;97186:18;;;97179:34;;;97107:18;;16421:41:131;96953:266:139;16370:103:131;-1:-1:-1;16496:5:131;16296:213::o;15438:1484:97:-;15532:12;;;;15568:9;;;;15609:11;;;;-1:-1:-1;;;;;15532:12:97;;;;15568:9;;;;;;15518:11;15652:34;15532:4;15652:28;:34::i;:::-;-1:-1:-1;;;;;15702:15:97;;:10;:15;;;;;;;;;;;:21;;;;;;;;;;15734:37;;15630:56;;-1:-1:-1;15702:21:97;15734:37;;15630:56;;15759:11;;15734:37;;:::i;:::-;;;;-1:-1:-1;;15734:37:97;;;;;;;;;15724:48;;15734:37;15724:48;;;;15702:71;;;;;;;;;;-1:-1:-1;15702:71:97;:77;;;;;15697:126;;15795:17;15800:4;15806:5;15795:4;:17::i;:::-;;15697:126;-1:-1:-1;;;;;15856:15:97;;15832:21;15856:15;;;;;;;;;;;:21;;;;;;;;;;15888:37;;15856:21;;15832;;15888:37;;15905:6;;15913:11;;15888:37;;:::i;:::-;;;;;;;;;;;;;15878:48;;;;;;15856:71;;;;;;;;;;;15832:95;;15980:1;15960:4;:16;;;15942:4;:15;;;:34;;;;:::i;:::-;15941:40;15937:460;;;15997:14;16045:4;:16;;;16027:4;:15;;;:34;;;;:::i;:::-;16020:42;;:3;:42;:::i;:::-;16014:49;;:1;:49;:::i;:::-;16313:19;;;;;;;;4392:25:139;;;15997:66:97;;-1:-1:-1;16102:21:97;;;;16313:11;;;;4365:18:139;;16313:19:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16313:19:97;;;;;;;;;;;;:::i;:::-;16169:185;;;;;;;;:::i;:::-;;;;;;;;;;;;;16077:309;;;;;;;;;;;;;;:::i;:::-;;15983:414;15937:460;16444:9;;16423:32;;;;;-1:-1:-1;;;;;27065:55:139;;16423:32:97;;;27047:74:139;27137:18;;;27130:34;;;;16406:14:97;;16423:7;;;;27020:18:139;;16423:32:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16541:15;;;;;16558:16;;;;16406:49;;-1:-1:-1;16465:16:97;;12339:28;;;12334:3;12330:38;12326:46;;;;-1:-1:-1;;12322:54:97;12305:72;;12676:42;12656:62;;12723:23;;;;12655:92;16608:9;;16586:43;;;;;-1:-1:-1;;;;;100582:55:139;;16586:43:97;;;100564:74:139;100654:18;;;100647:34;;;;100697:18;;;100690:34;;;16465:110:97;;-1:-1:-1;16586:8:97;;;;100537:18:139;;16586:43:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16641:12;16655:18;16677:31;16703:4;16677:25;:31::i;:::-;16640:68;;;;16724:7;16723:8;:29;;;;16749:3;16735:10;:17;;16723:29;16719:176;;;16790:9;;16768:41;;;;;-1:-1:-1;;;;;100582:55:139;;16768:41:97;;;100564:74:139;100654:18;;;100647:34;;;;100697:18;;;100690:34;;;16768:8:97;;;;100537:18:139;;16768:41:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16823:61:97;;;;;100937:2:139;16823:61:97;;;100919:21:139;100976:2;100956:18;;;100949:30;101015:34;100995:18;;;100988:62;101086:21;101066:18;;;101059:49;101125:19;;;-1:-1:-1;16823:61:97;;-1:-1:-1;100735:415:139;16719:176:97;16904:11;16910:4;16904:5;:11::i;953:236::-;1024:12;1052:4;:14;;:21;;;;;:::i;:::-;;;1077:1;1052:26;1048:135;;1101:19;1109:4;:10;;1101:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:19::i;1048:135::-;1158:4;:14;;1151:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;953:236;;;:::o;1048:135::-;953:236;;;:::o;13111:141::-;13181:7;13207:33;13227:4;13233:6;13207:19;:33::i;:::-;:38;;13111:141;-1:-1:-1;;;13111:141:97:o;1251:343::-;1381:9;;;;1319:4;;;;;;1381:9;;1392:19;1381:4;1392:13;:19::i;:::-;1364:48;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1364:48:97;;;;;;;;;;1458:12;;;;1364:48;;-1:-1:-1;1423:12:97;;;;-1:-1:-1;;;;;1458:12:97;;:29;;1364:48;;1458:29;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1422:65;;;;1497:14;1514:38;1529:4;1540;:11;;;1535:2;:16;;;;:::i;:::-;1514:14;:38::i;:::-;1571:7;;1497:55;;-1:-1:-1;1251:343:97;;-1:-1:-1;;;;;1251:343:97:o;14704:92::-;14763:26;14784:4;14763:20;:26::i;:::-;14704:92;:::o;11186:393::-;11245:12;11269:19;11301:1;:8;11312:2;11301:13;;;;:::i;:::-;11291:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11291:24:97;;11269:46;;11330:9;11325:224;11349:1;:8;11345:1;:12;11325:224;;;11378:9;11390:1;11392;11390:4;;;;;;;;:::i;:::-;;;;;;;;;;;;11509:10;;;11489:32;;;;;11482:43;-1:-1:-1;11359:3:97;;11325:224;;4249:2492;4361:12;;;;4397:9;;;;4438:11;;;;4319:16;;-1:-1:-1;;;;;4361:12:97;;4397:9;;;4319:16;4481:19;4361:4;4481:13;:19::i;:::-;-1:-1:-1;;;;;4551:15:97;;:10;:15;;;;;;;;;;;:21;;;;;;;;;;4583:37;;4459:41;;-1:-1:-1;4551:21:97;4583:37;;4459:41;;4608:11;;4583:37;;:::i;:::-;;;;-1:-1:-1;;4583:37:97;;;;;;;;;4573:48;;4583:37;4573:48;;;;4551:71;;;;;;;;;;-1:-1:-1;4551:71:97;:77;;;;;4547:255;;;4648:6;4644:56;;;4674:11;4680:4;4674:5;:11::i;:::-;-1:-1:-1;;;;;4720:15:97;;:10;:15;;;;;;;;;;;:21;;;;;;;;;;4752:37;;4720:21;;:10;4752:37;;4769:6;;4777:11;;4752:37;;:::i;:::-;;;;;;;;;;;;;4742:48;;;;;;4720:71;;;;;;;;;;;4713:78;;;;;;;;4547:255;670:28;662:37;;-1:-1:-1;;;;;4811:9:97;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4835:18;4857:16;4868:4;4857:10;:16::i;:::-;4911:25;;;;;-1:-1:-1;;;;;854:55:139;;4911:25:97;;;836:74:139;4832:41:97;;-1:-1:-1;4884:22:97;;-1:-1:-1;4911:11:97;;;;809:18:139;;4911:25:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4911:25:97;;;;;;;;;;;;:::i;:::-;4883:53;;;4951:5;:12;4967:1;4951:17;4947:1460;;4984:74;;;;;;103081:2:139;4984:74:97;;;103063:21:139;103100:18;;;103093:30;;;;103159:34;103139:18;;;103132:62;103230:34;103210:18;;;103203:62;103282:19;;4984:74:97;102879:428:139;4947:1460:97;5106:12;;5089:1308;5127:1;5120:3;;;:::i;:::-;;;;:8;5089:1308;;5149:12;670:28;662:37;;-1:-1:-1;;;;;5164:7:97;;5172:3;5177:5;5183:1;5177:8;;;;;;;;:::i;:::-;;;;;;;5164:22;;;;;;;;;;;;;;;-1:-1:-1;;;;;27065:55:139;;;;27047:74;;27152:2;27137:18;;27130:34;27035:2;27020:18;;26844:326;5164:22:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5149:37;-1:-1:-1;5149:37:97;5204:114;;5255:44;5276:3;5289:5;5295:1;5289:8;;;;;;;;:::i;:::-;;;;;;;;;;;;5255:44;;;-1:-1:-1;;;;;27065:55:139;;;27047:74;;27137:18;;;27130:34;27020:18;5255:44:97;;;;;;;5204:114;5341:36;5362:4;5368:5;5374:1;5368:8;;;;;;;;:::i;:::-;;;;;;;5341:20;:36::i;:::-;5336:92;;5401:8;5089:1308;;5336:92;5519:25;;;;5447:18;;;;5519:25;;5515:256;;;5568:10;5635:27;5647:4;5653:5;5659:1;5653:8;;;;;;;;:::i;:::-;;;;;;;5635:11;:27::i;:::-;5600:62;;-1:-1:-1;5600:62:97;-1:-1:-1;5600:62:97;-1:-1:-1;5600:62:97;5684:69;;5722:8;;;;5089:1308;;5684:69;5546:225;5515:256;12374:1;12339:28;;;12334:3;12330:38;12326:46;-1:-1:-1;;12322:54:97;12305:72;;5901:57;;5900:74;;5997:29;;;5993:84;;6050:8;;;;5089:1308;;5993:84;6100:89;6110:3;6115:4;6148:6;6156:11;6131:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6121:48;;;;;;6179:5;6185:1;6179:8;;;;;;;;:::i;:::-;;;;;;;;;;;;6100:89;;;-1:-1:-1;;;;;103559:55:139;;;103541:74;;103663:66;103651:79;;;103631:18;;;103624:107;;;;103747:18;;;103740:34;103805:2;103790:18;;103783:34;103528:3;103513:19;6100:89:97;;;;;;;6301:58;;;;;;;;6318:5;6324:1;6318:8;;;;;;;;:::i;:::-;;;;;;;6310:17;;6301:58;;;;6329:10;6301:58;;;;6341:11;6301:58;;;;6354:4;6301:58;;;;;6207:4;:10;;:15;6218:3;-1:-1:-1;;;;;6207:15:97;-1:-1:-1;;;;;6207:15:97;;;;;;;;;;;;:21;6223:4;6207:21;;;;;;;;;;;;;;;;;:71;6256:6;6264:11;6239:37;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;6239:37:97;;;;;;6229:48;;6239:37;6229:48;;;;6207:71;;;;;;;;;;;;-1:-1:-1;6207:71:97;:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;5089:1308:97;;-1:-1:-1;;;;;6438:15:97;;:10;:15;;;;;;;;;;;:21;;;;;;;;;;6470:37;;6438:21;;:10;6470:37;;6487:6;;6495:11;;6470:37;;:::i;:::-;;;;-1:-1:-1;;6470:37:97;;;;;;;;;6460:48;;6470:37;6460:48;;;;6438:71;;;;;;;;;;-1:-1:-1;6438:71:97;:77;;;;;6417:171;;;;;;;104030:2:139;6417:171:97;;;104012:21:139;104069:2;104049:18;;;104042:30;104108:34;104088:18;;;104081:62;104179:17;104159:18;;;104152:45;104214:19;;6417:171:97;103828:411:139;6417:171:97;6603:6;6599:48;;;6625:11;6631:4;6625:5;:11::i;:::-;-1:-1:-1;;;;;6663:15:97;;:10;:15;;;;;;;;;;;:21;;;;;;;;;;6695:37;;6663:21;;:10;6695:37;;6712:6;;6720:11;;6695:37;;:::i;:::-;;;;;;;;;;;;;6685:48;;;;;;6663:71;;;;;;;;;;;6656:78;;;;;;;;4249:2492;;;;:::o;10876:304::-;10954:7;10973:11;10995;11020:2;11009:1;:8;:13;:29;;11030:1;:8;11009:29;;;11025:2;11009:29;10995:43;;11053:9;11048:106;11072:3;11068:1;:7;11048:106;;;11137:5;:1;11141;11137:5;:::i;:::-;11111:1;11113:10;11122:1;11113:6;:10;:::i;:::-;11111:13;;;;;;;;:::i;:::-;;;;;;;11103:40;;11096:47;;;;;11077:3;;11048:106;;;-1:-1:-1;11170:3:97;;10876:304;-1:-1:-1;;;;10876:304:97:o;11585:239::-;11651:12;;;11644:19;;;;;;11680:9;;;11673:16;;;;;;11699:17;11644:19;11706:10;;11651:12;11699:17;:::i;:::-;11726:18;11733:11;;;11726:18;;;11761:25;;;11754:32;;;;;;11796:21;;11803:14;;;;11796:21;:::i;1851:546::-;1986:12;;;;;1978:27;;;;;-1:-1:-1;;;;;1986:12:97;;;1978:27;;;27047:74:139;;;;27137:18;;;27130:34;;;1938:4:97;;;;1978:7;;;;27020:18:139;;1978:27:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1954:51;;2016:12;2030:23;2057:16;2068:4;2057:10;:16::i;:::-;2015:58;;-1:-1:-1;2015:58:97;-1:-1:-1;2084:15:97;2102:29;;:65;;2165:1;2102:65;;;-1:-1:-1;;2102:65:97;2186:12;;;;;2177:37;;;;;-1:-1:-1;;;;;2186:12:97;;;2177:37;;;100564:74:139;;;;100654:18;;;100647:34;;;100697:18;;;100690:34;;;2084:83:97;;-1:-1:-1;2177:8:97;;;;100537:18:139;;2177:37:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2228:22;2254:16;2265:4;2254:10;:16::i;:::-;2290:12;;;;;2281:43;;;;;-1:-1:-1;;;;;2290:12:97;;;2281:43;;;100564:74:139;;;;100654:18;;;100647:34;;;100697:18;;;100690:34;;;2225:45:97;;-1:-1:-1;2281:8:97;;-1:-1:-1;2281:8:97;;100537:18:139;;2281:43:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2343:7;:46;;;;;2374:14;2355:15;:33;;2343:46;2335:55;1851:546;-1:-1:-1;;;;;;;;1851:546:97:o;3080:534::-;3224:12;;;;;3216:27;;;;;-1:-1:-1;;;;;3224:12:97;;;3216:27;;;27047:74:139;;;;27137:18;;;27130:34;;;3158:4:97;;;;;;;;3216:7;;;;27020:18:139;;3216:27:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3192:51;;3255:14;3271:18;3293:28;3304:4;3310;3316;3293:10;:28::i;:::-;3254:67;;;;3332:15;3349:19;3372:29;3383:4;3389;3395:5;3372:10;:29::i;:::-;3506:12;;;;;3497:43;;;;;-1:-1:-1;;;;;3506:12:97;;;3497:43;;;100564:74:139;;;;100654:18;;;100647:34;;;100697:18;;;100690:34;;;3331:70:97;;-1:-1:-1;3331:70:97;-1:-1:-1;3497:8:97;;;;100537:18:139;;3497:43:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3558:9;:23;;;;;3571:10;3558:23;3550:57;3583:10;;-1:-1:-1;3583:10:97;-1:-1:-1;3080:534:97;;-1:-1:-1;;;;;;3080:534:97:o;2560:514::-;2648:4;2654:7;2678:14;2673:368;2707:3;2698:6;:12;2673:368;;;2736:18;2757:4;:44;;2789:1;:11;;2757:44;;;2771:12;2777:6;2771:3;:12;:::i;:::-;2765:1;:19;;2757:44;2824:12;;;;;2815:49;;;;;-1:-1:-1;;;;;2824:12:97;;;2815:49;;;100564:74:139;;;;100654:18;;;100647:34;;;100697:18;;;100690:34;;;2736:65:97;;-1:-1:-1;2815:8:97;;;;100537:18:139;;2815:49:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2880:12;2894;2910:16;2921:4;2910:10;:16::i;:::-;2879:47;;;;2945:7;:30;;;;-1:-1:-1;2957:17:97;;;2945:30;2941:90;;;3003:4;3009:6;2995:21;;;;;;;;;;2941:90;-1:-1:-1;;;2712:8:97;;2673:368;;;;3058:5;3065:1;3050:17;;;;2560:514;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:121:139;99:10;92:5;88:22;81:5;78:33;68:61;;125:1;122;115:12;140:154;-1:-1:-1;;;;;219:5:139;215:54;208:5;205:65;195:93;;284:1;281;274:12;299:386;366:6;374;427:2;415:9;406:7;402:23;398:32;395:52;;;443:1;440;433:12;395:52;482:9;469:23;501:30;525:5;501:30;:::i;:::-;550:5;-1:-1:-1;607:2:139;592:18;;579:32;620:33;579:32;620:33;:::i;:::-;672:7;662:17;;;299:386;;;;;:::o;921:347::-;972:8;982:6;1036:3;1029:4;1021:6;1017:17;1013:27;1003:55;;1054:1;1051;1044:12;1003:55;-1:-1:-1;1077:20:139;;1120:18;1109:30;;1106:50;;;1152:1;1149;1142:12;1106:50;1189:4;1181:6;1177:17;1165:29;;1241:3;1234:4;1225:6;1217;1213:19;1209:30;1206:39;1203:59;;;1258:1;1255;1248:12;1273:184;1325:77;1322:1;1315:88;1422:4;1419:1;1412:15;1446:4;1443:1;1436:15;1462:254;1535:2;1529:9;1577:4;1565:17;;1612:18;1597:34;;1633:22;;;1594:62;1591:88;;;1659:18;;:::i;:::-;1695:2;1688:22;1462:254;:::o;1721:334::-;1792:2;1786:9;1848:2;1838:13;;-1:-1:-1;;1834:86:139;1822:99;;1951:18;1936:34;;1972:22;;;1933:62;1930:88;;;1998:18;;:::i;:::-;2034:2;2027:22;1721:334;;-1:-1:-1;1721:334:139:o;2060:245::-;2108:4;2141:18;2133:6;2130:30;2127:56;;;2163:18;;:::i;:::-;-1:-1:-1;2220:2:139;2208:15;-1:-1:-1;;2204:88:139;2294:4;2200:99;;2060:245::o;2310:462::-;2352:5;2405:3;2398:4;2390:6;2386:17;2382:27;2372:55;;2423:1;2420;2413:12;2372:55;2459:6;2446:20;2490:48;2506:31;2534:2;2506:31;:::i;:::-;2490:48;:::i;:::-;2563:2;2554:7;2547:19;2609:3;2602:4;2597:2;2589:6;2585:15;2581:26;2578:35;2575:55;;;2626:1;2623;2616:12;2575:55;2691:2;2684:4;2676:6;2672:17;2665:4;2656:7;2652:18;2639:55;2739:1;2714:16;;;2732:4;2710:27;2703:38;;;;2718:7;2310:462;-1:-1:-1;;;2310:462:139:o;2777:826::-;2883:6;2891;2899;2907;2960:2;2948:9;2939:7;2935:23;2931:32;2928:52;;;2976:1;2973;2966:12;2928:52;3016:9;3003:23;3045:18;3086:2;3078:6;3075:14;3072:34;;;3102:1;3099;3092:12;3072:34;3141:58;3191:7;3182:6;3171:9;3167:22;3141:58;:::i;:::-;3218:8;;-1:-1:-1;3115:84:139;-1:-1:-1;3306:2:139;3291:18;;3278:32;;-1:-1:-1;3322:16:139;;;3319:36;;;3351:1;3348;3341:12;3319:36;3374:51;3417:7;3406:8;3395:9;3391:24;3374:51;:::i;:::-;3364:61;;3478:2;3467:9;3463:18;3450:32;3434:48;;3507:2;3497:8;3494:16;3491:36;;;3523:1;3520;3513:12;3491:36;;3546:51;3589:7;3578:8;3567:9;3563:24;3546:51;:::i;:::-;3536:61;;;2777:826;;;;;;;:::o;4649:250::-;4734:1;4744:113;4758:6;4755:1;4752:13;4744:113;;;4834:11;;;4828:18;4815:11;;;4808:39;4780:2;4773:10;4744:113;;;-1:-1:-1;;4891:1:139;4873:16;;4866:27;4649:250::o;4904:329::-;4945:3;4983:5;4977:12;5010:6;5005:3;4998:19;5026:76;5095:6;5088:4;5083:3;5079:14;5072:4;5065:5;5061:16;5026:76;:::i;:::-;5147:2;5135:15;-1:-1:-1;;5131:88:139;5122:98;;;;5222:4;5118:109;;4904:329;-1:-1:-1;;4904:329:139:o;5238:217::-;5385:2;5374:9;5367:21;5348:4;5405:44;5445:2;5434:9;5430:18;5422:6;5405:44;:::i;5460:114::-;5544:4;5537:5;5533:16;5526:5;5523:27;5513:55;;5564:1;5561;5554:12;5579:152;5656:20;;5705:1;5695:12;;5685:40;;5721:1;5718;5711:12;5736:343;5819:6;5827;5880:2;5868:9;5859:7;5855:23;5851:32;5848:52;;;5896:1;5893;5886:12;5848:52;5935:9;5922:23;5954:29;5977:5;5954:29;:::i;:::-;6002:5;-1:-1:-1;6026:47:139;6069:2;6054:18;;6026:47;:::i;6084:488::-;6137:3;6175:5;6169:12;6202:6;6197:3;6190:19;6228:4;6257;6252:3;6248:14;6241:21;;6296:4;6289:5;6285:16;6319:1;6329:218;6343:6;6340:1;6337:13;6329:218;;;6408:13;;-1:-1:-1;;;;;6404:62:139;6392:75;;6487:12;;;;6522:15;;;;6365:1;6358:9;6329:218;;;-1:-1:-1;6563:3:139;;6084:488;-1:-1:-1;;;;;6084:488:139:o;6577:261::-;6756:2;6745:9;6738:21;6719:4;6776:56;6828:2;6817:9;6813:18;6805:6;6776:56;:::i;7066:588::-;7148:6;7156;7164;7217:2;7205:9;7196:7;7192:23;7188:32;7185:52;;;7233:1;7230;7223:12;7185:52;7273:9;7260:23;7306:18;7298:6;7295:30;7292:50;;;7338:1;7335;7328:12;7292:50;7361:49;7402:7;7393:6;7382:9;7378:22;7361:49;:::i;:::-;7351:59;;;7460:2;7449:9;7445:18;7432:32;7473:29;7496:5;7473:29;:::i;:::-;7521:5;-1:-1:-1;7578:2:139;7563:18;;7550:32;7591:31;7550:32;7591:31;:::i;:::-;7641:7;7631:17;;;7066:588;;;;;:::o;7659:656::-;7711:3;7742;7774:5;7768:12;7801:6;7796:3;7789:19;7827:4;7856;7851:3;7847:14;7840:21;;7914:4;7904:6;7901:1;7897:14;7890:5;7886:26;7882:37;7953:4;7946:5;7942:16;7976:1;7986:303;8000:6;7997:1;7994:13;7986:303;;;-1:-1:-1;;8075:5:139;8069:4;8065:16;8061:89;8056:3;8049:102;8172:37;8204:4;8195:6;8189:13;8172:37;:::i;:::-;8267:12;;;;8164:45;-1:-1:-1;8232:15:139;;;;8022:1;8015:9;7986:303;;;-1:-1:-1;8305:4:139;;7659:656;-1:-1:-1;;;;;;;7659:656:139:o;8320:1159::-;8526:4;8555:2;8595;8584:9;8580:18;8625:2;8614:9;8607:21;8648:6;8683;8677:13;8714:6;8706;8699:22;8740:2;8730:12;;8773:2;8762:9;8758:18;8751:25;;8835:2;8825:6;8822:1;8818:14;8807:9;8803:30;8799:39;8873:2;8865:6;8861:15;8894:1;8904:546;8918:6;8915:1;8912:13;8904:546;;;8983:22;;;9007:66;8979:95;8967:108;;9098:13;;9143:9;;-1:-1:-1;;;;;9139:58:139;9124:74;;9237:11;;9231:18;9269:15;;;9262:27;;;9312:58;9354:15;;;9231:18;9312:58;:::i;:::-;9428:12;;;;9302:68;-1:-1:-1;;9393:15:139;;;;8940:1;8933:9;8904:546;;;-1:-1:-1;9467:6:139;;8320:1159;-1:-1:-1;;;;;;;;8320:1159:139:o;9739:1114::-;9862:6;9870;9878;9886;9894;9902;9910;9963:3;9951:9;9942:7;9938:23;9934:33;9931:53;;;9980:1;9977;9970:12;9931:53;10019:9;10006:23;10038:30;10062:5;10038:30;:::i;:::-;10087:5;-1:-1:-1;10144:2:139;10129:18;;10116:32;10157:33;10116:32;10157:33;:::i;:::-;10209:7;-1:-1:-1;10267:2:139;10252:18;;10239:32;10290:18;10320:14;;;10317:34;;;10347:1;10344;10337:12;10317:34;10370:49;10411:7;10402:6;10391:9;10387:22;10370:49;:::i;:::-;10360:59;;10466:2;10455:9;10451:18;10438:32;10428:42;;10522:3;10511:9;10507:19;10494:33;10479:48;;10536:33;10561:7;10536:33;:::i;:::-;10588:7;;-1:-1:-1;10648:3:139;10633:19;;10620:33;;10665:16;;;10662:36;;;10694:1;10691;10684:12;10662:36;;10733:60;10785:7;10774:8;10763:9;10759:24;10733:60;:::i;:::-;9739:1114;;;;-1:-1:-1;9739:1114:139;;-1:-1:-1;9739:1114:139;;;;10707:86;;-1:-1:-1;;;9739:1114:139:o;10858:409::-;10928:6;10936;10989:2;10977:9;10968:7;10964:23;10960:32;10957:52;;;11005:1;11002;10995:12;10957:52;11045:9;11032:23;11078:18;11070:6;11067:30;11064:50;;;11110:1;11107;11100:12;11064:50;11149:58;11199:7;11190:6;11179:9;11175:22;11149:58;:::i;:::-;11226:8;;11123:84;;-1:-1:-1;10858:409:139;-1:-1:-1;;;;10858:409:139:o;11678:117::-;11763:6;11756:5;11752:18;11745:5;11742:29;11732:57;;11785:1;11782;11775:12;11800:313;11867:6;11875;11928:2;11916:9;11907:7;11903:23;11899:32;11896:52;;;11944:1;11941;11934:12;11896:52;11983:9;11970:23;12002:30;12026:5;12002:30;:::i;:::-;12051:5;12103:2;12088:18;;;;12075:32;;-1:-1:-1;;;11800:313:139:o;12310:628::-;12398:6;12406;12414;12467:2;12455:9;12446:7;12442:23;12438:32;12435:52;;;12483:1;12480;12473:12;12435:52;12523:9;12510:23;12552:18;12593:2;12585:6;12582:14;12579:34;;;12609:1;12606;12599:12;12579:34;12648:58;12698:7;12689:6;12678:9;12674:22;12648:58;:::i;:::-;12725:8;;-1:-1:-1;12622:84:139;-1:-1:-1;12813:2:139;12798:18;;12785:32;;-1:-1:-1;12829:16:139;;;12826:36;;;12858:1;12855;12848:12;12826:36;;12881:51;12924:7;12913:8;12902:9;12898:24;12881:51;:::i;:::-;12871:61;;;12310:628;;;;;:::o;12943:183::-;13003:4;13036:18;13028:6;13025:30;13022:56;;;13058:18;;:::i;:::-;-1:-1:-1;13103:1:139;13099:14;13115:4;13095:25;;12943:183::o;13131:743::-;13185:5;13238:3;13231:4;13223:6;13219:17;13215:27;13205:55;;13256:1;13253;13246:12;13205:55;13292:6;13279:20;13318:4;13342:60;13358:43;13398:2;13358:43;:::i;13342:60::-;13424:3;13448:2;13443:3;13436:15;13476:4;13471:3;13467:14;13460:21;;13533:4;13527:2;13524:1;13520:10;13512:6;13508:23;13504:34;13490:48;;13561:3;13553:6;13550:15;13547:35;;;13578:1;13575;13568:12;13547:35;13614:4;13606:6;13602:17;13628:217;13644:6;13639:3;13636:15;13628:217;;;13724:3;13711:17;13741:31;13766:5;13741:31;:::i;:::-;13785:18;;13823:12;;;;13661;;13628:217;;;-1:-1:-1;13863:5:139;13131:743;-1:-1:-1;;;;;;13131:743:139:o;13879:1211::-;13996:6;14004;14057:2;14045:9;14036:7;14032:23;14028:32;14025:52;;;14073:1;14070;14063:12;14025:52;14113:9;14100:23;14142:18;14183:2;14175:6;14172:14;14169:34;;;14199:1;14196;14189:12;14169:34;14222:61;14275:7;14266:6;14255:9;14251:22;14222:61;:::i;:::-;14212:71;;14302:2;14292:12;;14357:2;14346:9;14342:18;14329:32;14386:2;14376:8;14373:16;14370:36;;;14402:1;14399;14392:12;14370:36;14425:24;;;-1:-1:-1;14480:4:139;14472:13;;14468:27;-1:-1:-1;14458:55:139;;14509:1;14506;14499:12;14458:55;14545:2;14532:16;14568:60;14584:43;14624:2;14584:43;:::i;14568:60::-;14662:15;;;14744:1;14740:10;;;;14732:19;;14728:28;;;14693:12;;;;14768:19;;;14765:39;;;14800:1;14797;14790:12;14765:39;14824:11;;;;14844:216;14860:6;14855:3;14852:15;14844:216;;;14940:3;14927:17;14957:30;14981:5;14957:30;:::i;:::-;15000:18;;14877:12;;;;15038;;;;14844:216;;;15079:5;15069:15;;;;;;;13879:1211;;;;;:::o;15095:511::-;15147:3;15185:5;15179:12;15212:6;15207:3;15200:19;15238:4;15267;15262:3;15258:14;15251:21;;15306:4;15299:5;15295:16;15329:1;15339:242;15353:6;15350:1;15347:13;15339:242;;;15418:13;;15433:66;15414:86;15402:99;;15521:12;;;;15556:15;;;;15375:1;15368:9;15339:242;;15611:1245;15831:4;15860:2;15900;15889:9;15885:18;15930:2;15919:9;15912:21;15953:6;15988;15982:13;16019:6;16011;16004:22;16045:2;16035:12;;16078:2;16067:9;16063:18;16056:25;;16140:2;16130:6;16127:1;16123:14;16112:9;16108:30;16104:39;16178:2;16170:6;16166:15;16199:1;16209:618;16223:6;16220:1;16217:13;16209:618;;;16312:66;16300:9;16292:6;16288:22;16284:95;16279:3;16272:108;16409:6;16403:13;16455:2;16449:9;16486:2;16478:6;16471:18;16516:47;16559:2;16551:6;16547:15;16533:12;16516:47;:::i;:::-;16604:11;;;16598:18;16653:19;;;16636:15;;;16629:44;16598:18;16502:61;-1:-1:-1;16696:51:139;16502:61;16598:18;16696:51;:::i;:::-;16805:12;;;;16686:61;-1:-1:-1;;;16770:15:139;;;;16245:1;16238:9;16209:618;;16861:477;16940:6;16948;16956;17009:2;16997:9;16988:7;16984:23;16980:32;16977:52;;;17025:1;17022;17015:12;16977:52;17065:9;17052:23;17098:18;17090:6;17087:30;17084:50;;;17130:1;17127;17120:12;17084:50;17169:58;17219:7;17210:6;17199:9;17195:22;17169:58;:::i;:::-;17246:8;;17143:84;;-1:-1:-1;17328:2:139;17313:18;;;;17300:32;;16861:477;-1:-1:-1;;;;16861:477:139:o;17343:325::-;17431:6;17426:3;17419:19;17483:6;17476:5;17469:4;17464:3;17460:14;17447:43;;17535:1;17528:4;17519:6;17514:3;17510:16;17506:27;17499:38;17401:3;17657:4;-1:-1:-1;;17582:2:139;17574:6;17570:15;17566:88;17561:3;17557:98;17553:109;17546:116;;17343:325;;;;:::o;17673:393::-;17894:4;17886:6;17882:17;17871:9;17864:36;17936:2;17931;17920:9;17916:18;17909:30;17845:4;17956:61;18013:2;18002:9;17998:18;17990:6;17982;17956:61;:::i;:::-;17948:69;;18053:6;18048:2;18037:9;18033:18;18026:34;17673:393;;;;;;;:::o;18071:348::-;18155:6;18208:2;18196:9;18187:7;18183:23;18179:32;18176:52;;;18224:1;18221;18214:12;18176:52;18264:9;18251:23;18297:18;18289:6;18286:30;18283:50;;;18329:1;18326;18319:12;18283:50;18352:61;18405:7;18396:6;18385:9;18381:22;18352:61;:::i;18674:732::-;18777:6;18785;18793;18801;18809;18862:3;18850:9;18841:7;18837:23;18833:33;18830:53;;;18879:1;18876;18869:12;18830:53;18918:9;18905:23;18937:30;18961:5;18937:30;:::i;:::-;18986:5;-1:-1:-1;19038:2:139;19023:18;;19010:32;;-1:-1:-1;19089:2:139;19074:18;;19061:32;;-1:-1:-1;19145:2:139;19130:18;;19117:32;19158:33;19117:32;19158:33;:::i;:::-;19210:7;-1:-1:-1;19268:3:139;19253:19;;19240:33;19296:18;19285:30;;19282:50;;;19328:1;19325;19318:12;19282:50;19351:49;19392:7;19383:6;19372:9;19368:22;19351:49;:::i;:::-;19341:59;;;18674:732;;;;;;;;:::o;19411:280::-;19610:2;19599:9;19592:21;19573:4;19630:55;19681:2;19670:9;19666:18;19658:6;19630:55;:::i;19960:1157::-;20164:4;20193:2;20233;20222:9;20218:18;20263:2;20252:9;20245:21;20286:6;20321;20315:13;20352:6;20344;20337:22;20378:2;20368:12;;20411:2;20400:9;20396:18;20389:25;;20473:2;20463:6;20460:1;20456:14;20445:9;20441:30;20437:39;20511:2;20503:6;20499:15;20532:1;20542:546;20556:6;20553:1;20550:13;20542:546;;;20621:22;;;20645:66;20617:95;20605:108;;20736:13;;20781:9;;-1:-1:-1;;;;;20777:58:139;20762:74;;20875:11;;20869:18;20907:15;;;20900:27;;;20950:58;20992:15;;;20869:18;20950:58;:::i;:::-;21066:12;;;;20940:68;-1:-1:-1;;21031:15:139;;;;20578:1;20571:9;20542:546;;22014:832;22120:6;22128;22136;22144;22152;22205:3;22193:9;22184:7;22180:23;22176:33;22173:53;;;22222:1;22219;22212:12;22173:53;22262:9;22249:23;22291:18;22332:2;22324:6;22321:14;22318:34;;;22348:1;22345;22338:12;22318:34;22387:58;22437:7;22428:6;22417:9;22413:22;22387:58;:::i;:::-;22464:8;;-1:-1:-1;22361:84:139;-1:-1:-1;22552:2:139;22537:18;;22524:32;;-1:-1:-1;22568:16:139;;;22565:36;;;22597:1;22594;22587:12;22565:36;;22620:51;22663:7;22652:8;22641:9;22637:24;22620:51;:::i;:::-;22610:61;;;22718:2;22707:9;22703:18;22690:32;22680:42;;22772:2;22761:9;22757:18;22744:32;22785:31;22810:5;22785:31;:::i;:::-;22835:5;22825:15;;;22014:832;;;;;;;;:::o;22851:271::-;22934:6;22987:2;22975:9;22966:7;22962:23;22958:32;22955:52;;;23003:1;23000;22993:12;22955:52;23042:9;23029:23;23061:31;23086:5;23061:31;:::i;23127:313::-;23194:6;23202;23255:2;23243:9;23234:7;23230:23;23226:32;23223:52;;;23271:1;23268;23261:12;23223:52;23310:9;23297:23;23329:30;23353:5;23329:30;:::i;23739:579::-;23856:6;23864;23872;23925:2;23913:9;23904:7;23900:23;23896:32;23893:52;;;23941:1;23938;23931:12;23893:52;23980:9;23967:23;23999:29;24022:5;23999:29;:::i;:::-;24047:5;-1:-1:-1;24071:47:139;24114:2;24099:18;;24071:47;:::i;:::-;24061:57;;24169:2;24158:9;24154:18;24141:32;24196:18;24188:6;24185:30;24182:50;;;24228:1;24225;24218:12;24182:50;24251:61;24304:7;24295:6;24284:9;24280:22;24251:61;:::i;24323:146::-;24409:34;24402:5;24398:46;24391:5;24388:57;24378:85;;24459:1;24456;24449:12;24474:247;24533:6;24586:2;24574:9;24565:7;24561:23;24557:32;24554:52;;;24602:1;24599;24592:12;24554:52;24641:9;24628:23;24660:31;24685:5;24660:31;:::i;25050:717::-;25140:6;25148;25156;25164;25217:2;25205:9;25196:7;25192:23;25188:32;25185:52;;;25233:1;25230;25223:12;25185:52;25273:9;25260:23;25302:18;25343:2;25335:6;25332:14;25329:34;;;25359:1;25356;25349:12;25329:34;25398:58;25448:7;25439:6;25428:9;25424:22;25398:58;:::i;:::-;25475:8;;-1:-1:-1;25372:84:139;-1:-1:-1;25563:2:139;25548:18;;25535:32;;-1:-1:-1;25579:16:139;;;25576:36;;;25608:1;25605;25598:12;25576:36;;25647:60;25699:7;25688:8;25677:9;25673:24;25647:60;:::i;:::-;25050:717;;;;-1:-1:-1;25726:8:139;-1:-1:-1;;;;25050:717:139:o;26129:710::-;25955:12;;25969:10;25951:29;25939:42;;26030:4;26019:16;;;26013:23;25997:14;;;25990:47;26090:4;26079:16;;;26073:23;26098:18;26069:48;26053:14;;;26046:72;-1:-1:-1;;;;;26519:6:139;26515:55;26510:2;26499:9;26495:18;26488:83;26608:6;26602:3;26591:9;26587:19;26580:35;26652:3;26646;26635:9;26631:19;26624:32;26417:4;26679:45;26719:3;26708:9;26704:19;26696:6;26679:45;:::i;:::-;26773:9;26765:6;26761:22;26755:3;26744:9;26740:19;26733:51;26801:32;26826:6;26818;26801:32;:::i;27175:437::-;27254:1;27250:12;;;;27297;;;27318:61;;27372:4;27364:6;27360:17;27350:27;;27318:61;27425:2;27417:6;27414:14;27394:18;27391:38;27388:218;;27462:77;27459:1;27452:88;27563:4;27560:1;27553:15;27591:4;27588:1;27581:15;27388:218;;27175:437;;;:::o;27617:184::-;27669:77;27666:1;27659:88;27766:4;27763:1;27756:15;27790:4;27787:1;27780:15;27806:148;27894:4;27873:12;;;27887;;;27869:31;;27912:13;;27909:39;;;27928:18;;:::i;28372:151::-;28462:4;28455:12;;;28441;;;28437:31;;28480:14;;28477:40;;;28497:18;;:::i;28528:184::-;28580:77;28577:1;28570:88;28677:4;28674:1;28667:15;28701:4;28698:1;28691:15;28717:782;28993:4;-1:-1:-1;;;;;29103:2:139;29095:6;29091:15;29080:9;29073:34;29155:2;29147:6;29143:15;29138:2;29127:9;29123:18;29116:43;;29195:6;29190:2;29179:9;29175:18;29168:34;29250:6;29242;29238:19;29233:2;29222:9;29218:18;29211:47;29295:3;29289;29278:9;29274:19;29267:32;29322:62;29379:3;29368:9;29364:19;29356:6;29348;29322:62;:::i;:::-;29433:9;29425:6;29421:22;29415:3;29404:9;29400:19;29393:51;29461:32;29486:6;29478;29461:32;:::i;:::-;29453:40;28717:782;-1:-1:-1;;;;;;;;;;28717:782:139:o;29504:168::-;29577:9;;;29608;;29625:15;;;29619:22;;29605:37;29595:71;;29646:18;;:::i;29677:184::-;29747:6;29800:2;29788:9;29779:7;29775:23;29771:32;29768:52;;;29816:1;29813;29806:12;29768:52;-1:-1:-1;29839:16:139;;29677:184;-1:-1:-1;29677:184:139:o;29866:763::-;29966:10;29958:5;29952:12;29948:29;29943:3;29936:42;30027:4;30020:5;30016:16;30010:23;30003:4;29998:3;29994:14;29987:47;30083:4;30076:5;30072:16;30066:23;30059:4;30054:3;30050:14;30043:47;30139:4;30132:5;30128:16;30122:23;30115:4;30110:3;30106:14;30099:47;29918:3;30192:4;30185:5;30181:16;30175:23;30230:4;30223;30218:3;30214:14;30207:28;30256:46;30296:4;30291:3;30287:14;30273:12;30256:46;:::i;:::-;30244:58;;30350:4;30343:5;30339:16;30333:23;30398:3;30392:4;30388:14;30381:4;30376:3;30372:14;30365:38;30426;30459:4;30443:14;30426:38;:::i;:::-;30412:52;;;30512:4;30505:5;30501:16;30495:23;30562:3;30554:6;30550:16;30543:4;30538:3;30534:14;30527:40;30583;30616:6;30600:14;30583:40;:::i;30634:266::-;30819:2;30808:9;30801:21;30782:4;30839:55;30890:2;30879:9;30875:18;30867:6;30839:55;:::i;30905:184::-;30957:77;30954:1;30947:88;31054:4;31051:1;31044:15;31078:4;31075:1;31068:15;31094:120;31134:1;31160;31150:35;;31165:18;;:::i;:::-;-1:-1:-1;31199:9:139;;31094:120::o;31219:347::-;31426:2;31415:9;31408:21;31389:4;31446:55;31497:2;31486:9;31482:18;31474:6;31446:55;:::i;:::-;31438:63;;31551:6;31544:14;31537:22;31532:2;31521:9;31517:18;31510:50;31219:347;;;;;:::o;31571:478::-;31641:5;31689:4;31677:9;31672:3;31668:19;31664:30;31661:50;;;31707:1;31704;31697:12;31661:50;31740:4;31734:11;31784:4;31776:6;31772:17;31855:6;31843:10;31840:22;31819:18;31807:10;31804:34;31801:62;31798:88;;;31866:18;;:::i;:::-;31902:4;31895:24;31967:16;;31952:32;;32038:2;32023:18;;;32017:25;32000:15;;;31993:50;;;;-1:-1:-1;31937:6:139;31571:478;-1:-1:-1;31571:478:139:o;32054:259::-;32154:6;32207:2;32195:9;32186:7;32182:23;32178:32;32175:52;;;32223:1;32220;32213:12;32175:52;32246:61;32299:7;32288:9;32246:61;:::i;32318:593::-;32627:3;32616:9;32609:22;32590:4;32648:56;32699:3;32688:9;32684:19;32676:6;32648:56;:::i;:::-;32640:64;;32746:6;32740:13;32735:2;32724:9;32720:18;32713:41;32808:2;32800:6;32796:15;32790:22;32785:2;32774:9;32770:18;32763:50;-1:-1:-1;;;;;32853:6:139;32849:55;32844:2;32833:9;32829:18;32822:83;32318:593;;;;;;:::o;32916:175::-;32994:13;;33047:18;33036:30;;33026:41;;33016:69;;33081:1;33078;33071:12;33096:840;33238:6;33246;33290:9;33281:7;33277:23;33320:3;33316:2;33312:12;33309:32;;;33337:1;33334;33327:12;33309:32;33361:4;33357:2;33353:13;33350:33;;;33379:1;33376;33369:12;33350:33;;33412:2;33406:9;33454:4;33446:6;33442:17;33525:6;33513:10;33510:22;33489:18;33477:10;33474:34;33471:62;33468:88;;;33536:18;;:::i;:::-;33572:2;33565:22;33611:16;;33596:32;;33661:48;33705:2;33690:18;;33661:48;:::i;:::-;33656:2;33648:6;33644:15;33637:73;33743:70;33805:7;33800:2;33789:9;33785:18;33743:70;:::i;:::-;33738:2;33726:15;;33719:95;33730:6;-1:-1:-1;33858:72:139;33922:7;33915:4;33900:20;;33858:72;:::i;33941:125::-;34006:9;;;34027:10;;;34024:36;;;34040:18;;:::i;34071:359::-;34258:6;34253:3;34246:19;34228:3;34294:6;34288:13;34310:73;34376:6;34371:2;34366:3;34362:12;34357:2;34349:6;34345:15;34310:73;:::i;:::-;34403:16;;;;34421:2;34399:25;;34071:359;-1:-1:-1;;;34071:359:139:o;34435:735::-;34729:4;-1:-1:-1;;;;;34839:2:139;34831:6;34827:15;34816:9;34809:34;34879:6;34874:2;34863:9;34859:18;34852:34;34922:3;34917:2;34906:9;34902:18;34895:31;34949:45;34989:3;34978:9;34974:19;34966:6;34949:45;:::i;:::-;35030:15;;35025:2;35010:18;;35003:43;-1:-1:-1;35083:22:139;;;35077:3;35062:19;;;35055:51;-1:-1:-1;35115:17:139;;35161:2;35149:15;;34435:735;-1:-1:-1;;;34435:735:139:o;35175:128::-;35242:9;;;35263:11;;;35260:37;;;35277:18;;:::i;35625:138::-;35704:13;;35726:31;35704:13;35726:31;:::i;35768:413::-;35844:6;35852;35905:2;35893:9;35884:7;35880:23;35876:32;35873:52;;;35921:1;35918;35911:12;35873:52;35953:9;35947:16;35972:31;35997:5;35972:31;:::i;:::-;36072:2;36057:18;;36051:25;36022:5;;-1:-1:-1;36114:15:139;;36107:23;36095:36;;36085:64;;36145:1;36142;36135:12;36186:134;36263:13;;36285:29;36263:13;36285:29;:::i;36325:460::-;36408:6;36416;36424;36477:2;36465:9;36456:7;36452:23;36448:32;36445:52;;;36493:1;36490;36483:12;36445:52;36516:39;36545:9;36516:39;:::i;:::-;36506:49;;36598:2;36587:9;36583:18;36577:25;36611:29;36634:5;36611:29;:::i;:::-;36709:2;36694:18;;36688:25;36659:5;;-1:-1:-1;36722:31:139;36688:25;36722:31;:::i;37215:320::-;37290:5;37319:52;37335:35;37363:6;37335:35;:::i;37319:52::-;37310:61;;37394:6;37387:5;37380:21;37434:3;37425:6;37420:3;37416:16;37413:25;37410:45;;;37451:1;37448;37441:12;37410:45;37464:65;37522:6;37515:4;37508:5;37504:16;37499:3;37464:65;:::i;37540:235::-;37593:5;37646:3;37639:4;37631:6;37627:17;37623:27;37613:55;;37664:1;37661;37654:12;37613:55;37686:83;37765:3;37756:6;37750:13;37743:4;37735:6;37731:17;37686:83;:::i;37780:335::-;37859:6;37912:2;37900:9;37891:7;37887:23;37883:32;37880:52;;;37928:1;37925;37918:12;37880:52;37961:9;37955:16;37994:18;37986:6;37983:30;37980:50;;;38026:1;38023;38016:12;37980:50;38049:60;38101:7;38092:6;38081:9;38077:22;38049:60;:::i;38120:740::-;38185:5;38238:3;38231:4;38223:6;38219:17;38215:27;38205:55;;38256:1;38253;38246:12;38205:55;38285:6;38279:13;38311:4;38335:60;38351:43;38391:2;38351:43;:::i;38335:60::-;38417:3;38441:2;38436:3;38429:15;38469:4;38464:3;38460:14;38453:21;;38526:4;38520:2;38517:1;38513:10;38505:6;38501:23;38497:34;38483:48;;38554:3;38546:6;38543:15;38540:35;;;38571:1;38568;38561:12;38540:35;38607:4;38599:6;38595:17;38621:210;38637:6;38632:3;38629:15;38621:210;;;38710:3;38704:10;38727:31;38752:5;38727:31;:::i;:::-;38771:18;;38809:12;;;;38654;;38621:210;;38865:1116;38962:6;39015:2;39003:9;38994:7;38990:23;38986:32;38983:52;;;39031:1;39028;39021:12;38983:52;39064:9;39058:16;39093:18;39134:2;39126:6;39123:14;39120:34;;;39150:1;39147;39140:12;39120:34;39173:22;;;;39229:4;39211:16;;;39207:27;39204:47;;;39247:1;39244;39237:12;39204:47;39273:23;;:::i;:::-;39319:32;39348:2;39319:32;:::i;:::-;39312:5;39305:47;39384:40;39420:2;39416;39412:11;39384:40;:::i;:::-;39379:2;39372:5;39368:14;39361:64;39457:40;39493:2;39489;39485:11;39457:40;:::i;:::-;39452:2;39445:5;39441:14;39434:64;39530:40;39566:2;39562;39558:11;39530:40;:::i;:::-;39525:2;39518:5;39514:14;39507:64;39610:3;39606:2;39602:12;39596:19;39640:2;39630:8;39627:16;39624:36;;;39656:1;39653;39646:12;39624:36;39693:67;39752:7;39741:8;39737:2;39733:17;39693:67;:::i;:::-;39687:3;39680:5;39676:15;39669:92;;39800:3;39796:2;39792:12;39786:19;39830:2;39820:8;39817:16;39814:36;;;39846:1;39843;39836:12;39814:36;39883:67;39942:7;39931:8;39927:2;39923:17;39883:67;:::i;:::-;39877:3;39866:15;;39859:92;-1:-1:-1;39870:5:139;38865:1116;-1:-1:-1;;;;;38865:1116:139:o;39986:271::-;40169:6;40161;40156:3;40143:33;40125:3;40195:16;;40220:13;;;40195:16;39986:271;-1:-1:-1;39986:271:139:o;40262:378::-;40473:2;40462:9;40455:21;40436:4;40493:44;40533:2;40522:9;40518:18;40510:6;40493:44;:::i;:::-;40485:52;;40573:6;40568:2;40557:9;40553:18;40546:34;40628:4;40620:6;40616:17;40611:2;40600:9;40596:18;40589:45;40262:378;;;;;;:::o;40645:496::-;40886:10;40878:6;40874:23;40863:9;40856:42;-1:-1:-1;;;;;40938:6:139;40934:55;40929:2;40918:9;40914:18;40907:83;41026:3;41021:2;41010:9;41006:18;40999:31;40837:4;41047:45;41087:3;41076:9;41072:19;41064:6;41047:45;:::i;:::-;41039:53;;41128:6;41123:2;41112:9;41108:18;41101:34;40645:496;;;;;;;:::o;41335:1533::-;41539:4;41568:2;41608;41597:9;41593:18;41638:2;41627:9;41620:21;41661:6;41696;41690:13;41727:6;41719;41712:22;41753:2;41743:12;;41786:2;41775:9;41771:18;41764:25;;41848:2;41838:6;41835:1;41831:14;41820:9;41816:30;41812:39;41886:2;41878:6;41874:15;41907:1;41917:922;41931:6;41928:1;41925:13;41917:922;;;42020:66;42008:9;42000:6;41996:22;41992:95;41987:3;41980:108;42117:6;42111:13;42147:4;42194:10;42189:2;42183:9;42179:26;42171:6;42164:42;-1:-1:-1;;;;;42261:2:139;42257;42253:11;42247:18;42243:67;42238:2;42230:6;42226:15;42219:92;42358:2;42354;42350:11;42344:18;42399:2;42394;42386:6;42382:15;42375:27;42429:47;42472:2;42464:6;42460:15;42446:12;42429:47;:::i;:::-;42415:61;;;42499:4;42554:2;42550;42546:11;42540:18;42535:2;42527:6;42523:15;42516:43;;42582:4;42635:2;42631;42627:11;42621:18;42599:40;;42688:6;42680;42676:19;42671:2;42663:6;42659:15;42652:44;;42719:40;42752:6;42736:14;42719:40;:::i;:::-;42817:12;;;;42709:50;-1:-1:-1;;;42782:15:139;;;;41953:1;41946:9;41917:922;;42873:288;43048:2;43037:9;43030:21;43011:4;43068:44;43108:2;43097:9;43093:18;43085:6;43068:44;:::i;:::-;43060:52;;43148:6;43143:2;43132:9;43128:18;43121:34;42873:288;;;;;:::o;43591:1121::-;43692:6;43745:2;43733:9;43724:7;43720:23;43716:32;43713:52;;;43761:1;43758;43751:12;43713:52;43794:9;43788:16;43823:18;43864:2;43856:6;43853:14;43850:34;;;43880:1;43877;43870:12;43850:34;43903:22;;;;43959:4;43941:16;;;43937:27;43934:47;;;43977:1;43974;43967:12;43934:47;44003:23;;:::i;:::-;44049:33;44079:2;44049:33;:::i;44717:359::-;44920:2;44909:9;44902:21;44883:4;44940:44;44980:2;44969:9;44965:18;44957:6;44940:44;:::i;:::-;45015:2;45000:18;;44993:34;;;;-1:-1:-1;45058:2:139;45043:18;45036:34;44932:52;44717:359;-1:-1:-1;44717:359:139:o;45081:244::-;45238:2;45227:9;45220:21;45201:4;45258:61;45315:2;45304:9;45300:18;45292:6;45284;45258:61;:::i;45608:280::-;45707:6;45760:2;45748:9;45739:7;45735:23;45731:32;45728:52;;;45776:1;45773;45766:12;45728:52;45808:9;45802:16;45827:31;45852:5;45827:31;:::i;45893:249::-;45962:6;46015:2;46003:9;45994:7;45990:23;45986:32;45983:52;;;46031:1;46028;46021:12;45983:52;46063:9;46057:16;46082:30;46106:5;46082:30;:::i;46771:196::-;46810:3;46838:5;46828:39;;46847:18;;:::i;:::-;-1:-1:-1;;;46883:78:139;;46771:196::o;46972:377::-;47165:2;47154:9;47147:21;47128:4;47191:44;47231:2;47220:9;47216:18;47208:6;47191:44;:::i;:::-;47283:9;47275:6;47271:22;47266:2;47255:9;47251:18;47244:50;47311:32;47336:6;47328;47311:32;:::i;47913:537::-;48152:2;48141:9;48134:21;48115:4;48178:44;48218:2;48207:9;48203:18;48195:6;48178:44;:::i;:::-;48270:9;48262:6;48258:22;48253:2;48242:9;48238:18;48231:50;48304:32;48329:6;48321;48304:32;:::i;:::-;48290:46;;48384:9;48376:6;48372:22;48367:2;48356:9;48352:18;48345:50;48412:32;48437:6;48429;48412:32;:::i;48455:570::-;48704:3;48693:9;48686:22;48667:4;48731:45;48771:3;48760:9;48756:19;48748:6;48731:45;:::i;:::-;48824:9;48816:6;48812:22;48807:2;48796:9;48792:18;48785:50;48852:32;48877:6;48869;48852:32;:::i;:::-;48844:40;;;48920:6;48915:2;48904:9;48900:18;48893:34;-1:-1:-1;;;;;48967:6:139;48963:55;48958:2;48947:9;48943:18;48936:83;48455:570;;;;;;;:::o;49373:786::-;49698:10;49690:6;49686:23;49675:9;49668:42;49649:4;-1:-1:-1;;;;;49819:2:139;49811:6;49807:15;49802:2;49791:9;49787:18;49780:43;49859:3;49854:2;49843:9;49839:18;49832:31;49886:45;49926:3;49915:9;49911:19;49903:6;49886:45;:::i;:::-;49967:6;49962:2;49951:9;49947:18;49940:34;50023:2;50015:6;50011:15;50005:3;49994:9;49990:19;49983:44;50076:9;50068:6;50064:22;50058:3;50047:9;50043:19;50036:51;50104:49;50146:6;50138;50130;50104:49;:::i;:::-;50096:57;49373:786;-1:-1:-1;;;;;;;;;;;49373:786:139:o;51647:184::-;51699:77;51696:1;51689:88;51796:4;51793:1;51786:15;51820:4;51817:1;51810:15;52327:850;52659:4;-1:-1:-1;;;;;52769:2:139;52761:6;52757:15;52746:9;52739:34;52821:2;52813:6;52809:15;52804:2;52793:9;52789:18;52782:43;52861:3;52856:2;52845:9;52841:18;52834:31;52888:57;52940:3;52929:9;52925:19;52917:6;52888:57;:::i;:::-;52993:2;52985:6;52981:15;52976:2;52965:9;52961:18;52954:43;53046:2;53038:6;53034:15;53028:3;53017:9;53013:19;53006:44;53099:9;53091:6;53087:22;53081:3;53070:9;53066:19;53059:51;53127:44;53164:6;53156;53127:44;:::i;53319:1408::-;53777:10;53769:6;53765:23;53754:9;53747:42;53728:4;53808:2;53858:4;53850:6;53846:17;53841:2;53830:9;53826:18;53819:45;53900:3;53895:2;53884:9;53880:18;53873:31;53927:57;53979:3;53968:9;53964:19;53956:6;53927:57;:::i;:::-;-1:-1:-1;;;;;54081:15:139;;;54076:2;54061:18;;54054:43;54134:22;;;54128:3;54113:19;;54106:51;54206:13;;54228:22;;;-1:-1:-1;54290:17:139;;;54278:2;54330:16;;;;54266:15;;54206:13;54374:177;54388:6;54385:1;54382:13;54374:177;;;54453:13;;54449:22;;54437:35;;54539:1;54527:14;;;;54492:12;;;;54403:9;54374:177;;;-1:-1:-1;;25848:18:139;25837:30;;54601:3;54586:19;;25825:43;54652:9;54647:3;54643:19;54637:3;54626:9;54622:19;54615:48;54680:41;54717:3;54709:6;54680:41;:::i;:::-;54672:49;53319:1408;-1:-1:-1;;;;;;;;;;;;;53319:1408:139:o;55934:2095::-;56160:4;56189:2;56229;56218:9;56214:18;56259:2;56248:9;56241:21;56282:6;56317;56311:13;56348:6;56340;56333:22;56374:2;56364:12;;56407:2;56396:9;56392:18;56385:25;;56469:2;56459:6;56456:1;56452:14;56441:9;56437:30;56433:39;56507:2;56499:6;56495:15;56528:1;56538:1462;56552:6;56549:1;56546:13;56538:1462;;;56611:66;56706:22;;;56702:31;;56690:44;;56757:13;;56802:9;;56813:10;56798:26;56783:42;;56864:11;;56858:18;56896:15;;;56889:27;;;56957:19;;56978:18;56953:44;56936:15;;;56929:69;57039:21;;;57033:28;57109:4;57150:23;;;57084:2;57133:15;;;57126:48;;;;57215:21;;;57209:28;57300:23;;57260:3;57283:15;;;57276:48;;;;57365:21;;;57359:28;57450:23;;;57410:3;57433:15;;;57426:48;;;;57515:21;;;57509:28;57560:4;57584:15;;;57577:27;57509:28;57631:73;57699:3;57687:16;;57509:28;57631:73;:::i;:::-;57745:21;;57739:28;57809:19;;;57805:28;;57799:3;57787:16;;57780:54;57739:28;57617:87;-1:-1:-1;57857:63:139;57617:87;57739:28;57857:63;:::i;:::-;57978:12;;;;57847:73;-1:-1:-1;;;57943:15:139;;;;-1:-1:-1;56574:1:139;56567:9;56538:1462;;58034:1049;58299:2;58351:21;;;58421:13;;58324:18;;;58443:22;;;58270:4;;58299:2;58484;;58502:18;;;;58543:15;;;58270:4;58586:471;58600:6;58597:1;58594:13;58586:471;;;58659:13;;58734:9;;58695:10;58730:18;;;58718:31;;58788:11;;;58782:18;58838:19;;58834:28;;;58820:12;;;58813:50;58907:21;;58901:28;-1:-1:-1;;;;;58897:77:139;58883:12;;;58876:99;59004:4;58995:14;;;;59032:15;;;;58622:1;58615:9;58586:471;;;-1:-1:-1;59074:3:139;;58034:1049;-1:-1:-1;;;;;;;58034:1049:139:o;59088:251::-;59158:6;59211:2;59199:9;59190:7;59186:23;59182:32;59179:52;;;59227:1;59224;59217:12;59179:52;59259:9;59253:16;59278:31;59303:5;59278:31;:::i;59344:274::-;59416:34;59482:10;;;59494;;;59478:27;59525:20;;;;59416:34;59564:24;;;59554:58;;59592:18;;:::i;:::-;59554:58;;59344:274;;;;:::o;59623:1093::-;59852:2;59904:21;;;59974:13;;59877:18;;;59996:22;;;59823:4;;59852:2;60037;;60055:18;;;;60096:15;;;59823:4;60139:551;60153:6;60150:1;60147:13;60139:551;;;60212:13;;60287:9;;60248:10;60283:18;;;60271:31;;60341:11;;;60335:18;60391:19;;60412:34;60387:60;60373:12;;;60366:82;60492:21;;;60486:28;60516:18;60482:53;60468:12;;;60461:75;60580:21;;60574:28;60570:37;60565:2;60556:12;;60549:59;60637:4;60628:14;;;;60665:15;;;;60175:1;60168:9;60139:551;;60721:2127;60955:4;60984:2;61024;61013:9;61009:18;61054:2;61043:9;61036:21;61077:6;61112;61106:13;61143:6;61135;61128:22;61169:2;61159:12;;61202:2;61191:9;61187:18;61180:25;;61264:2;61254:6;61251:1;61247:14;61236:9;61232:30;61228:39;61302:2;61294:6;61290:15;61323:1;61333:1486;61347:6;61344:1;61341:13;61333:1486;;;61406:66;61501:22;;;61497:31;;61485:44;;61552:13;;61597:9;;61608:10;61593:26;61578:42;;61659:11;;61653:18;61691:15;;;61684:27;;;61752:19;;-1:-1:-1;;;;;61748:68:139;61731:15;;;61724:93;61858:21;;;61852:28;61928:4;61969:23;;;61903:2;61952:15;;;61945:48;;;;62034:21;;;62028:28;62119:23;;62079:3;62102:15;;;62095:48;;;;62184:21;;;62178:28;62269:23;;;62229:3;62252:15;;;62245:48;;;;62334:21;;;62328:28;62379:4;62403:15;;;62396:27;62328:28;62450:73;62518:3;62506:16;;62328:28;62450:73;:::i;:::-;62564:21;;62558:28;62628:19;;;62624:28;;62618:3;62606:16;;62599:54;62558:28;62436:87;-1:-1:-1;62676:63:139;62436:87;62558:28;62676:63;:::i;:::-;62797:12;;;;62666:73;-1:-1:-1;;;62762:15:139;;;;-1:-1:-1;61369:1:139;61362:9;61333:1486;;62853:1355;63088:2;63140:21;;;63210:13;;63113:18;;;63232:22;;;63059:4;;63088:2;63273;;63291:18;;;;63332:15;;;63059:4;63375:807;63389:6;63386:1;63383:13;63375:807;;;63448:13;;63490:9;;63501:10;63486:26;63474:39;;63552:11;;;63546:18;63587;63639:21;;;63625:12;;;63618:43;63705:11;;;63699:18;63695:27;63681:12;;;63674:49;63746:4;63794:11;;;63788:18;63808:6;63784:31;63770:12;;;63763:53;63839:4;63884:11;;;63878:18;63919:34;63987:23;;;63973:12;;;63966:45;;;;64034:4;64082:11;;;64076:18;64072:27;64058:12;;;64051:49;64129:4;64120:14;;;;64157:15;;;;63411:1;63404:9;63375:807;;64213:1033;64448:2;64500:21;;;64570:13;;64473:18;;;64592:22;;;64419:4;;64448:2;64633;;64651:18;;;;64692:15;;;64419:4;64735:485;64749:6;64746:1;64743:13;64735:485;;;64808:13;;64850:9;;64861:10;64846:26;64834:39;;64917:11;;;64911:18;64931;64907:43;64893:12;;;64886:65;64995:11;;;64989:18;65009:6;64985:31;64971:12;;;64964:53;65040:4;65088:11;;;65082:18;65102:34;65078:59;65064:12;;;65057:81;65167:4;65158:14;;;;65195:15;;;;64771:1;64764:9;64735:485;;65251:843;65510:2;65562:21;;;65632:13;;65535:18;;;65654:22;;;65481:4;;65510:2;65695;;65713:18;;;;65754:15;;;65481:4;65797:271;65811:6;65808:1;65805:13;65797:271;;;65870:13;;65912:9;;65923:10;65908:26;65896:39;;65975:11;;65969:18;65955:12;;;65948:40;66008:12;;;;66043:15;;;;65833:1;65826:9;65797:271;;67891:737;25955:12;;25969:10;25951:29;25939:42;;26030:4;26019:16;;;26013:23;25997:14;;;25990:47;26090:4;26079:16;;;26073:23;26098:18;26069:48;26053:14;;;26046:72;-1:-1:-1;;;;;68291:6:139;68287:55;68282:2;68271:9;68267:18;68260:83;68380:6;68374:3;68363:9;68359:19;68352:35;68424:3;68418;68407:9;68403:19;68396:32;68189:4;68451:62;68508:3;68497:9;68493:19;68485:6;68477;68451:62;:::i;:::-;68562:9;68554:6;68550:22;68544:3;68533:9;68529:19;68522:51;68590:32;68615:6;68607;68590:32;:::i;:::-;68582:40;67891:737;-1:-1:-1;;;;;;;;;67891:737:139:o;68633:517::-;68734:2;68729:3;68726:11;68723:421;;;68770:5;68767:1;68760:16;68814:4;68811:1;68801:18;68884:2;68872:10;68868:19;68865:1;68861:27;68855:4;68851:38;68920:4;68908:10;68905:20;68902:47;;;-1:-1:-1;68943:4:139;68902:47;68998:2;68993:3;68989:12;68986:1;68982:20;68976:4;68972:31;68962:41;;69053:81;69071:2;69064:5;69061:13;69053:81;;;69130:1;69116:16;;69097:1;69086:13;69053:81;;;69057:3;;68633:517;;;:::o;69386:1325::-;69508:18;69503:3;69500:27;69497:53;;;69530:18;;:::i;:::-;69559:93;69648:3;69608:38;69640:4;69634:11;69608:38;:::i;:::-;69602:4;69559:93;:::i;:::-;69678:1;69703:2;69698:3;69695:11;69720:1;69715:738;;;;70497:1;70514:3;70511:93;;;-1:-1:-1;70570:19:139;;;70557:33;70511:93;-1:-1:-1;;69283:1:139;69279:11;;;69275:84;69271:89;69261:100;69367:1;69363:11;;;69258:117;70617:78;;69688:1017;;69715:738;53266:1;53259:14;;;53303:4;53290:18;;-1:-1:-1;;69751:76:139;;;69936:229;69950:7;69947:1;69944:14;69936:229;;;70039:19;;;70026:33;70011:49;;70146:4;70131:20;;;;70099:1;70087:14;;;;69966:12;69936:229;;;69940:3;70193;70184:7;70181:16;70178:219;;;-1:-1:-1;;70307:3:139;70301;70298:1;70294:11;70290:21;70286:94;70282:99;70269:9;70264:3;70260:19;70247:33;70243:139;70235:6;70228:155;70178:219;;;70440:1;70434:3;70431:1;70427:11;70423:19;70417:4;70410:33;69688:1017;;69386:1325;;;:::o;70716:331::-;70821:9;70832;70874:8;70862:10;70859:24;70856:44;;;70896:1;70893;70886:12;70856:44;70925:6;70915:8;70912:20;70909:40;;;70945:1;70942;70935:12;70909:40;-1:-1:-1;;70971:23:139;;;71016:25;;;;;-1:-1:-1;70716:331:139:o;71052:369::-;71210:66;71172:19;;71294:11;;;;71325:1;71317:10;;71314:101;;;71386:1;71382:11;;;;71379:1;71375:19;71371:28;;;71363:37;71359:46;;;;71052:369;-1:-1:-1;;71052:369:139:o;71833:517::-;71920:6;71928;71936;71989:2;71977:9;71968:7;71964:23;71960:32;71957:52;;;72005:1;72002;71995:12;71957:52;72037:9;72031:16;72056:31;72081:5;72056:31;:::i;:::-;72156:2;72141:18;;72135:25;72106:5;;-1:-1:-1;72169:32:139;72135:25;72169:32;:::i;:::-;72272:2;72257:18;;72251:25;72220:7;;-1:-1:-1;72285:33:139;72251:25;72285:33;:::i;72355:315::-;72475:19;;72514:2;72506:11;;72503:161;;;-1:-1:-1;;72575:2:139;72571:12;;;72568:1;72564:20;72560:93;72549:105;72355:315;;;;:::o;72675:369::-;72833:66;72795:19;;72917:11;;;;72948:1;72940:10;;72937:101;;;73009:1;73005:11;;;;73002:1;72998:19;72994:28;;;72986:37;72982:46;;;;72675:369;-1:-1:-1;;72675:369:139:o;73210:720::-;73569:3;73558:9;73551:22;73532:4;73596:50;73641:3;73630:9;73626:19;73126:1;73114:14;;73160:10;73153:4;73144:14;;73137:34;73196:2;73187:12;;73049:156;73596:50;73694:9;73686:6;73682:22;73677:2;73666:9;73662:18;73655:50;73722:37;73752:6;73126:1;73114:14;;73160:10;73153:4;73144:14;;73137:34;73196:2;73187:12;;73049:156;73722:37;73714:45;;;-1:-1:-1;;;;;73868:2:139;73860:6;73856:15;73851:2;73840:9;73836:18;73829:43;73920:2;73912:6;73908:15;73903:2;73892:9;73888:18;73881:43;;73210:720;;;;;:::o;74096:::-;74455:3;74444:9;74437:22;74418:4;74482:50;74527:3;74516:9;74512:19;74012:1;74000:14;;74046:10;74039:4;74030:14;;74023:34;74082:2;74073:12;;73935:156;74482:50;74580:9;74572:6;74568:22;74563:2;74552:9;74548:18;74541:50;74608:37;74638:6;74012:1;74000:14;;74046:10;74039:4;74030:14;;74023:34;74082:2;74073:12;;73935:156;74982:720;75341:3;75330:9;75323:22;75304:4;75368:50;75413:3;75402:9;75398:19;74898:1;74886:14;;74932:10;74925:4;74916:14;;74909:34;74968:2;74959:12;;74821:156;75368:50;75466:9;75458:6;75454:22;75449:2;75438:9;75434:18;75427:50;75494:37;75524:6;74898:1;74886:14;;74932:10;74925:4;74916:14;;74909:34;74968:2;74959:12;;74821:156;75868:617;76199:2;76188:9;76181:21;76162:4;76225:49;76270:2;76259:9;76255:18;75784:1;75772:14;;75818:10;75811:4;75802:14;;75795:34;75854:2;75845:12;;75707:156;76225:49;76322:9;76314:6;76310:22;76305:2;76294:9;76290:18;76283:50;76350:37;76380:6;75784:1;75772:14;;75818:10;75811:4;75802:14;;75795:34;75854:2;75845:12;;75707:156;76350:37;76342:45;;;-1:-1:-1;;;;;76427:6:139;76423:55;76418:2;76407:9;76403:18;76396:83;75868:617;;;;:::o;77063:720::-;77422:3;77411:9;77404:22;77385:4;77449:50;77494:3;77483:9;77479:19;76979:1;76967:14;;77013:10;77006:4;76997:14;;76990:34;77049:2;77040:12;;76902:156;77449:50;77547:9;77539:6;77535:22;77530:2;77519:9;77515:18;77508:50;77575:37;77605:6;76979:1;76967:14;;77013:10;77006:4;76997:14;;76990:34;77049:2;77040:12;;76902:156;77949:720;78308:3;78297:9;78290:22;78271:4;78335:50;78380:3;78369:9;78365:19;77865:1;77853:14;;77899:10;77892:4;77883:14;;77876:34;77935:2;77926:12;;77788:156;78335:50;78433:9;78425:6;78421:22;78416:2;78405:9;78401:18;78394:50;78461:37;78491:6;77865:1;77853:14;;77899:10;77892:4;77883:14;;77876:34;77935:2;77926:12;;77788:156;82391:1224;82609:4;82638:2;82678;82667:9;82663:18;82708:2;82697:9;82690:21;82731:6;82766;82760:13;82797:6;82789;82782:22;82823:2;82813:12;;82856:2;82845:9;82841:18;82834:25;;82918:2;82908:6;82905:1;82901:14;82890:9;82886:30;82882:39;82956:2;82948:6;82944:15;82977:1;82987:599;83001:6;82998:1;82995:13;82987:599;;;83066:22;;;83090:66;83062:95;83050:108;;83181:13;;83253:9;;83264:10;83249:26;83234:42;;83323:11;;;83317:18;83337:6;83313:31;83296:15;;;83289:56;83384:11;;83378:18;83217:4;83416:15;;;83409:27;;;83459:47;83490:15;;;83378:18;83459:47;:::i;:::-;83564:12;;;;83449:57;-1:-1:-1;;;83529:15:139;;;;83023:1;83016:9;82987:599;;83620:287;83749:3;83787:6;83781:13;83803:66;83862:6;83857:3;83850:4;83842:6;83838:17;83803:66;:::i;:::-;83885:16;;;;;83620:287;-1:-1:-1;;83620:287:139:o;83912:492::-;84087:3;84125:6;84119:13;84141:66;84200:6;84195:3;84188:4;84180:6;84176:17;84141:66;:::i;:::-;84270:13;;84229:16;;;;84292:70;84270:13;84229:16;84339:4;84327:17;;84292:70;:::i;:::-;84378:20;;83912:492;-1:-1:-1;;;;83912:492:139:o;84819:517::-;84906:6;84914;84922;84975:2;84963:9;84954:7;84950:23;84946:32;84943:52;;;84991:1;84988;84981:12;84943:52;85023:9;85017:16;85042:30;85066:5;85042:30;:::i;:::-;85141:2;85126:18;;85120:25;85091:5;;-1:-1:-1;85154:33:139;85120:25;85154:33;:::i;85341:241::-;85380:7;85459:1;85455:2;85444:17;85440:1;85436:2;85425:17;85421:41;85497:11;85493:2;85482:27;85471:38;;85540:11;85531:7;85528:24;85518:58;;85556:18;;:::i;86501:652::-;86762:66;86753:6;86748:3;86744:16;86740:89;86735:3;86728:102;86881:66;86872:6;86867:3;86863:16;86859:89;86855:1;86850:3;86846:11;86839:110;86979:6;86974:2;86969:3;86965:12;86958:28;86710:3;87015:6;87009:13;87031:75;87099:6;87094:2;87089:3;87085:12;87078:4;87070:6;87066:17;87031:75;:::i;:::-;87126:16;;;;87144:2;87122:25;;86501:652;-1:-1:-1;;;;;86501:652:139:o;87158:361::-;87363:6;87352:9;87345:25;87406:6;87401:2;87390:9;87386:18;87379:34;87449:2;87444;87433:9;87429:18;87422:30;87326:4;87469:44;87509:2;87498:9;87494:18;87486:6;87469:44;:::i;88170:369::-;88256:6;88264;88272;88325:2;88313:9;88304:7;88300:23;88296:32;88293:52;;;88341:1;88338;88331:12;88293:52;88373:9;88367:16;88392:29;88415:5;88392:29;:::i;:::-;88485:2;88470:18;;88464:25;88529:2;88514:18;;;88508:25;88440:5;;88464:25;;-1:-1:-1;88508:25:139;88170:369;-1:-1:-1;;;88170:369:139:o;89351:312::-;89430:6;89438;89491:2;89479:9;89470:7;89466:23;89462:32;89459:52;;;89507:1;89504;89497:12;89459:52;89539:9;89533:16;89558:31;89583:5;89558:31;:::i;:::-;89653:2;89638:18;;;;89632:25;89608:5;;89632:25;;-1:-1:-1;;;89351:312:139:o;90078:385::-;90157:6;90165;90218:2;90206:9;90197:7;90193:23;90189:32;90186:52;;;90234:1;90231;90224:12;90186:52;90266:9;90260:16;90285:31;90310:5;90285:31;:::i;:::-;90385:2;90370:18;;90364:25;90335:5;;-1:-1:-1;90398:33:139;90364:25;90398:33;:::i;90468:558::-;90565:6;90573;90626:2;90614:9;90605:7;90601:23;90597:32;90594:52;;;90642:1;90639;90632:12;90594:52;90675:9;90669:16;90704:18;90745:2;90737:6;90734:14;90731:34;;;90761:1;90758;90751:12;90731:34;90784:60;90836:7;90827:6;90816:9;90812:22;90784:60;:::i;:::-;90774:70;;90890:2;90879:9;90875:18;90869:25;90853:41;;90919:2;90909:8;90906:16;90903:36;;;90935:1;90932;90925:12;90903:36;;90958:62;91012:7;91001:8;90990:9;90986:24;90958:62;:::i;:::-;90948:72;;;90468:558;;;;;:::o;91324:520::-;91419:6;91427;91435;91488:2;91476:9;91467:7;91463:23;91459:32;91456:52;;;91504:1;91501;91494:12;91456:52;91536:9;91530:16;91555:29;91578:5;91555:29;:::i;:::-;91652:2;91637:18;;91631:25;91603:5;;-1:-1:-1;91679:18:139;91668:30;;91665:50;;;91711:1;91708;91701:12;91665:50;91734:60;91786:7;91777:6;91766:9;91762:22;91734:60;:::i;:::-;91724:70;;;91834:2;91823:9;91819:18;91813:25;91803:35;;91324:520;;;;;:::o;91849:197::-;91917:34;91971:10;;;91983;;;91967:27;;92006:11;;;92003:37;;;92020:18;;:::i;93281:172::-;93348:10;93378;;;93390;;;93374:27;;93413:11;;;93410:37;;;93427:18;;:::i;93979:369::-;94137:66;94099:19;;94221:11;;;;94252:1;94244:10;;94241:101;;;94313:1;94309:11;;;;94306:1;94302:19;94298:28;;;94290:37;94286:46;;;;93979:369;-1:-1:-1;;93979:369:139:o;94353:372::-;94512:66;94474:19;;94596:11;;;;94627:2;94619:11;;94616:103;;;94689:2;94685:12;;;;94682:1;94678:20;94674:29;;;94666:38;94662:47;;;;94353:372;-1:-1:-1;;94353:372:139:o;94730:112::-;94762:1;94788;94778:35;;94793:18;;:::i;:::-;-1:-1:-1;94827:9:139;;94730:112::o;95466:168::-;95533:6;95559:10;;;95571;;;95555:27;;95594:11;;;95591:37;;;95608:18;;:::i;95639:894::-;95888:3;95926:6;95920:13;95942:66;96001:6;95996:3;95989:4;95981:6;95977:17;95942:66;:::i;:::-;96039:6;96034:3;96030:16;96017:29;;96065:66;96176:2;96167:6;96162:3;96158:16;96154:25;96147:5;96140:40;96233:66;96224:6;96219:3;96215:16;96211:89;96207:1;96200:5;96196:13;96189:112;96354:2;96345:6;96340:3;96336:16;96332:25;96328:1;96321:5;96317:13;96310:48;;96389:6;96383:13;96405:78;96474:8;96470:1;96463:5;96459:13;96452:4;96444:6;96440:17;96405:78;:::i;:::-;96503:20;96525:1;96499:28;;95639:894;-1:-1:-1;;;;;;;95639:894:139:o;97224:383::-;97381:3;97419:6;97413:13;97435:66;97494:6;97489:3;97482:4;97474:6;97470:17;97435:66;:::i;:::-;97523:16;;;;97548:21;;;-1:-1:-1;97596:4:139;97585:16;;97224:383;-1:-1:-1;97224:383:139:o;97612:476::-;97701:1;97738:5;97701:1;97752:330;97773:7;97763:8;97760:21;97752:330;;;97892:4;-1:-1:-1;;97820:77:139;97814:4;97811:87;97808:113;;;97901:18;;:::i;:::-;97951:7;97941:8;97937:22;97934:55;;;97971:16;;;;97934:55;98050:22;;;;98010:15;;;;97752:330;;;97756:3;97612:476;;;;;:::o;98093:866::-;98142:5;98172:8;98162:80;;-1:-1:-1;98213:1:139;98227:5;;98162:80;98261:4;98251:76;;-1:-1:-1;98298:1:139;98312:5;;98251:76;98343:4;98361:1;98356:59;;;;98429:1;98424:130;;;;98336:218;;98356:59;98386:1;98377:10;;98400:5;;;98424:130;98461:3;98451:8;98448:17;98445:43;;;98468:18;;:::i;:::-;-1:-1:-1;;98524:1:139;98510:16;;98539:5;;98336:218;;98638:2;98628:8;98625:16;98619:3;98613:4;98610:13;98606:36;98600:2;98590:8;98587:16;98582:2;98576:4;98573:12;98569:35;98566:77;98563:159;;;-1:-1:-1;98675:19:139;;;98707:5;;98563:159;98754:34;98779:8;98773:4;98754:34;:::i;:::-;98884:6;-1:-1:-1;;98812:79:139;98803:7;98800:92;98797:118;;;98895:18;;:::i;:::-;98933:20;;98093:866;-1:-1:-1;;;98093:866:139:o;98964:131::-;99024:5;99053:36;99080:8;99074:4;99053:36;:::i;99100:458::-;99180:6;99233:2;99221:9;99212:7;99208:23;99204:32;99201:52;;;99249:1;99246;99239:12;99201:52;99282:9;99276:16;99315:18;99307:6;99304:30;99301:50;;;99347:1;99344;99337:12;99301:50;99370:22;;99423:4;99415:13;;99411:27;-1:-1:-1;99401:55:139;;99452:1;99449;99442:12;99401:55;99475:77;99544:7;99539:2;99533:9;99528:2;99524;99520:11;99475:77;:::i;99563:570::-;99825:34;99820:3;99813:47;99890:34;99885:2;99880:3;99876:12;99869:56;99955:12;99950:2;99945:3;99941:12;99934:34;99795:3;99997:6;99991:13;100013:73;100079:6;100074:2;100069:3;100065:12;100060:2;100052:6;100048:15;100013:73;:::i;:::-;100106:16;;;;100124:2;100102:25;;99563:570;-1:-1:-1;;99563:570:139:o;101155:430::-;101352:66;101344:6;101340:79;101335:3;101328:92;101310:3;101449:6;101443:13;101465:74;101532:6;101528:1;101523:3;101519:11;101512:4;101504:6;101500:17;101465:74;:::i;:::-;101559:16;;;;101577:1;101555:24;;101155:430;-1:-1:-1;;;101155:430:139:o;101590:665::-;101655:5;101708:3;101701:4;101693:6;101689:17;101685:27;101675:55;;101726:1;101723;101716:12;101675:55;101755:6;101749:13;101781:4;101805:60;101821:43;101861:2;101821:43;:::i;101805:60::-;101887:3;101911:2;101906:3;101899:15;101939:4;101934:3;101930:14;101923:21;;101996:4;101990:2;101987:1;101983:10;101975:6;101971:23;101967:34;101953:48;;102024:3;102016:6;102013:15;102010:35;;;102041:1;102038;102031:12;102010:35;102077:4;102069:6;102065:17;102091:135;102107:6;102102:3;102099:15;102091:135;;;102173:10;;102161:23;;102204:12;;;;102124;;102091:135;;102260:614;102389:6;102397;102450:2;102438:9;102429:7;102425:23;102421:32;102418:52;;;102466:1;102463;102456:12;102418:52;102499:9;102493:16;102528:18;102569:2;102561:6;102558:14;102555:34;;;102585:1;102582;102575:12;102555:34;102608:72;102672:7;102663:6;102652:9;102648:22;102608:72;:::i;:::-;102598:82;;102726:2;102715:9;102711:18;102705:25;102689:41;;102755:2;102745:8;102742:16;102739:36;;;102771:1;102768;102761:12;102739:36;;102794:74;102860:7;102849:8;102838:9;102834:24;102794:74;:::i",
+ "linkReferences": {}
+ },
+ "methodIdentifiers": {
+ "ARB_EID()": "5e42c9b2",
+ "BAD_EID()": "0fcaecfe",
+ "DEFAULT_CHANNEL_ID()": "51aa318b",
+ "ETH_EID()": "25996dae",
+ "EVM_COMPUTE_MAP_BPS()": "0afba868",
+ "EVM_COMPUTE_REDUCE_FEE_USD()": "82411c77",
+ "EVM_REQUEST_FEE_USD()": "1766f5a4",
+ "INITIAL_BALANCE()": "14525bce",
+ "IS_TEST()": "fa7626d4",
+ "MAP_REDUCE_COMPUTE_TYPES()": "b76bada5",
+ "NATIVE_TOKEN_PRICE_USD()": "699cbade",
+ "OPTIONS_LZRECEIVE_100k()": "178928d3",
+ "POL_EID()": "1f3280c5",
+ "TOKENS_TO_SEND()": "8c5e9f74",
+ "TREASURY_GAS_CAP()": "baead19c",
+ "TREASURY_GAS_FOR_FEE_CAP()": "b1dcf5c8",
+ "VaultComposerSyncArb()": "90a606f5",
+ "arbEndpoint()": "09c885c9",
+ "arbExecutor()": "677d4175",
+ "assertGuid(bytes,bytes32)": "997cff1b",
+ "assetOFT_arb()": "0c003ff7",
+ "assetOFT_eth()": "536e8d3a",
+ "assetOFT_pol()": "67d53a00",
+ "createEndpoints(uint8,uint8,address[])": "d6d62497",
+ "decodeLzComposeOption(bytes)": "518e8ab0",
+ "decodeLzReadOption(bytes)": "9751ca86",
+ "decodeLzReceiveOption(bytes)": "f93e1d61",
+ "decodeNativeDropOption(bytes)": "b954fdf6",
+ "excludeArtifacts()": "b5508aa9",
+ "excludeContracts()": "e20c9f71",
+ "excludeSelectors()": "b0464fdc",
+ "excludeSenders()": "1ed7831c",
+ "executorValueCap()": "2113ce62",
+ "failed()": "ba414fa6",
+ "getNextInflightPacket(uint16,bytes32)": "7982cf42",
+ "hasPendingPackets(uint16,bytes32)": "5ea0fefe",
+ "lzCompose(bytes,bytes,bytes32,address)": "a29c8984",
+ "lzCompose(uint32,address,bytes,bytes32,address,bytes)": "3bbd6a94",
+ "lzReadReceive(bytes,bytes,bytes)": "0a69faa9",
+ "lzReceive(bytes,bytes)": "ec53eaa0",
+ "msgValueToFail()": "556257df",
+ "msgValueToPass()": "f5e4efb5",
+ "nextExecutorOption(bytes,uint256)": "6e1775e3",
+ "registerEndpoint(address)": "ae6ce400",
+ "schedulePacket(bytes,bytes)": "faed6c58",
+ "setExecutorValueCap(uint128)": "defd9da6",
+ "setUp()": "0a9254e4",
+ "setUpEndpoints(uint8,uint8)": "1cc46525",
+ "setupOApps(bytes,uint8,uint8)": "2a35d250",
+ "shareOFT_arb()": "375591d7",
+ "shareOFT_eth()": "7f2e5936",
+ "shareOFT_pol()": "3cae7b8a",
+ "targetArtifactSelectors()": "66d9a9a0",
+ "targetArtifacts()": "85226c81",
+ "targetContracts()": "3f7286f4",
+ "targetInterfaces()": "2ade3880",
+ "targetSelectors()": "916a17c6",
+ "targetSenders()": "3e5e3c23",
+ "test_E2E_ethereum_to_polygon()": "5edc4670",
+ "userA()": "deb22e9a",
+ "userB()": "cb1a295f",
+ "validatePacket(bytes,bytes)": "60197889",
+ "vault_arb()": "7a8b5d98",
+ "verifyPackets(uint32,address)": "090852b6",
+ "verifyPackets(uint32,bytes32)": "b752b72a",
+ "verifyPackets(uint32,bytes32,uint256,address,bytes)": "834bd159",
+ "wireOApps(address[])": "703ca254",
+ "wireReadOApps(address[],uint32[])": "65449eb0"
+ },
+ "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Executor_InvalidLzComposeOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReadOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReceiveOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidNativeDropOption\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"optionType\",\"type\":\"uint16\"}],\"name\":\"InvalidOptionType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"fsig\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"keysHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"slot\",\"type\":\"uint256\"}],\"name\":\"SlotFound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"slot\",\"type\":\"uint256\"}],\"name\":\"WARNING_UninitedSlot\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ARB_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BAD_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_CHANNEL_ID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_COMPUTE_MAP_BPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_COMPUTE_REDUCE_FEE_USD\",\"outputs\":[{\"internalType\":\"uint120\",\"name\":\"\",\"type\":\"uint120\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_REQUEST_FEE_USD\",\"outputs\":[{\"internalType\":\"uint120\",\"name\":\"\",\"type\":\"uint120\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BALANCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAP_REDUCE_COMPUTE_TYPES\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_TOKEN_PRICE_USD\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIONS_LZRECEIVE_100k\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POL_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKENS_TO_SEND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREASURY_GAS_CAP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREASURY_GAS_FOR_FEE_CAP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VaultComposerSyncArb\",\"outputs\":[{\"internalType\":\"contract VaultComposerSync\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbEndpoint\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbExecutor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"}],\"name\":\"assertGuid\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assetOFT_arb\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assetOFT_eth\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assetOFT_pol\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_endpointNum\",\"type\":\"uint8\"},{\"internalType\":\"enum TestHelperOz5.LibraryType\",\"name\":\"_libraryType\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"nativeTokenAddresses\",\"type\":\"address[]\"}],\"name\":\"createEndpoints\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzComposeOption\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzReadOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"size\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzReceiveOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeNativeDropOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executorValueCap\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"getNextInflightPacket\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"packetBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"hasPendingPackets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_composerMsg\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_composer\",\"type\":\"address\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"lzReadReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgValueToFail\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgValueToPass\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_cursor\",\"type\":\"uint256\"}],\"name\":\"nextExecutorOption\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"optionType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"option\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract EndpointV2Mock\",\"name\":\"endpoint\",\"type\":\"address\"}],\"name\":\"registerEndpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"schedulePacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_valueCap\",\"type\":\"uint128\"}],\"name\":\"setExecutorValueCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_endpointNum\",\"type\":\"uint8\"},{\"internalType\":\"enum TestHelperOz5.LibraryType\",\"name\":\"_libraryType\",\"type\":\"uint8\"}],\"name\":\"setUpEndpoints\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_oappCreationCode\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"_startEid\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"_oappNum\",\"type\":\"uint8\"}],\"name\":\"setupOApps\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shareOFT_arb\",\"outputs\":[{\"internalType\":\"contract MockOFTAdapter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shareOFT_eth\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shareOFT_pol\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_E2E_ethereum_to_polygon\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"userA\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"userB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"validatePacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault_arb\",\"outputs\":[{\"internalType\":\"contract MockVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_dstAddress\",\"type\":\"address\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_packetAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_composer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"}],\"name\":\"wireOApps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"channels\",\"type\":\"uint32[]\"}],\"name\":\"wireReadOApps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{\"createEndpoints(uint8,uint8,address[])\":{\"params\":{\"_endpointNum\":\"The number of endpoints to create.\",\"_libraryType\":\"The type of message library to use (UltraLightNode or SimpleMessageLib).\"}},\"schedulePacket(bytes,bytes)\":{\"details\":\"Adds the packet to the front of the queue and stores its options for later retrieval.\",\"params\":{\"_options\":\"The options associated with the packet, used during delivery.\",\"_packetBytes\":\"The packet data to be scheduled.\"}},\"setExecutorValueCap(uint128)\":{\"details\":\"set executorValueCap if more than 0.1 ether is necessarythis must be called prior to setUpEndpoints() if the value is to be used\",\"params\":{\"_valueCap\":\"amount executor can pass as msg.value to lzReceive()\"}},\"setUp()\":{\"details\":\"Initializes test environment setup, to be overridden by specific tests.\"},\"setupOApps(bytes,uint8,uint8)\":{\"params\":{\"_oappCreationCode\":\"The bytecode for creating OApp contracts.\",\"_oappNum\":\"The number of OApps to set up.\",\"_startEid\":\"The starting endpoint ID for OApp setup.\"},\"returns\":{\"oapps\":\"An array of addresses for the deployed OApps.\"}},\"verifyPackets(uint32,address)\":{\"details\":\"verify packets to destination chain's OApp address.\",\"params\":{\"_dstAddress\":\"The destination address.\",\"_dstEid\":\"The destination endpoint ID.\"}},\"verifyPackets(uint32,bytes32)\":{\"details\":\"Calls an overloaded version of verifyPackets with default values for packet amount and composer address.\",\"params\":{\"_dstAddress\":\"The destination address in bytes32 format.\",\"_dstEid\":\"The destination chain's endpoint ID.\"}},\"verifyPackets(uint32,bytes32,uint256,address,bytes)\":{\"details\":\"dst UA receive/execute packetswill NOT work calling this directly with composer IF the composed payload is different from the lzReceive msg payload\"},\"wireOApps(address[])\":{\"details\":\"Sets each OApp as a peer to every other OApp in the provided array, except itself.\",\"params\":{\"oapps\":\"An array of addresses representing the deployed OApp instances.\"}},\"wireReadOApps(address[],uint32[])\":{\"details\":\"Sets each OApp to read from the provided channels.\",\"params\":{\"channels\":\"An array of channel IDs to set as read channels.\",\"oapps\":\"An array of addresses representing the deployed OApp instances.\"}}},\"stateVariables\":{\"lzComposeMsgValue\":{\"details\":\"Seems to consume about 2.2 gwei\"},\"lzReceiveGasValue\":{\"details\":\"Not profiled\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"createEndpoints(uint8,uint8,address[])\":{\"notice\":\"Sets up endpoints for testing.\"},\"schedulePacket(bytes,bytes)\":{\"notice\":\"Schedules a packet for delivery, storing it in the packets queue.\"},\"setupOApps(bytes,uint8,uint8)\":{\"notice\":\"Sets up mock OApp contracts for testing.\"},\"verifyPackets(uint32,bytes32)\":{\"notice\":\"Verifies and processes packets destined for a specific chain and user address.\"},\"wireOApps(address[])\":{\"notice\":\"Configures the peers between multiple OApp instances.\"},\"wireReadOApps(address[],uint32[])\":{\"notice\":\"Configures the read channels for multiple OApp instances.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/vault-sync/VaultComposerSync_E2E.t.sol\":\"VaultComposerSyncE2ETest\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/\"]},\"sources\":{\"contracts/VaultComposerSync.sol\":{\"keccak256\":\"0xbbba257858c39e33201067897be32e7e2dac636726498e4f394115c2bc3bf93b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ff9ce61a8cd70dfea73b632241c852a040c0ae2c9470c7add66571cc32e0246\",\"dweb:/ipfs/QmauMyGN1mGiv9pLEtnZbXjpd8J49AzV6W8bSLQ9Uf2LEH\"]},\"contracts/interfaces/IVaultComposerSync.sol\":{\"keccak256\":\"0x86597121d142cdd98d7399abfe1109ab4052d570056758f71193b8a614c289cd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bcfb48d7d685e5e4d46dc16e3a74d18341c489ea4efcab2e593ec3b3f3cca48\",\"dweb:/ipfs/QmQG5PGYqVDrxBeGy7vcYKkk3jjqt3mLJ9kJpjwcRQzWZu\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":{\"keccak256\":\"0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2\",\"dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol\":{\"keccak256\":\"0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497\",\"dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":{\"keccak256\":\"0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79\",\"dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol\":{\"keccak256\":\"0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2\",\"dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":{\"keccak256\":\"0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc\",\"dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":{\"keccak256\":\"0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc\",\"dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":{\"keccak256\":\"0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899\",\"dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol\":{\"keccak256\":\"0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8\",\"dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":{\"keccak256\":\"0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691\",\"dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol\":{\"keccak256\":\"0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda\",\"dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol\":{\"keccak256\":\"0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d\",\"dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol\":{\"keccak256\":\"0xd40d91e8173cdb5bb821b4594f806b99344d5fd605bc6f2cf0fb21d5ab2500e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1278c26c077e3b1ee6a5f25385a3c00eaecc0efd7b622facac5569d1e47ac42e\",\"dweb:/ipfs/QmQZyrJV7UoUfdY1KYNJ2ru27Khtg4Z8v8XE9KNHFtsvA4\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol\":{\"keccak256\":\"0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7\",\"dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFTAdapter.sol\":{\"keccak256\":\"0xd65041c093c19792b66369a04b4aea5c988c32e2cf4ab952a442315426407fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1cc68778a40a45397f1ffcdba25920523a75d321da8852f7688f50885bbd08\",\"dweb:/ipfs/QmRUL7Q6dNxbc1Mz1hXgUz7eyCZDpt9eJD8BK1EMaJ9Yoz\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol\":{\"keccak256\":\"0xdda89798c66928bba9e0fa44b3edf4710ff15cf46edadcf3e15c92d78fcc9ca8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef0cf33304a4ae343e83e9c11bafb2516f2b256c290cba3e096455ff237fa78c\",\"dweb:/ipfs/QmQph8KfKf9o7JNoas4BmNQ9qL9whZsrchouPiUp7o4YFm\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0xc60c7b4374b3d89f33b8de982f463c92374a8548800c816fe776f0ec76351fb0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9e2ae9efc2a93373e822b148b3a3b50e3562c8c317f2e71d73cf4a11dede9d15\",\"dweb:/ipfs/QmahCbqvqEcWLJpqE6EbHHTuSbnGWyo35ZBVqoyKv18BSF\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":{\"keccak256\":\"0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973\",\"dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":{\"keccak256\":\"0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f\",\"dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol\":{\"keccak256\":\"0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688\",\"dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol\":{\"keccak256\":\"0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab\",\"dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol\":{\"keccak256\":\"0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b\",\"dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":{\"keccak256\":\"0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045\",\"dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol\":{\"keccak256\":\"0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff\",\"dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol\":{\"keccak256\":\"0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73\",\"dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol\":{\"keccak256\":\"0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f\",\"dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol\":{\"keccak256\":\"0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec\",\"dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol\":{\"keccak256\":\"0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0\",\"dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol\":{\"keccak256\":\"0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4\",\"dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol\":{\"keccak256\":\"0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574\",\"dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol\":{\"keccak256\":\"0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991\",\"dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":{\"keccak256\":\"0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1\",\"dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x399d0b11c8e4e902b6c95c21c187968e62e1bd2a86b8f6dad882c399a05404c1\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://82618dd9135c30870716bb9561f238b68b0c46cff6c7311a3d4b1c35a541c633\",\"dweb:/ipfs/QmSw3gEwXthgoDAqE3gemC5JfQnBnRBTFGEJaDNBj7JwxH\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]},\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09\",\"dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol\":{\"keccak256\":\"0x51aabf26e9682335ecf33b708cbcdf26e42bdc2f0a2e6fc09d6640219a0e00f6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9423a1603d9145e142d50aa0f9a31199731733535501a7d3918d36b1deed78f2\",\"dweb:/ipfs/QmQAArNnrZVfKrbY3vGer2G6775HozDmGrsovtz5NFqGrP\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol\":{\"keccak256\":\"0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb\",\"dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3\"]},\"test/mocks/MockOFT.sol\":{\"keccak256\":\"0x6c2143557accb95c3be9a0942cb8bca877ef94d3ec34f51112fe744a72dad047\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://437d64f216e278082bd978ccbb9fc64a27707c564678a08a827df0741ec63d44\",\"dweb:/ipfs/QmagfMbuJuJV7LLXrxAoftExfETeFcszkSZFvYJ1T2u9kJ\"]},\"test/mocks/MockVault.sol\":{\"keccak256\":\"0xd4a6b9e7c49512a7ed3548781d45d9082b3ecd25dd635873926c39184d485790\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://70acbb9b707cc17ee6cd36d71e21c7a8ab793a700c152c77a9babf2a1836aeca\",\"dweb:/ipfs/Qmef5Fs6DD5we9Qr3SQnYJUpne726JdpkGUqrq9BFbJgpn\"]},\"test/vault-sync/VaultComposerSync_Base.t.sol\":{\"keccak256\":\"0x31b5b3e30e1869648bb806871a9713d85ced6233448dfc9c0e6f59a31140d536\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6b43dc68a03a7305c8f5049b1080dd1387edbd99ea0de6e9e009471516aaa982\",\"dweb:/ipfs/QmVj6GGCCe2QvFf33dwYxHNWqLAdXh4aVnyacHBT8v4gRW\"]},\"test/vault-sync/VaultComposerSync_E2E.t.sol\":{\"keccak256\":\"0x79a572c34d8a56d2ec1bc8090b73f72988ec024278235ace44e3c722b40ea05f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://9c06c440fe39c6a98e4f91dcc6a8089f2fd0e5c67a9065f12818f575daf88ee5\",\"dweb:/ipfs/QmPgs8nXZ1gbBSNqvcdsD3vYsiyMWK821wTFFSUJTyzpFc\"]}},\"version\":1}",
+ "metadata": {
+ "compiler": { "version": "0.8.22+commit.4fc1097e" },
+ "language": "Solidity",
+ "output": {
+ "abi": [
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidLzComposeOption"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidLzReadOption"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidLzReceiveOption"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidNativeDropOption"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint16", "name": "optionType", "type": "uint16" }
+ ],
+ "type": "error",
+ "name": "InvalidOptionType"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint8", "name": "bits", "type": "uint8" },
+ { "internalType": "uint256", "name": "value", "type": "uint256" }
+ ],
+ "type": "error",
+ "name": "SafeCastOverflowedUintDowncast"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "who",
+ "type": "address",
+ "indexed": false
+ },
+ {
+ "internalType": "bytes4",
+ "name": "fsig",
+ "type": "bytes4",
+ "indexed": false
+ },
+ {
+ "internalType": "bytes32",
+ "name": "keysHash",
+ "type": "bytes32",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "slot",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "SlotFound",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "who",
+ "type": "address",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "slot",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "WARNING_UninitedSlot",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_address",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "int256[]",
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "val",
+ "type": "address[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_bytes",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_bytes32",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "int256",
+ "name": "",
+ "type": "int256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_int",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "address",
+ "name": "val",
+ "type": "address",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_address",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "int256[]",
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "address[]",
+ "name": "val",
+ "type": "address[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "bytes",
+ "name": "val",
+ "type": "bytes",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_bytes",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "bytes32",
+ "name": "val",
+ "type": "bytes32",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_bytes32",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "int256",
+ "name": "val",
+ "type": "int256",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_decimal_int",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "val",
+ "type": "uint256",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_decimal_uint",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "int256",
+ "name": "val",
+ "type": "int256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_int",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "string",
+ "name": "val",
+ "type": "string",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_string",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "val",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_uint",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_string",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_uint",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "logs",
+ "anonymous": false
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "ARB_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "BAD_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "DEFAULT_CHANNEL_ID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "ETH_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "EVM_COMPUTE_MAP_BPS",
+ "outputs": [
+ { "internalType": "uint16", "name": "", "type": "uint16" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "EVM_COMPUTE_REDUCE_FEE_USD",
+ "outputs": [
+ { "internalType": "uint120", "name": "", "type": "uint120" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "EVM_REQUEST_FEE_USD",
+ "outputs": [
+ { "internalType": "uint120", "name": "", "type": "uint120" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "INITIAL_BALANCE",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "IS_TEST",
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "MAP_REDUCE_COMPUTE_TYPES",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "NATIVE_TOKEN_PRICE_USD",
+ "outputs": [
+ { "internalType": "uint128", "name": "", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "OPTIONS_LZRECEIVE_100k",
+ "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "POL_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "TOKENS_TO_SEND",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "TREASURY_GAS_CAP",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "TREASURY_GAS_FOR_FEE_CAP",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "VaultComposerSyncArb",
+ "outputs": [
+ {
+ "internalType": "contract VaultComposerSync",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "arbEndpoint",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "arbExecutor",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "packetBytes", "type": "bytes" },
+ { "internalType": "bytes32", "name": "guid", "type": "bytes32" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "assertGuid"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "assetOFT_arb",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "assetOFT_eth",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "assetOFT_pol",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint8",
+ "name": "_endpointNum",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum TestHelperOz5.LibraryType",
+ "name": "_libraryType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address[]",
+ "name": "nativeTokenAddresses",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "createEndpoints"
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeLzComposeOption",
+ "outputs": [
+ { "internalType": "uint16", "name": "index", "type": "uint16" },
+ { "internalType": "uint128", "name": "gas", "type": "uint128" },
+ { "internalType": "uint128", "name": "value", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeLzReadOption",
+ "outputs": [
+ { "internalType": "uint128", "name": "gas", "type": "uint128" },
+ { "internalType": "uint32", "name": "size", "type": "uint32" },
+ { "internalType": "uint128", "name": "value", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeLzReceiveOption",
+ "outputs": [
+ { "internalType": "uint128", "name": "gas", "type": "uint128" },
+ { "internalType": "uint128", "name": "value", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeNativeDropOption",
+ "outputs": [
+ { "internalType": "uint128", "name": "amount", "type": "uint128" },
+ { "internalType": "bytes32", "name": "receiver", "type": "bytes32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeArtifacts",
+ "outputs": [
+ {
+ "internalType": "string[]",
+ "name": "excludedArtifacts_",
+ "type": "string[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeContracts",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "excludedContracts_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeSelectors",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "name": "excludedSelectors_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeSenders",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "excludedSenders_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "executorValueCap",
+ "outputs": [
+ { "internalType": "uint128", "name": "", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "failed",
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint16", "name": "_dstEid", "type": "uint16" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "getNextInflightPacket",
+ "outputs": [
+ { "internalType": "bytes", "name": "packetBytes", "type": "bytes" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint16", "name": "_dstEid", "type": "uint16" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "hasPendingPackets",
+ "outputs": [
+ { "internalType": "bool", "name": "flag", "type": "bool" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ { "internalType": "address", "name": "_from", "type": "address" },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ { "internalType": "bytes32", "name": "_guid", "type": "bytes32" },
+ { "internalType": "address", "name": "_to", "type": "address" },
+ { "internalType": "bytes", "name": "_composerMsg", "type": "bytes" }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzCompose"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ { "internalType": "bytes32", "name": "_guid", "type": "bytes32" },
+ {
+ "internalType": "address",
+ "name": "_composer",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzCompose"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ {
+ "internalType": "bytes",
+ "name": "_resolvedPayload",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzReadReceive"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzReceive"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "msgValueToFail",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "msgValueToPass",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ { "internalType": "uint256", "name": "_cursor", "type": "uint256" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "nextExecutorOption",
+ "outputs": [
+ { "internalType": "uint8", "name": "optionType", "type": "uint8" },
+ { "internalType": "bytes", "name": "option", "type": "bytes" },
+ { "internalType": "uint256", "name": "cursor", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract EndpointV2Mock",
+ "name": "endpoint",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "registerEndpoint"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "schedulePacket"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint128",
+ "name": "_valueCap",
+ "type": "uint128"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setExecutorValueCap"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setUp"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint8",
+ "name": "_endpointNum",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum TestHelperOz5.LibraryType",
+ "name": "_libraryType",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setUpEndpoints"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_oappCreationCode",
+ "type": "bytes"
+ },
+ { "internalType": "uint8", "name": "_startEid", "type": "uint8" },
+ { "internalType": "uint8", "name": "_oappNum", "type": "uint8" }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setupOApps",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "oapps",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "shareOFT_arb",
+ "outputs": [
+ {
+ "internalType": "contract MockOFTAdapter",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "shareOFT_eth",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "shareOFT_pol",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetArtifactSelectors",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzArtifactSelector[]",
+ "name": "targetedArtifactSelectors_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "string",
+ "name": "artifact",
+ "type": "string"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetArtifacts",
+ "outputs": [
+ {
+ "internalType": "string[]",
+ "name": "targetedArtifacts_",
+ "type": "string[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetContracts",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "targetedContracts_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetInterfaces",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzInterface[]",
+ "name": "targetedInterfaces_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "string[]",
+ "name": "artifacts",
+ "type": "string[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetSelectors",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "name": "targetedSelectors_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetSenders",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "targetedSenders_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_E2E_ethereum_to_polygon"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "userA",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "userB",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_resolvedPayload",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "validatePacket"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "vault_arb",
+ "outputs": [
+ {
+ "internalType": "contract MockVault",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ {
+ "internalType": "address",
+ "name": "_dstAddress",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "verifyPackets"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_packetAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_composer",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_resolvedPayload",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "verifyPackets"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "verifyPackets"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "oapps",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "wireOApps"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "oapps",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint32[]",
+ "name": "channels",
+ "type": "uint32[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "wireReadOApps"
+ },
+ { "inputs": [], "stateMutability": "payable", "type": "receive" }
+ ],
+ "devdoc": {
+ "kind": "dev",
+ "methods": {
+ "createEndpoints(uint8,uint8,address[])": {
+ "params": {
+ "_endpointNum": "The number of endpoints to create.",
+ "_libraryType": "The type of message library to use (UltraLightNode or SimpleMessageLib)."
+ }
+ },
+ "schedulePacket(bytes,bytes)": {
+ "details": "Adds the packet to the front of the queue and stores its options for later retrieval.",
+ "params": {
+ "_options": "The options associated with the packet, used during delivery.",
+ "_packetBytes": "The packet data to be scheduled."
+ }
+ },
+ "setExecutorValueCap(uint128)": {
+ "details": "set executorValueCap if more than 0.1 ether is necessarythis must be called prior to setUpEndpoints() if the value is to be used",
+ "params": {
+ "_valueCap": "amount executor can pass as msg.value to lzReceive()"
+ }
+ },
+ "setUp()": {
+ "details": "Initializes test environment setup, to be overridden by specific tests."
+ },
+ "setupOApps(bytes,uint8,uint8)": {
+ "params": {
+ "_oappCreationCode": "The bytecode for creating OApp contracts.",
+ "_oappNum": "The number of OApps to set up.",
+ "_startEid": "The starting endpoint ID for OApp setup."
+ },
+ "returns": {
+ "oapps": "An array of addresses for the deployed OApps."
+ }
+ },
+ "verifyPackets(uint32,address)": {
+ "details": "verify packets to destination chain's OApp address.",
+ "params": {
+ "_dstAddress": "The destination address.",
+ "_dstEid": "The destination endpoint ID."
+ }
+ },
+ "verifyPackets(uint32,bytes32)": {
+ "details": "Calls an overloaded version of verifyPackets with default values for packet amount and composer address.",
+ "params": {
+ "_dstAddress": "The destination address in bytes32 format.",
+ "_dstEid": "The destination chain's endpoint ID."
+ }
+ },
+ "verifyPackets(uint32,bytes32,uint256,address,bytes)": {
+ "details": "dst UA receive/execute packetswill NOT work calling this directly with composer IF the composed payload is different from the lzReceive msg payload"
+ },
+ "wireOApps(address[])": {
+ "details": "Sets each OApp as a peer to every other OApp in the provided array, except itself.",
+ "params": {
+ "oapps": "An array of addresses representing the deployed OApp instances."
+ }
+ },
+ "wireReadOApps(address[],uint32[])": {
+ "details": "Sets each OApp to read from the provided channels.",
+ "params": {
+ "channels": "An array of channel IDs to set as read channels.",
+ "oapps": "An array of addresses representing the deployed OApp instances."
+ }
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {
+ "createEndpoints(uint8,uint8,address[])": {
+ "notice": "Sets up endpoints for testing."
+ },
+ "schedulePacket(bytes,bytes)": {
+ "notice": "Schedules a packet for delivery, storing it in the packets queue."
+ },
+ "setupOApps(bytes,uint8,uint8)": {
+ "notice": "Sets up mock OApp contracts for testing."
+ },
+ "verifyPackets(uint32,bytes32)": {
+ "notice": "Verifies and processes packets destined for a specific chain and user address."
+ },
+ "wireOApps(address[])": {
+ "notice": "Configures the peers between multiple OApp instances."
+ },
+ "wireReadOApps(address[],uint32[])": {
+ "notice": "Configures the read channels for multiple OApp instances."
+ }
+ },
+ "version": 1
+ }
+ },
+ "settings": {
+ "remappings": [
+ "@layerzerolabs/=node_modules/@layerzerolabs/",
+ "@openzeppelin/=node_modules/@openzeppelin/",
+ "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/",
+ "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/",
+ "solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/"
+ ],
+ "optimizer": { "enabled": true, "runs": 20000 },
+ "metadata": { "bytecodeHash": "ipfs" },
+ "compilationTarget": {
+ "test/vault-sync/VaultComposerSync_E2E.t.sol": "VaultComposerSyncE2ETest"
+ },
+ "evmVersion": "shanghai",
+ "libraries": {}
+ },
+ "sources": {
+ "contracts/VaultComposerSync.sol": {
+ "keccak256": "0xbbba257858c39e33201067897be32e7e2dac636726498e4f394115c2bc3bf93b",
+ "urls": [
+ "bzz-raw://7ff9ce61a8cd70dfea73b632241c852a040c0ae2c9470c7add66571cc32e0246",
+ "dweb:/ipfs/QmauMyGN1mGiv9pLEtnZbXjpd8J49AzV6W8bSLQ9Uf2LEH"
+ ],
+ "license": "MIT"
+ },
+ "contracts/interfaces/IVaultComposerSync.sol": {
+ "keccak256": "0x86597121d142cdd98d7399abfe1109ab4052d570056758f71193b8a614c289cd",
+ "urls": [
+ "bzz-raw://0bcfb48d7d685e5e4d46dc16e3a74d18341c489ea4efcab2e593ec3b3f3cca48",
+ "dweb:/ipfs/QmQG5PGYqVDrxBeGy7vcYKkk3jjqt3mLJ9kJpjwcRQzWZu"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": {
+ "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1",
+ "urls": [
+ "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9",
+ "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": {
+ "keccak256": "0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9",
+ "urls": [
+ "bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2",
+ "dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": {
+ "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1",
+ "urls": [
+ "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4",
+ "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": {
+ "keccak256": "0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e",
+ "urls": [
+ "bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497",
+ "dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": {
+ "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af",
+ "urls": [
+ "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696",
+ "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": {
+ "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc",
+ "urls": [
+ "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d",
+ "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": {
+ "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347",
+ "urls": [
+ "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4",
+ "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": {
+ "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc",
+ "urls": [
+ "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8",
+ "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": {
+ "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657",
+ "urls": [
+ "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab",
+ "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": {
+ "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345",
+ "urls": [
+ "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5",
+ "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": {
+ "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1",
+ "urls": [
+ "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534",
+ "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": {
+ "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c",
+ "urls": [
+ "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb",
+ "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": {
+ "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d",
+ "urls": [
+ "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89",
+ "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh"
+ ],
+ "license": "MIT OR Apache-2.0"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": {
+ "keccak256": "0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44",
+ "urls": [
+ "bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79",
+ "dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": {
+ "keccak256": "0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5",
+ "urls": [
+ "bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2",
+ "dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": {
+ "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3",
+ "urls": [
+ "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4",
+ "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": {
+ "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284",
+ "urls": [
+ "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c",
+ "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": {
+ "keccak256": "0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9",
+ "urls": [
+ "bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc",
+ "dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": {
+ "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b",
+ "urls": [
+ "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3",
+ "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": {
+ "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8",
+ "urls": [
+ "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5",
+ "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": {
+ "keccak256": "0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91",
+ "urls": [
+ "bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc",
+ "dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": {
+ "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35",
+ "urls": [
+ "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141",
+ "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": {
+ "keccak256": "0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda",
+ "urls": [
+ "bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899",
+ "dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": {
+ "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a",
+ "urls": [
+ "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9",
+ "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": {
+ "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27",
+ "urls": [
+ "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850",
+ "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": {
+ "keccak256": "0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3",
+ "urls": [
+ "bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8",
+ "dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": {
+ "keccak256": "0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f",
+ "urls": [
+ "bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691",
+ "dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": {
+ "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a",
+ "urls": [
+ "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241",
+ "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": {
+ "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73",
+ "urls": [
+ "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c",
+ "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": {
+ "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1",
+ "urls": [
+ "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a",
+ "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": {
+ "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420",
+ "urls": [
+ "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54",
+ "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": {
+ "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49",
+ "urls": [
+ "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf",
+ "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": {
+ "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3",
+ "urls": [
+ "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083",
+ "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": {
+ "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0",
+ "urls": [
+ "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933",
+ "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": {
+ "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c",
+ "urls": [
+ "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0",
+ "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": {
+ "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc",
+ "urls": [
+ "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b",
+ "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": {
+ "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972",
+ "urls": [
+ "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927",
+ "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": {
+ "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901",
+ "urls": [
+ "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d",
+ "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": {
+ "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e",
+ "urls": [
+ "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6",
+ "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": {
+ "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625",
+ "urls": [
+ "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97",
+ "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": {
+ "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb",
+ "urls": [
+ "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1",
+ "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": {
+ "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875",
+ "urls": [
+ "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d",
+ "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": {
+ "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7",
+ "urls": [
+ "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24",
+ "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": {
+ "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5",
+ "urls": [
+ "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b",
+ "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": {
+ "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a",
+ "urls": [
+ "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0",
+ "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": {
+ "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9",
+ "urls": [
+ "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f",
+ "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": {
+ "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9",
+ "urls": [
+ "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f",
+ "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": {
+ "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28",
+ "urls": [
+ "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2",
+ "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": {
+ "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680",
+ "urls": [
+ "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09",
+ "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": {
+ "keccak256": "0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22",
+ "urls": [
+ "bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda",
+ "dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa"
+ ],
+ "license": "BUSL-1.1"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": {
+ "keccak256": "0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5",
+ "urls": [
+ "bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28",
+ "dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": {
+ "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc",
+ "urls": [
+ "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0",
+ "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": {
+ "keccak256": "0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b",
+ "urls": [
+ "bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075",
+ "dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": {
+ "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20",
+ "urls": [
+ "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2",
+ "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol": {
+ "keccak256": "0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae",
+ "urls": [
+ "bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d",
+ "dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": {
+ "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58",
+ "urls": [
+ "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd",
+ "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": {
+ "keccak256": "0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c",
+ "urls": [
+ "bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e",
+ "dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": {
+ "keccak256": "0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461",
+ "urls": [
+ "bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc",
+ "dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": {
+ "keccak256": "0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d",
+ "urls": [
+ "bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2",
+ "dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": {
+ "keccak256": "0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01",
+ "urls": [
+ "bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af",
+ "dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol": {
+ "keccak256": "0xd40d91e8173cdb5bb821b4594f806b99344d5fd605bc6f2cf0fb21d5ab2500e3",
+ "urls": [
+ "bzz-raw://1278c26c077e3b1ee6a5f25385a3c00eaecc0efd7b622facac5569d1e47ac42e",
+ "dweb:/ipfs/QmQZyrJV7UoUfdY1KYNJ2ru27Khtg4Z8v8XE9KNHFtsvA4"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": {
+ "keccak256": "0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750",
+ "urls": [
+ "bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82",
+ "dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": {
+ "keccak256": "0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2",
+ "urls": [
+ "bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a",
+ "dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": {
+ "keccak256": "0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84",
+ "urls": [
+ "bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e",
+ "dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": {
+ "keccak256": "0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6",
+ "urls": [
+ "bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc",
+ "dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol": {
+ "keccak256": "0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a",
+ "urls": [
+ "bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7",
+ "dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/OFTAdapter.sol": {
+ "keccak256": "0xd65041c093c19792b66369a04b4aea5c988c32e2cf4ab952a442315426407fd0",
+ "urls": [
+ "bzz-raw://1f1cc68778a40a45397f1ffcdba25920523a75d321da8852f7688f50885bbd08",
+ "dweb:/ipfs/QmRUL7Q6dNxbc1Mz1hXgUz7eyCZDpt9eJD8BK1EMaJ9Yoz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol": {
+ "keccak256": "0xdda89798c66928bba9e0fa44b3edf4710ff15cf46edadcf3e15c92d78fcc9ca8",
+ "urls": [
+ "bzz-raw://ef0cf33304a4ae343e83e9c11bafb2516f2b256c290cba3e096455ff237fa78c",
+ "dweb:/ipfs/QmQph8KfKf9o7JNoas4BmNQ9qL9whZsrchouPiUp7o4YFm"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": {
+ "keccak256": "0xc60c7b4374b3d89f33b8de982f463c92374a8548800c816fe776f0ec76351fb0",
+ "urls": [
+ "bzz-raw://9e2ae9efc2a93373e822b148b3a3b50e3562c8c317f2e71d73cf4a11dede9d15",
+ "dweb:/ipfs/QmahCbqvqEcWLJpqE6EbHHTuSbnGWyo35ZBVqoyKv18BSF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": {
+ "keccak256": "0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5",
+ "urls": [
+ "bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e",
+ "dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": {
+ "keccak256": "0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b",
+ "urls": [
+ "bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258",
+ "dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": {
+ "keccak256": "0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0",
+ "urls": [
+ "bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973",
+ "dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q"
+ ],
+ "license": "UNLICENSED"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": {
+ "keccak256": "0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63",
+ "urls": [
+ "bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f",
+ "dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq"
+ ],
+ "license": "UNLICENSED"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": {
+ "keccak256": "0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1",
+ "urls": [
+ "bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688",
+ "dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol": {
+ "keccak256": "0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f",
+ "urls": [
+ "bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab",
+ "dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": {
+ "keccak256": "0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9",
+ "urls": [
+ "bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b",
+ "dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": {
+ "keccak256": "0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff",
+ "urls": [
+ "bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045",
+ "dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": {
+ "keccak256": "0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01",
+ "urls": [
+ "bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff",
+ "dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": {
+ "keccak256": "0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f",
+ "urls": [
+ "bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73",
+ "dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": {
+ "keccak256": "0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830",
+ "urls": [
+ "bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f",
+ "dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": {
+ "keccak256": "0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44",
+ "urls": [
+ "bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec",
+ "dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol": {
+ "keccak256": "0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc",
+ "urls": [
+ "bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0",
+ "dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": {
+ "keccak256": "0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121",
+ "urls": [
+ "bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4",
+ "dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol": {
+ "keccak256": "0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348",
+ "urls": [
+ "bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574",
+ "dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol": {
+ "keccak256": "0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9",
+ "urls": [
+ "bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991",
+ "dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": {
+ "keccak256": "0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97",
+ "urls": [
+ "bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1",
+ "dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": {
+ "keccak256": "0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd",
+ "urls": [
+ "bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d",
+ "dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": {
+ "keccak256": "0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270",
+ "urls": [
+ "bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe",
+ "dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": {
+ "keccak256": "0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e",
+ "urls": [
+ "bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351",
+ "dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": {
+ "keccak256": "0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746",
+ "urls": [
+ "bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41",
+ "dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdConstants.sol": {
+ "keccak256": "0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534",
+ "urls": [
+ "bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc",
+ "dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": {
+ "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77",
+ "urls": [
+ "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6",
+ "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": {
+ "keccak256": "0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d",
+ "urls": [
+ "bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391",
+ "dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": {
+ "keccak256": "0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500",
+ "urls": [
+ "bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974",
+ "dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": {
+ "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2",
+ "urls": [
+ "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92",
+ "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": {
+ "keccak256": "0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc",
+ "urls": [
+ "bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57",
+ "dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": {
+ "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d",
+ "urls": [
+ "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8",
+ "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdToml.sol": {
+ "keccak256": "0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861",
+ "urls": [
+ "bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3",
+ "dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": {
+ "keccak256": "0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737",
+ "urls": [
+ "bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138",
+ "dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": {
+ "keccak256": "0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c",
+ "urls": [
+ "bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4",
+ "dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": {
+ "keccak256": "0x399d0b11c8e4e902b6c95c21c187968e62e1bd2a86b8f6dad882c399a05404c1",
+ "urls": [
+ "bzz-raw://82618dd9135c30870716bb9561f238b68b0c46cff6c7311a3d4b1c35a541c633",
+ "dweb:/ipfs/QmSw3gEwXthgoDAqE3gemC5JfQnBnRBTFGEJaDNBj7JwxH"
+ ],
+ "license": "MIT OR Apache-2.0"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": {
+ "keccak256": "0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5",
+ "urls": [
+ "bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57",
+ "dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": {
+ "keccak256": "0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f",
+ "urls": [
+ "bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d",
+ "dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": {
+ "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a",
+ "urls": [
+ "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0",
+ "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": {
+ "keccak256": "0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11",
+ "urls": [
+ "bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab",
+ "dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/BytesLib.sol": {
+ "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a",
+ "urls": [
+ "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535",
+ "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq"
+ ],
+ "license": "Unlicense"
+ },
+ "node_modules/@openzeppelin/contracts/access/AccessControl.sol": {
+ "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308",
+ "urls": [
+ "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80",
+ "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": {
+ "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606",
+ "urls": [
+ "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1",
+ "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/access/Ownable.sol": {
+ "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
+ "urls": [
+ "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
+ "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": {
+ "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7",
+ "urls": [
+ "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b",
+ "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": {
+ "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724",
+ "urls": [
+ "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a",
+ "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": {
+ "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c",
+ "urls": [
+ "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba",
+ "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol": {
+ "keccak256": "0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17",
+ "urls": [
+ "bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1",
+ "dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
+ "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b",
+ "urls": [
+ "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b",
+ "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": {
+ "keccak256": "0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31",
+ "urls": [
+ "bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09",
+ "dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": {
+ "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7",
+ "urls": [
+ "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db",
+ "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol": {
+ "keccak256": "0x51aabf26e9682335ecf33b708cbcdf26e42bdc2f0a2e6fc09d6640219a0e00f6",
+ "urls": [
+ "bzz-raw://9423a1603d9145e142d50aa0f9a31199731733535501a7d3918d36b1deed78f2",
+ "dweb:/ipfs/QmQAArNnrZVfKrbY3vGer2G6775HozDmGrsovtz5NFqGrP"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
+ "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330",
+ "urls": [
+ "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf",
+ "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
+ "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310",
+ "urls": [
+ "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862",
+ "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Address.sol": {
+ "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5",
+ "urls": [
+ "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23",
+ "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Context.sol": {
+ "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
+ "urls": [
+ "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
+ "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Errors.sol": {
+ "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123",
+ "urls": [
+ "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf",
+ "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Panic.sol": {
+ "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a",
+ "urls": [
+ "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a",
+ "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Pausable.sol": {
+ "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd",
+ "urls": [
+ "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc",
+ "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": {
+ "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3",
+ "urls": [
+ "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a",
+ "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": {
+ "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84",
+ "urls": [
+ "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9",
+ "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": {
+ "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa",
+ "urls": [
+ "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287",
+ "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": {
+ "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8",
+ "urls": [
+ "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621",
+ "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/math/Math.sol": {
+ "keccak256": "0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea",
+ "urls": [
+ "bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d",
+ "dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": {
+ "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54",
+ "urls": [
+ "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8",
+ "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": {
+ "keccak256": "0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217",
+ "urls": [
+ "bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb",
+ "dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3"
+ ],
+ "license": "MIT"
+ },
+ "test/mocks/MockOFT.sol": {
+ "keccak256": "0x6c2143557accb95c3be9a0942cb8bca877ef94d3ec34f51112fe744a72dad047",
+ "urls": [
+ "bzz-raw://437d64f216e278082bd978ccbb9fc64a27707c564678a08a827df0741ec63d44",
+ "dweb:/ipfs/QmagfMbuJuJV7LLXrxAoftExfETeFcszkSZFvYJ1T2u9kJ"
+ ],
+ "license": "AGPL-3.0-only"
+ },
+ "test/mocks/MockVault.sol": {
+ "keccak256": "0xd4a6b9e7c49512a7ed3548781d45d9082b3ecd25dd635873926c39184d485790",
+ "urls": [
+ "bzz-raw://70acbb9b707cc17ee6cd36d71e21c7a8ab793a700c152c77a9babf2a1836aeca",
+ "dweb:/ipfs/Qmef5Fs6DD5we9Qr3SQnYJUpne726JdpkGUqrq9BFbJgpn"
+ ],
+ "license": "AGPL-3.0-only"
+ },
+ "test/vault-sync/VaultComposerSync_Base.t.sol": {
+ "keccak256": "0x31b5b3e30e1869648bb806871a9713d85ced6233448dfc9c0e6f59a31140d536",
+ "urls": [
+ "bzz-raw://6b43dc68a03a7305c8f5049b1080dd1387edbd99ea0de6e9e009471516aaa982",
+ "dweb:/ipfs/QmVj6GGCCe2QvFf33dwYxHNWqLAdXh4aVnyacHBT8v4gRW"
+ ],
+ "license": "UNLICENSED"
+ },
+ "test/vault-sync/VaultComposerSync_E2E.t.sol": {
+ "keccak256": "0x79a572c34d8a56d2ec1bc8090b73f72988ec024278235ace44e3c722b40ea05f",
+ "urls": [
+ "bzz-raw://9c06c440fe39c6a98e4f91dcc6a8089f2fd0e5c67a9065f12818f575daf88ee5",
+ "dweb:/ipfs/QmPgs8nXZ1gbBSNqvcdsD3vYsiyMWK821wTFFSUJTyzpFc"
+ ],
+ "license": "UNLICENSED"
+ }
+ },
+ "version": 1
+ },
+ "id": 136
+}
diff --git a/packages/ovault-evm/artifacts/VaultComposerSync_ProxySend.t.sol/VaultComposerSyncProxySendTest.json b/packages/ovault-evm/artifacts/VaultComposerSync_ProxySend.t.sol/VaultComposerSyncProxySendTest.json
new file mode 100644
index 0000000000..f8727669cf
--- /dev/null
+++ b/packages/ovault-evm/artifacts/VaultComposerSync_ProxySend.t.sol/VaultComposerSyncProxySendTest.json
@@ -0,0 +1,3765 @@
+{
+ "abi": [
+ { "type": "receive", "stateMutability": "payable" },
+ {
+ "type": "function",
+ "name": "ARB_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "BAD_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "DEFAULT_CHANNEL_ID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "ETH_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "EVM_COMPUTE_MAP_BPS",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "EVM_COMPUTE_REDUCE_FEE_USD",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint120", "internalType": "uint120" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "EVM_REQUEST_FEE_USD",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint120", "internalType": "uint120" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "INITIAL_BALANCE",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "IS_TEST",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "MAP_REDUCE_COMPUTE_TYPES",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "NATIVE_TOKEN_PRICE_USD",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "OPTIONS_LZRECEIVE_100k",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "POL_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "TOKENS_TO_SEND",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "TREASURY_GAS_CAP",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "TREASURY_GAS_FOR_FEE_CAP",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "VaultComposerSyncArb",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract VaultComposerSync"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "arbEndpoint",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "arbExecutor",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "assertGuid",
+ "inputs": [
+ { "name": "packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "guid", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "assetOFT_arb",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "assetOFT_eth",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "assetOFT_pol",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "createEndpoints",
+ "inputs": [
+ { "name": "_endpointNum", "type": "uint8", "internalType": "uint8" },
+ {
+ "name": "_libraryType",
+ "type": "uint8",
+ "internalType": "enum TestHelperOz5.LibraryType"
+ },
+ {
+ "name": "nativeTokenAddresses",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "decodeLzComposeOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "index", "type": "uint16", "internalType": "uint16" },
+ { "name": "gas", "type": "uint128", "internalType": "uint128" },
+ { "name": "value", "type": "uint128", "internalType": "uint128" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "decodeLzReadOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "gas", "type": "uint128", "internalType": "uint128" },
+ { "name": "size", "type": "uint32", "internalType": "uint32" },
+ { "name": "value", "type": "uint128", "internalType": "uint128" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "decodeLzReceiveOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "gas", "type": "uint128", "internalType": "uint128" },
+ { "name": "value", "type": "uint128", "internalType": "uint128" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "decodeNativeDropOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "amount", "type": "uint128", "internalType": "uint128" },
+ { "name": "receiver", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "excludeArtifacts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedArtifacts_",
+ "type": "string[]",
+ "internalType": "string[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "excludeContracts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedContracts_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "excludeSelectors",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedSelectors_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "components": [
+ { "name": "addr", "type": "address", "internalType": "address" },
+ {
+ "name": "selectors",
+ "type": "bytes4[]",
+ "internalType": "bytes4[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "excludeSenders",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedSenders_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "executorValueCap",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "failed",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getNextInflightPacket",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint16", "internalType": "uint16" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [
+ { "name": "packetBytes", "type": "bytes", "internalType": "bytes" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "hasPendingPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint16", "internalType": "uint16" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [{ "name": "flag", "type": "bool", "internalType": "bool" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "lzCompose",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_from", "type": "address", "internalType": "address" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_guid", "type": "bytes32", "internalType": "bytes32" },
+ { "name": "_to", "type": "address", "internalType": "address" },
+ { "name": "_composerMsg", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "lzCompose",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_guid", "type": "bytes32", "internalType": "bytes32" },
+ { "name": "_composer", "type": "address", "internalType": "address" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "lzReadReceive",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "lzReceive",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "msgValueToFail",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "msgValueToPass",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "nextExecutorOption",
+ "inputs": [
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_cursor", "type": "uint256", "internalType": "uint256" }
+ ],
+ "outputs": [
+ { "name": "optionType", "type": "uint8", "internalType": "uint8" },
+ { "name": "option", "type": "bytes", "internalType": "bytes" },
+ { "name": "cursor", "type": "uint256", "internalType": "uint256" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "registerEndpoint",
+ "inputs": [
+ {
+ "name": "endpoint",
+ "type": "address",
+ "internalType": "contract EndpointV2Mock"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "schedulePacket",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setExecutorValueCap",
+ "inputs": [
+ { "name": "_valueCap", "type": "uint128", "internalType": "uint128" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setUp",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setUpEndpoints",
+ "inputs": [
+ { "name": "_endpointNum", "type": "uint8", "internalType": "uint8" },
+ {
+ "name": "_libraryType",
+ "type": "uint8",
+ "internalType": "enum TestHelperOz5.LibraryType"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setupOApps",
+ "inputs": [
+ {
+ "name": "_oappCreationCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ { "name": "_startEid", "type": "uint8", "internalType": "uint8" },
+ { "name": "_oappNum", "type": "uint8", "internalType": "uint8" }
+ ],
+ "outputs": [
+ { "name": "oapps", "type": "address[]", "internalType": "address[]" }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "shareOFT_arb",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract MockOFTAdapter"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "shareOFT_eth",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "shareOFT_pol",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetArtifactSelectors",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedArtifactSelectors_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzArtifactSelector[]",
+ "components": [
+ { "name": "artifact", "type": "string", "internalType": "string" },
+ {
+ "name": "selectors",
+ "type": "bytes4[]",
+ "internalType": "bytes4[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetArtifacts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedArtifacts_",
+ "type": "string[]",
+ "internalType": "string[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetContracts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedContracts_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetInterfaces",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedInterfaces_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzInterface[]",
+ "components": [
+ { "name": "addr", "type": "address", "internalType": "address" },
+ {
+ "name": "artifacts",
+ "type": "string[]",
+ "internalType": "string[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetSelectors",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedSelectors_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "components": [
+ { "name": "addr", "type": "address", "internalType": "address" },
+ {
+ "name": "selectors",
+ "type": "bytes4[]",
+ "internalType": "bytes4[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetSenders",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedSenders_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "test_depositSend_target_hub",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "test_depositSend_target_hub_can_have_dust",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "test_depositSend_target_not_hub",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "test_redeemSend_target_hub",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "test_redeemSend_target_hub_can_have_dust",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "test_redeemSend_target_not_hub",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "test_target_is_hub_reverts_when_msg_value_provided",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "userA",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "userB",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "validatePacket",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "vault_arb",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockVault" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "verifyPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_dstAddress", "type": "address", "internalType": "address" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "verifyPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" },
+ {
+ "name": "_packetAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ { "name": "_composer", "type": "address", "internalType": "address" },
+ { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "verifyPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "wireOApps",
+ "inputs": [
+ { "name": "oapps", "type": "address[]", "internalType": "address[]" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "wireReadOApps",
+ "inputs": [
+ { "name": "oapps", "type": "address[]", "internalType": "address[]" },
+ { "name": "channels", "type": "uint32[]", "internalType": "uint32[]" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "event",
+ "name": "log",
+ "inputs": [
+ {
+ "name": "",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_address",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_array",
+ "inputs": [
+ {
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false,
+ "internalType": "uint256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_array",
+ "inputs": [
+ {
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false,
+ "internalType": "int256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_array",
+ "inputs": [
+ {
+ "name": "val",
+ "type": "address[]",
+ "indexed": false,
+ "internalType": "address[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_bytes",
+ "inputs": [
+ {
+ "name": "",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_bytes32",
+ "inputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "indexed": false,
+ "internalType": "bytes32"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_int",
+ "inputs": [
+ {
+ "name": "",
+ "type": "int256",
+ "indexed": false,
+ "internalType": "int256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_address",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_array",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false,
+ "internalType": "uint256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_array",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false,
+ "internalType": "int256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_array",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "address[]",
+ "indexed": false,
+ "internalType": "address[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_bytes",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_bytes32",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "bytes32",
+ "indexed": false,
+ "internalType": "bytes32"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_decimal_int",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "int256",
+ "indexed": false,
+ "internalType": "int256"
+ },
+ {
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_decimal_uint",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_int",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "int256",
+ "indexed": false,
+ "internalType": "int256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_string",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_uint",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_string",
+ "inputs": [
+ {
+ "name": "",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_uint",
+ "inputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "logs",
+ "inputs": [
+ {
+ "name": "",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "Executor_InvalidLzComposeOption",
+ "inputs": []
+ },
+ { "type": "error", "name": "Executor_InvalidLzReadOption", "inputs": [] },
+ {
+ "type": "error",
+ "name": "Executor_InvalidLzReceiveOption",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "Executor_InvalidNativeDropOption",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidOptionType",
+ "inputs": [
+ { "name": "optionType", "type": "uint16", "internalType": "uint16" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SafeCastOverflowedUintDowncast",
+ "inputs": [
+ { "name": "bits", "type": "uint8", "internalType": "uint8" },
+ { "name": "value", "type": "uint256", "internalType": "uint256" }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x60806040819052600c8054600160ff199182168117909255601f805490911690911790556200002e9062000502565b604051809103905ff08015801562000048573d5f803e3d5ffd5b50601f80546001600160a01b039290921661010002610100600160a81b0319909216919091179055602480546001600160801b03191667016345785d8a00001790556033805460ff19166003179055604080518082019091526005815264757365724160d81b6020820152620000be90620001cd565b603b80546001600160a01b0319166001600160a01b03929092169190911790556040805180820190915260058152643ab9b2b92160d91b60208201526200010590620001cd565b603c80546001600160a01b0319166001600160a01b039290921691909117905560408051808201909152600b81526a30b93122bc32b1baba37b960a91b60208201526200015290620001cd565b603e80546001600160a01b0319166001600160a01b0392909216919091179055620001aa620186a05f620001a260408051600360f01b602082015281516002818303018152602290910190915290565b9190620001e0565b603f90620001b99082620005ae565b50348015620001c6575f80fd5b50620007f0565b5f620001d98262000253565b5092915050565b6060836003620001f1825f6200036a565b61ffff16146200022c5762000207815f6200036a565b604051633a51740d60e01b815261ffff90911660048201526024015b60405180910390fd5b5f620002398585620003d9565b9050620002498660018362000454565b9695505050505050565b5f80826040516020016200026891906200069e565b60408051808303601f190181529082905280516020909101206001625e79b760e01b03198252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015620002d2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f89190620006bb565b6040516318caf8e360e31b8152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c71890620003369085908790600401620006e3565b5f604051808303815f87803b1580156200034e575f80fd5b505af115801562000361573d5f803e3d5ffd5b50505050915091565b5f620003788260026200073a565b83511015620003ca5760405162461bcd60e51b815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e6473000000000000000000000000604482015260640162000223565b50818101600201515b92915050565b60606001600160801b038216156200042357604080516001600160801b0319608086811b8216602084015285901b166030820152016040516020818303038152906040526200044d565b6040516001600160801b0319608085901b1660208201526030016040516020818303038152906040525b9392505050565b606083600362000465825f6200036a565b61ffff16146200047b5762000207815f6200036a565b846001620004908551620004ce60201b60201c565b6200049d90600162000750565b8686604051602001620004b59594939291906200076e565b6040516020818303038152906040529150509392505050565b5f61ffff821115620004fe576040516306dfcc6560e41b8152601060048201526024810183905260440162000223565b5090565b610aa980620436f483390190565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200053957607f821691505b6020821081036200055857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620005a957805f5260205f20601f840160051c81016020851015620005855750805b601f840160051c820191505b81811015620005a6575f815560010162000591565b50505b505050565b81516001600160401b03811115620005ca57620005ca62000510565b620005e281620005db845462000524565b846200055e565b602080601f83116001811462000618575f8415620006005750858301515b5f19600386901b1c1916600185901b17855562000672565b5f85815260208120601f198616915b82811015620006485788860151825594840194600190910190840162000627565b50858210156200066657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f5b83811015620006965781810151838201526020016200067c565b50505f910152565b5f8251620006b18184602087016200067a565b9190910192915050565b5f60208284031215620006cc575f80fd5b81516001600160a01b03811681146200044d575f80fd5b60018060a01b0383168152604060208201525f8251806040840152620007118160608501602087016200067a565b601f01601f1916919091016060019392505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115620003d357620003d362000726565b61ffff818116838216019080821115620001d957620001d962000726565b5f865162000781818460208b016200067a565b7fff0000000000000000000000000000000000000000000000000000000000000060f888811b82169285019283526001600160f01b031960f089901b16600184015286901b1660038201528351620007e18160048401602088016200067a565b01600401979650505050505050565b62042ef580620007ff5f395ff3fe6080604052600436106200051e575f3560e01c8063699cbade116200029e578063ae6ce4001162000172578063cb1a295f11620000e2578063ec53eaa01162000092578063f93e1d611162000076578063f93e1d611462000ede578063fa7626d41462000f2c578063faed6c581462000f47575f80fd5b8063ec53eaa01462000eae578063f5e4efb51462000ec5575f80fd5b8063deb22e9a11620000c6578063deb22e9a1462000e15578063defd9da61462000e36578063e20c9f711462000e97575f80fd5b8063cb1a295f1462000dd0578063d6d624971462000df1575f80fd5b8063b752b72a116200013e578063b954fdf61162000122578063b954fdf61462000d52578063ba414fa61462000d9f578063baead19c1462000db6575f80fd5b8063b752b72a1462000d18578063b76bada51462000d3c575f80fd5b8063ae6ce4001462000cc6578063b0464fdc1462000cea578063b1dcf5c81462000905578063b5508aa91462000d01575f80fd5b806385226c81116200020e5780639751ca8611620001da5780639c24cb3011620001be5780639c24cb301462000c815780639ea6d64e1462000c98578063a29c89841462000caf575f80fd5b80639751ca861462000c00578063997cff1b1462000c5d575f80fd5b806385226c811462000b765780638c5e9f741462000b9c57806390a606f51462000bb9578063916a17c61462000bda575f80fd5b80637982cf42116200026a5780637f2e5936116200024e5780637f2e59361462000b3157806382411c77146200067d578063834bd1591462000b52575f80fd5b80637982cf421462000aec5780637a8b5d981462000b10575f80fd5b8063699cbade1462000a5d5780636e1775e31462000a7b578063703ca2541462000ab15780637388e2721462000ad5575f80fd5b8063375591d711620003f25780635d0e96e2116200036257806362c54cbe116200031257806366d9a9a011620002f657806366d9a9a014620009f5578063677d41751462000a1b57806367d53a001462000a3c575f80fd5b806362c54cbe14620009ba57806365449eb014620009d1575f80fd5b80635ea0fefe11620003465780635ea0fefe146200094a57806360197889146200097f57806360416f0c14620009a3575f80fd5b80635d0e96e2146200091d5780635e42c9b21462000934575f80fd5b80633f7286f411620003be57806351aa318b11620003a257806351aa318b14620008cc578063536e8d3a14620008e4578063556257df1462000905575f80fd5b80633f7286f4146200085d578063518e8ab01462000874575f80fd5b8063375591d714620007ed5780633bbd6a94146200080e5780633cae7b8a14620008255780633e5e3c231462000846575f80fd5b80631766f5a4116200048e5780631f3280c5116200045a57806325996dae116200043e57806325996dae146200078d5780632a35d25014620007a35780632ade388014620007c7575f80fd5b80631f3280c5146200072b5780632113ce621462000741575f80fd5b80631766f5a4146200067d578063178928d314620006bb5780631cc4652514620006e15780631ed7831c1462000705575f80fd5b80630a9254e411620004ea5780630c003ff711620004ce5780630c003ff714620005fe5780630fcaecfe146200062457806314525bce1462000650575f80fd5b80630a9254e414620005bc5780630afba86814620005d3575f80fd5b8063034d9421146200052a578063090852b6146200054357806309c885c914620005675780630a69faa914620005a5575f80fd5b366200052657005b5f80fd5b34801562000536575f80fd5b506200054162000f6b565b005b3480156200054f575f80fd5b5062000541620005613660046200ab70565b620016b7565b34801562000573575f80fd5b50603d5462000588906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b62000541620005b63660046200acfc565b620016df565b348015620005c8575f80fd5b506200054162001836565b348015620005df575f80fd5b50620005ea61271081565b60405161ffff90911681526020016200059c565b3480156200060a575f80fd5b50603354620005889061010090046001600160a01b031681565b34801562000630575f80fd5b506200063a606581565b60405163ffffffff90911681526020016200059c565b3480156200065c575f80fd5b506200066e68056bc75e2d6310000081565b6040519081526020016200059c565b34801562000689575f80fd5b506200069a670de0b6b3a764000081565b6040516effffffffffffffffffffffffffffff90911681526020016200059c565b348015620006c7575f80fd5b50620006d2620018d8565b6040516200059c91906200addf565b348015620006ed575f80fd5b5062000541620006ff3660046200ae16565b6200196c565b34801562000711575f80fd5b506200071c620019c2565b6040516200059c91906200ae8a565b34801562000737575f80fd5b506200063a600381565b3480156200074d575f80fd5b506024546200076b906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020016200059c565b34801562000799575f80fd5b506200063a600181565b348015620007af575f80fd5b506200071c620007c13660046200ae9e565b62001a24565b348015620007d3575f80fd5b50620007de62001b3d565b6040516200059c91906200af62565b348015620007f9575f80fd5b5060345462000588906001600160a01b031681565b620005416200081f3660046200b001565b62001c85565b34801562000831575f80fd5b5060385462000588906001600160a01b031681565b34801562000852575f80fd5b506200071c62001d40565b34801562000869575f80fd5b506200071c62001da0565b34801562000880575f80fd5b5062000898620008923660046200b0b5565b62001e00565b6040805161ffff90941684526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016200059c565b348015620008d8575f80fd5b506200063a6201117181565b348015620008f0575f80fd5b5060355462000588906001600160a01b031681565b34801562000911575f80fd5b506200066e620186a081565b34801562000929575f80fd5b506200054162001e1c565b34801562000940575f80fd5b506200063a600281565b34801562000956575f80fd5b506200096e620009683660046200b108565b6200240e565b60405190151581526020016200059c565b3480156200098b575f80fd5b50620005416200099d3660046200b135565b6200246e565b348015620009af575f80fd5b50620005416200321d565b348015620009c6575f80fd5b506200054162003611565b348015620009dd575f80fd5b5062000541620009ef3660046200b23f565b62003c03565b34801562000a01575f80fd5b5062000a0c62003cf9565b6040516200059c91906200b35e565b34801562000a27575f80fd5b50603e5462000588906001600160a01b031681565b34801562000a48575f80fd5b5060375462000588906001600160a01b031681565b34801562000a69575f80fd5b506200076b68056bc75e2d6310000081565b34801562000a87575f80fd5b5062000a9f62000a993660046200b3f9565b62003e7e565b6040516200059c94939291906200b46e565b34801562000abd575f80fd5b506200054162000acf3660046200b49d565b62003ea0565b34801562000ae1575f80fd5b506200054162004071565b34801562000af8575f80fd5b50620006d262000b0a3660046200b108565b620044a6565b34801562000b1c575f80fd5b5060395462000588906001600160a01b031681565b34801562000b3d575f80fd5b5060365462000588906001600160a01b031681565b34801562000b5e575f80fd5b506200054162000b703660046200b4db565b620045bb565b34801562000b82575f80fd5b5062000b8d62004bcc565b6040516200059c91906200b554565b34801562000ba8575f80fd5b506200066e670de0b6b3a764000081565b34801562000bc5575f80fd5b50603a5462000588906001600160a01b031681565b34801562000be6575f80fd5b5062000bf162004ca1565b6040516200059c91906200b568565b34801562000c0c575f80fd5b5062000c2462000c1e3660046200b0b5565b62004d9b565b604080516fffffffffffffffffffffffffffffffff948516815263ffffffff90931660208401529216918101919091526060016200059c565b34801562000c69575f80fd5b506200054162000c7b3660046200b3f9565b62004daa565b34801562000c8d575f80fd5b506200054162004e24565b34801562000ca4575f80fd5b5062000541620051d6565b6200054162000cc03660046200b5f9565b620055ff565b34801562000cd2575f80fd5b506200054162000ce43660046200b684565b62005686565b34801562000cf6575f80fd5b5062000bf16200573b565b34801562000d0d575f80fd5b5062000b8d62005835565b34801562000d24575f80fd5b506200054162000d363660046200b6a2565b6200590a565b34801562000d48575f80fd5b506200066e600381565b34801562000d5e575f80fd5b5062000d7662000d703660046200b0b5565b62005927565b604080516fffffffffffffffffffffffffffffffff90931683526020830191909152016200059c565b34801562000dab575f80fd5b506200096e62005941565b34801562000dc2575f80fd5b506200066e64e8d4a5100081565b34801562000ddc575f80fd5b50603c5462000588906001600160a01b031681565b34801562000dfd575f80fd5b506200054162000e0f3660046200b6c1565b62005a15565b34801562000e21575f80fd5b50603b5462000588906001600160a01b031681565b34801562000e42575f80fd5b506200054162000e543660046200b739565b602480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b34801562000ea3575f80fd5b506200071c62007ca4565b6200054162000ebf3660046200b135565b62007d04565b34801562000ed1575f80fd5b506200066e630ee6b28081565b34801562000eea575f80fd5b5062000f0262000efc3660046200b0b5565b62007e37565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016200059c565b34801562000f38575f80fd5b50601f546200096e9060ff1681565b34801562000f53575f80fd5b506200054162000f653660046200b757565b62007e45565b6040805160e0810190915260018152603b545f919060208201906001600160a01b03168152670de0b6b3a764000060208083018290525f60408085018290528051808401825282815260608601528051808401825282815260808601528051928301815290825260a09093015260335460395492517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039384166004820152602481019290925292935061010090920416906340c10f19906044015f604051808303815f87803b15801562001047575f80fd5b505af11580156200105a573d5f803e3d5ffd5b5050603954603b546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a76400006024820152911692506340c10f1991506044015f604051808303815f87803b158015620010cc575f80fd5b505af1158015620010df573d5f803e3d5ffd5b5050603a54603b546033546040517f7e6e1e100000000000000000000000000000000000000000000000000000000081525f95506001600160a01b039384169450637e6e1e10936200114a9381169261010090041690670de0b6b3a76400009088906004016200b840565b6040805180830381865afa15801562001165573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200118b91906200b87d565b603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b158015620011fe575f80fd5b505af115801562001211573d5f803e3d5ffd5b5050603954603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a764000060248201529116925063095ea7b391506044016020604051808303815f875af115801562001288573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620012ae91906200b8de565b50603a548151603b546040517f53174fa40000000000000000000000000000000000000000000000000000000081526001600160a01b03938416936353174fa493926200130c92670de0b6b3a764000092899216906004016200b8fa565b5f604051808303818588803b15801562001324575f80fd5b505af115801562001337573d5f803e3d5ffd5b5050505050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562001389575f80fd5b505af11580156200139c573d5f803e3d5ffd5b505050506200145860395f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620013f5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200141b91906200b92d565b5f6040518060400160405280601d81526020017f72656465656d206275726e732074686520736861726520746f6b656e7300000081525062007ed0565b603354603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620014f5926101009004909116906370a08231906024015b602060405180830381865afa158015620014c8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620014ee91906200b92d565b5f62007f59565b603554603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526200154a9291909116906370a0823190602401620014ac565b60355462001564906001906001600160a01b0316620016b7565b603554603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620016059291909116906370a08231906024015b602060405180830381865afa158015620015d0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620015f691906200b92d565b670de0b6b3a764000062007f59565b603354603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526200165e926101009004909116906370a0823190602401620014ac565b603954603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620016b39291909116906370a0823190602401620014ac565b5050565b620016b382826001600160a01b03165f1b5f8060405180602001604052805f815250620045bb565b5f60235f620016ef878762007fde565b63ffffffff16815260208101919091526040015f908120546001600160a01b03169150806200171e8562008004565b92505091505f60405180606001604052806200173b8a8a62008138565b63ffffffff168152602001620017528a8a62008149565b8152602001620017638a8a62008165565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e6fffffffffffffffffffffffffffffffff85811690851684620017a48d8d6200818b565b620017b08e8e6200819f565b604080516020810182525f815290517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b168152620017fb949392918e916004016200b945565b5f604051808303818589803b15801562001813575f80fd5b5088f115801562001826573d5f803e3d5ffd5b5050505050505050505050505050565b62001840620081b0565b603b546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015268056bc75e2d631000006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015f604051808303815f87803b158015620018bf575f80fd5b505af1158015620018d2573d5f803e3d5ffd5b50505050565b603f8054620018e7906200b9b9565b80601f016020809104026020016040519081016040528092919081815260200182805462001915906200b9b9565b8015620019645780601f106200193a5761010080835404028352916020019162001964565b820191905f5260205f20905b8154815290600101906020018083116200194657829003601f168201915b505050505081565b620016b382828460ff1667ffffffffffffffff8111156200199157620019916200abed565b604051908082528060200260200182016040528015620019bb578160200160208202803683370190505b5062005a15565b6060601680548060200260200160405190810160405280929190818152602001828054801562001a1a57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311620019fb575b5050505050905090565b60608160ff1667ffffffffffffffff81111562001a455762001a456200abed565b60405190808252806020026020018201604052801562001a6f578160200160208202803683370190505b509050825b62001a8083856200ba39565b60ff168160ff16101562001b2a5760ff81165f9081526023602090815260408083205481516001600160a01b039091169281019290925230908201526001606082015262001ae290879060800160405160208183030381529060405262009559565b9050808362001af287856200ba55565b60ff168151811062001b085762001b086200ba71565b6001600160a01b03909216602092830291909101909101525060010162001a74565b5062001b368162003ea0565b9392505050565b6060601e805480602002602001604051908101604052809291908181526020015f905b8282101562001c7c575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101562001c64578382905f5260205f2001805462001bd2906200b9b9565b80601f016020809104026020016040519081016040528092919081815260200182805462001c00906200b9b9565b801562001c4f5780601f1062001c255761010080835404028352916020019162001c4f565b820191905f5260205f20905b81548152906001019060200180831162001c3157829003601f168201915b50505050508152602001906001019062001bb2565b50505050815250508152602001906001019062001b60565b50505050905090565b63ffffffff87165f908152602360205260408120546001600160a01b031690808062001cb189620095b5565b925092509250836001600160a01b03166391d20fa18284908d8b8d898d8d60405180602001604052805f8152506040518a63ffffffff1660e01b815260040162001d0297969594939291906200ba9e565b5f604051808303818589803b15801562001d1a575f80fd5b5088f115801562001d2d573d5f803e3d5ffd5b5050505050505050505050505050505050565b6060601880548060200260200160405190810160405280929190818152602001828054801562001a1a57602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311620019fb575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801562001a1a57602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311620019fb575050505050905090565b5f805f62001e0f8585620096fd565b9250925092509250925092565b6040805160e0810190915260028152603b545f919060208201906001600160a01b03168152670de0b6b3a764000060208083018290525f60408085018290528051808401825282815260608601528051808401825282815260808601528051928301815290825260a090930152603354603b5492517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039384166004820152602481019290925292935061010090920416906340c10f19906044015f604051808303815f87803b15801562001ef8575f80fd5b505af115801562001f0b573d5f803e3d5ffd5b5050603954603b546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a76400006024820152911692506340c10f1991506044015f604051808303815f87803b15801562001f7d575f80fd5b505af115801562001f90573d5f803e3d5ffd5b5050603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d5691506024015f604051808303815f87803b15801562002004575f80fd5b505af115801562002017573d5f803e3d5ffd5b5050603354603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015261010090920416925063095ea7b391506044016020604051808303815f875af115801562002093573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620020b991906200b8de565b50603954603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015291169063095ea7b3906044016020604051808303815f875af11580156200212d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200215391906200b8de565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f7578d2bd000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015f604051808303815f87803b158015620021d7575f80fd5b505af1158015620021ea573d5f803e3d5ffd5b5050603a54603b546040517f19197ec60000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506319197ec693506001926200224d92670de0b6b3a7640000928892909116906004016200b8fa565b5f604051808303818588803b15801562002265575f80fd5b505af115801562002278573d5f803e3d5ffd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f7578d2bd000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063c31eb0e0925060240190505f604051808303815f87803b15801562002301575f80fd5b505af115801562002314573d5f803e3d5ffd5b5050603a54603b546040517f53174fa40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506353174fa493506002926200237792670de0b6b3a7640000928892909116906004016200b8fa565b5f604051808303818588803b1580156200238f575f80fd5b505af1158015620023a2573d5f803e3d5ffd5b5050505050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015620023f4575f80fd5b505af115801562002407573d5f803e3d5ffd5b5050505050565b61ffff82165f908152602080805260408083208484529091528120816200246382546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b119150505b92915050565b5f6200247b848462007fde565b63ffffffff81165f908152602360205260408120549192506001600160a01b03909116908163402f8468620024b188886200818b565b620024bd898962008138565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015263ffffffff1660248201526044016040805180830381865afa15801562002522573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200254891906200bb0b565b5090505f62002558878762009791565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250604080517f54fd4d50000000000000000000000000000000000000000000000000000000008152905195965090946001600160a01b03881694506354fd4d509350600480830193506060928290030181865afa158015620025ea573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200261091906200bb5f565b505090508067ffffffffffffffff1660030362002b8d57825f6001600160a01b038216639c33abf7620026448c8c62008138565b620026508d8d6200818b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600260448201526064015f60405180830381865afa158015620026bd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052620026e691908101906200bbeb565b90505f81806020019051810190620026ff91906200bc8f565b608001515f815181106200271757620027176200ba71565b602002602001015190505f6200272e8c8c620097a2565b6040516200273e9291906200bd71565b6040518091039020905060605f630223536e60e01b888460646040516024016200276b939291906200bd80565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03851663f010cb238d8985620027ed426103e86200bdad565b6040518563ffffffff1660e01b81526004016200280e94939291906200bdc3565b602060405180830381865afa1580156200282a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200285091906200b92d565b90506200285d81620097b3565b6040805160018082528183019092529194505f9250816020015b6040805160a0810182525f808252602082018190526060928201839052828201526080810191909152815260200190600190039081620028775790505090506040518060a001604052808d63ffffffff168152602001886001600160a01b03168152602001838152602001426103e8620028f291906200bdad565b815260200184815250815f815181106200291057620029106200ba71565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b143044b90620029629084906004016200be03565b5f604051808303815f87803b1580156200297a575f80fd5b505af11580156200298d573d5f803e3d5ffd5b505050505f630894edf160e01b8a86604051602401620029af9291906200becf565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03871663f010cb238f8b8562002a31426103e86200bdad565b6040518563ffffffff1660e01b815260040162002a5294939291906200bdc3565b602060405180830381865afa15801562002a6e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002a9491906200b92d565b905062002aa181620097b3565b9450506040518060a001604052808e63ffffffff168152602001896001600160a01b03168152602001828152602001426103e862002ae091906200bdad565b815260200185815250825f8151811062002afe5762002afe6200ba71565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063b143044b9062002b509085906004016200be03565b5f604051808303815f87803b15801562002b68575f80fd5b505af115801562002b7b573d5f803e3d5ffd5b50505050505050505050505062003213565b8067ffffffffffffffff16600a036200319a57825f6001600160a01b038216639c33abf762002bbd8c8c62008138565b62002bc98d8d6200818b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600160448201526064015f60405180830381865afa15801562002c36573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405262002c5f91908101906200bbeb565b90505f8180602001905181019062002c7891906200bef2565b608001515f8151811062002c905762002c906200ba71565b602002602001015190505f62002ca78c8c620098fa565b60405162002cb79291906200bd71565b604051809103902090505f62002cce8d8d6200819f565b8b60405160200162002ce29291906200bf44565b60405160208183030381529060405280519060200120905060605f63ab750e7560e01b89858560405160240162002d1c939291906200bf6b565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562002d9e426103e86200bdad565b6040518563ffffffff1660e01b815260040162002dbf94939291906200bdc3565b602060405180830381865afa15801562002ddb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002e0191906200b92d565b905062002e0e81620097b3565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f80825260208201819052606092820183905282820152608081019190915281526020019060019003908162002e285790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862002ea391906200bdad565b815260200185815250815f8151811062002ec15762002ec16200ba71565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b9062002f139084906004016200be03565b5f604051808303815f87803b15801562002f2b575f80fd5b505af115801562002f3e573d5f803e3d5ffd5b505050505050505f63594924da60e01b89858560405160240162002f65939291906200bf6b565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562002fe7426103e86200bdad565b6040518563ffffffff1660e01b81526004016200300894939291906200bdc3565b602060405180830381865afa15801562003024573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200304a91906200b92d565b90506200305781620097b3565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f808252602082018190526060928201839052828201526080810191909152815260200190600190039081620030715790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e8620030ec91906200bdad565b815260200185815250815f815181106200310a576200310a6200ba71565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b906200315c9084906004016200be03565b5f604051808303815f87803b15801562003174575f80fd5b505af115801562003187573d5f803e3d5ffd5b5050505050505050505050505062003213565b6040517f12cc947f0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906312cc947f90620031e3908b908b906004016200bf91565b5f604051808303815f87803b158015620031fb575f80fd5b505af11580156200320e573d5f803e3d5ffd5b505050505b5050505050505050565b5f62003233670de0b6b3a764000060016200bdad565b6040805160e0810190915260028152603b549192505f9160208201906001600160a01b0316815260208082018590525f60408084018290528051808401825282815260608501528051808401825282815260808501528051928301815290825260a090920152603354603b5491517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052929350610100900416906340c10f19906044015f604051808303815f87803b15801562003306575f80fd5b505af115801562003319573d5f803e3d5ffd5b5050603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d5691506024015f604051808303815f87803b1580156200338d575f80fd5b505af1158015620033a0573d5f803e3d5ffd5b5050603354603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810187905261010090920416925063095ea7b391506044016020604051808303815f875af115801562003415573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200343b91906200b8de565b50603a54603b546040517f19197ec60000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926319197ec6926200348e928792879216906004016200b8fa565b5f604051808303815f87803b158015620034a6575f80fd5b505af1158015620034b9573d5f803e3d5ffd5b50505050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156200350a575f80fd5b505af11580156200351d573d5f803e3d5ffd5b5050603954603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620035b89450911691506370a08231906024015b602060405180830381865afa1580156200358b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620035b191906200b92d565b8362007f59565b603354603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620016b3926101009004909116906370a0823190602401620014ac565b6040805160e0810190915260038152603b545f919060208201906001600160a01b03168152670de0b6b3a764000060208083018290525f60408085018290528051808401825282815260608601528051808401825282815260808601528051928301815290825260a090930152603354603b5492517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039384166004820152602481019290925292935061010090920416906340c10f19906044015f604051808303815f87803b158015620036ed575f80fd5b505af115801562003700573d5f803e3d5ffd5b5050603a54603b546034546040517f7e6e1e100000000000000000000000000000000000000000000000000000000081525f95506001600160a01b039384169450637e6e1e109362003766938116921690670de0b6b3a76400009088906004016200b840565b6040805180830381865afa15801562003781573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620037a791906200b87d565b603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b1580156200381a575f80fd5b505af11580156200382d573d5f803e3d5ffd5b5050603354603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015261010090920416925063095ea7b391506044016020604051808303815f875af1158015620038a9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620038cf91906200b8de565b50603a548151603b546040517f19197ec60000000000000000000000000000000000000000000000000000000081526001600160a01b03938416936319197ec693926200392d92670de0b6b3a764000092899216906004016200b8fa565b5f604051808303818588803b15801562003945575f80fd5b505af115801562003958573d5f803e3d5ffd5b5050505050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015620039aa575f80fd5b505af1158015620039bd573d5f803e3d5ffd5b5050505062003adb603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003a17573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003a3d91906200b92d565b6033546039546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416906370a0823190602401602060405180830381865afa15801562003aa6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003acc91906200b92d565b670de0b6b3a76400006200990b565b603954604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905162003b3f926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015620015d0573d5f803e3d5ffd5b603854603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015262003b949291909116906370a0823190602401620014ac565b60385462003bae906003906001600160a01b0316620016b7565b603854603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526200165e9291909116906370a0823190602401620015b4565b5f5b825181101562003cf4575f83828151811062003c255762003c256200ba71565b602002602001015190505f5b835181101562003ce957816001600160a01b031663f0a9e48185838151811062003c5f5762003c5f6200ba71565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff9091166004820152600160248201526044015f604051808303815f87803b15801562003cc5575f80fd5b505af115801562003cd8573d5f803e3d5ffd5b50506001909201915062003c319050565b505060010162003c05565b505050565b6060601b805480602002602001604051908101604052809291908181526020015f905b8282101562001c7c578382905f5260205f2090600202016040518060400160405290815f8201805462003d4f906200b9b9565b80601f016020809104026020016040519081016040528092919081815260200182805462003d7d906200b9b9565b801562003dcc5780601f1062003da25761010080835404028352916020019162003dcc565b820191905f5260205f20905b81548152906001019060200180831162003dae57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801562003e6557602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162003e115790505b5050505050815250508152602001906001019062003d1c565b5f365f8062003e8f8787876200998f565b935093509350935093509350935093565b80515f5b8181101562003cf4575f83828151811062003ec35762003ec36200ba71565b602002602001015190505f5b8381101562004066578281146200405d575f85828151811062003ef65762003ef66200ba71565b602002602001015190505f816001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003f3e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003f6491906200bfa6565b6001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003fa0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003fc691906200bfc4565b9050836001600160a01b0316633400288b8262003fe9856001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff92909216600483015260248201526044015f604051808303815f87803b15801562004043575f80fd5b505af115801562004056573d5f803e3d5ffd5b5050505050505b60010162003ecf565b505060010162003ea4565b6040805160e0810190915260028152603b545f919060208201906001600160a01b03168152670de0b6b3a764000060208083018290525f60408085018290528051808401825282815260608601528051808401825282815260808601528051928301815290825260a09093015260335460395492517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039384166004820152602481019290925292935061010090920416906340c10f19906044015f604051808303815f87803b1580156200414d575f80fd5b505af115801562004160573d5f803e3d5ffd5b5050603954603b546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a76400006024820152911692506340c10f1991506044015f604051808303815f87803b158015620041d2575f80fd5b505af1158015620041e5573d5f803e3d5ffd5b5050603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d5691506024015f604051808303815f87803b15801562004259575f80fd5b505af11580156200426c573d5f803e3d5ffd5b5050603954603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a764000060248201529116925063095ea7b391506044016020604051808303815f875af1158015620042e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200430991906200b8de565b50603a54603b546040517f53174fa40000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926353174fa4926200436492670de0b6b3a764000092879216906004016200b8fa565b5f604051808303815f87803b1580156200437c575f80fd5b505af11580156200438f573d5f803e3d5ffd5b50505050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015620043e0575f80fd5b505af1158015620043f3573d5f803e3d5ffd5b5050603954603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526200444a9450911691506370a0823190602401620014ac565b603354603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620044a3926101009004909116906370a0823190602401620015b4565b50565b61ffff82165f908152602080805260408083208484529091528120606091620044fd82546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b1115620045b4575f6200451082620099ea565b5f8181526021602052604090208054919250906200452e906200b9b9565b80601f01602080910402602001604051908101604052809291908181526020018280546200455c906200b9b9565b8015620045ab5780601f106200458157610100808354040283529160200191620045ab565b820191905f5260205f20905b8154815290600101906020018083116200458d57829003601f168201915b50505050509250505b5092915050565b63ffffffff85165f908152602360205260409020546001600160a01b031662004645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f656e64706f696e74206e6f74207965742072656769737465726564000000000060448201526064015b60405180910390fd5b63ffffffff85165f908152602080805260408083208784529091528120906200469c82546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b90505f855f03620046e0575081546fffffffffffffffffffffffffffffffff80821670010000000000000000000000000000000090920481169190910316620046f4565b858211620046ef5781620046f1565b855b90505b801562003213578062004707816200bfe2565b9150505f620047168462009a93565b5f8181526021602052604081208054929350909162004735906200b9b9565b80601f016020809104026020016040519081016040528092919081815260200182805462004763906200b9b9565b8015620047b25780601f106200478857610100808354040283529160200191620047b2565b820191905f5260205f20905b8154815290600101906020018083116200479457829003601f168201915b50506040517f997cff1b000000000000000000000000000000000000000000000000000000008152939450309363997cff1b9350620047fa925085915086906004016200becf565b5f6040518083038186803b15801562004811575f80fd5b505afa15801562004824573d5f803e3d5ffd5b50506040517f6019788900000000000000000000000000000000000000000000000000000000815230925063601978899150620048689084908a906004016200c019565b5f604051808303815f87803b15801562004880575f80fd5b505af115801562004893573d5f803e3d5ffd5b5050505f838152602260205260408120805491925090620048b4906200b9b9565b80601f0160208091040260200160405190810160405280929190818152602001828054620048e2906200b9b9565b8015620049315780601f10620049075761010080835404028352916020019162004931565b820191905f5260205f20905b8154815290600101906020018083116200491357829003601f168201915b505050505090506200494581600262009b3f565b1562004a20575f80620049588362009b54565b604051919350915081905f906001600160a01b0383169085908381818185875af1925050503d805f8114620049a9576040519150601f19603f3d011682016040523d82523d5f602084013e620049ae565b606091505b505090508062004a1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4661696c656420746f2073656e6420457468657200000000000000000000000060448201526064016200463c565b505050505b62004a2d81600162009b3f565b1562004aa3576040517fec53eaa0000000000000000000000000000000000000000000000000000000008152309063ec53eaa09062004a7390859085906004016200c019565b5f604051808303815f87803b15801562004a8b575f80fd5b505af115801562004a9e573d5f803e3d5ffd5b505050505b62004ab081600562009b3f565b1562004b28576040517f0a69faa90000000000000000000000000000000000000000000000000000000081523090630a69faa99062004af890859085908c906004016200c041565b5f604051808303815f87803b15801562004b10575f80fd5b505af115801562004b23573d5f803e3d5ffd5b505050505b6001600160a01b0388161580159062004b49575062004b4981600362009b3f565b1562004bc3576040517fa29c8984000000000000000000000000000000000000000000000000000000008152309063a29c89849062004b93908590859088908e906004016200c07f565b5f604051808303815f87803b15801562004bab575f80fd5b505af115801562004bbe573d5f803e3d5ffd5b505050505b505050620046f4565b6060601a805480602002602001604051908101604052809291908181526020015f905b8282101562001c7c578382905f5260205f2001805462004c0f906200b9b9565b80601f016020809104026020016040519081016040528092919081815260200182805462004c3d906200b9b9565b801562004c8c5780601f1062004c625761010080835404028352916020019162004c8c565b820191905f5260205f20905b81548152906001019060200180831162004c6e57829003601f168201915b50505050508152602001906001019062004bef565b6060601d805480602002602001604051908101604052809291908181526020015f905b8282101562001c7c575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801562004d8257602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162004d2e5790505b5050505050815250508152602001906001019062004cc4565b5f805f62001e0f858562009c96565b5f62004db784846200819f565b9050818114620018d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f67756964206e6f74206d6174636800000000000000000000000000000000000060448201526064016200463c565b6040805160e0810190915260028152603b545f919060208201906001600160a01b03168152670de0b6b3a764000060208083018290525f60408085018290528051808401825282815260608601528051808401825282815260808601528051928301815290825260a090930152603354603b5492517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039384166004820152602481019290925292935061010090920416906340c10f19906044015f604051808303815f87803b15801562004f00575f80fd5b505af115801562004f13573d5f803e3d5ffd5b5050603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d5691506024015f604051808303815f87803b15801562004f87575f80fd5b505af115801562004f9a573d5f803e3d5ffd5b5050603354603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015261010090920416925063095ea7b391506044016020604051808303815f875af115801562005016573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200503c91906200b8de565b50603a54603b546040517f19197ec60000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926319197ec6926200509792670de0b6b3a764000092879216906004016200b8fa565b5f604051808303815f87803b158015620050af575f80fd5b505af1158015620050c2573d5f803e3d5ffd5b50505050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562005113575f80fd5b505af115801562005126573d5f803e3d5ffd5b5050603954603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526200517d9450911691506370a0823190602401620015b4565b603354603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620044a3926101009004909116906370a0823190602401620014ac565b5f620051ec670de0b6b3a764000060016200bdad565b6040805160e0810190915260028152603b549192505f9160208201906001600160a01b0316815260208082018590525f60408084018290528051808401825282815260608501528051808401825282815260808501528051928301815290825260a09092015260335460395491517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052929350610100900416906340c10f19906044015f604051808303815f87803b158015620052bf575f80fd5b505af1158015620052d2573d5f803e3d5ffd5b5050603954603b546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052911692506340c10f1991506044015f604051808303815f87803b1580156200533d575f80fd5b505af115801562005350573d5f803e3d5ffd5b5050603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d5691506024015f604051808303815f87803b158015620053c4575f80fd5b505af1158015620053d7573d5f803e3d5ffd5b5050603954603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018790529116925063095ea7b391506044016020604051808303815f875af115801562005447573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200546d91906200b8de565b50603a54603b546040517f53174fa40000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926353174fa492620054c0928792879216906004016200b8fa565b5f604051808303815f87803b158015620054d8575f80fd5b505af1158015620054eb573d5f803e3d5ffd5b50505050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156200553c575f80fd5b505af11580156200554f573d5f803e3d5ffd5b5050603954603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620055a69450911691506370a0823190602401620014ac565b603354603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620016b3926101009004909116906370a08231906024016200356f565b30633bbd6a9462005611878762007fde565b6200561d88886200818b565b8686866200562c8c8c620098fa565b6040518863ffffffff1660e01b81526004016200565097969594939291906200c0c8565b5f604051808303815f87803b15801562005668575f80fd5b505af11580156200567b573d5f803e3d5ffd5b505050505050505050565b8060235f836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620056c7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620056ed91906200bfc4565b63ffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060601c805480602002602001604051908101604052809291908181526020015f905b8282101562001c7c575f8481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200581c57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620057c85790505b505050505081525050815260200190600101906200575e565b60606019805480602002602001604051908101604052809291908181526020015f905b8282101562001c7c578382905f5260205f2001805462005878906200b9b9565b80601f0160208091040260200160405190810160405280929190818152602001828054620058a6906200b9b9565b8015620058f55780601f10620058cb57610100808354040283529160200191620058f5565b820191905f5260205f20905b815481529060010190602001808311620058d757829003601f168201915b50505050508152602001906001019062005858565b620016b382825f8060405180602001604052805f815250620045bb565b5f8062005935848462009d21565b915091505b9250929050565b6008545f9060ff161562005959575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa158015620059e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062005a0e91906200b92d565b1415905090565b8260ff1667ffffffffffffffff81111562005a345762005a346200abed565b60405190808252806020026020018201604052801562005a5e578160200160208202803683370190505b50805162005a75916025916020909101906200a81f565b508260ff1667ffffffffffffffff81111562005a955762005a956200abed565b60405190808252806020026020018201604052801562005abf578160200160208202803683370190505b50805162005ad6916026916020909101906200a89f565b508260ff1667ffffffffffffffff81111562005af65762005af66200abed565b60405190808252806020026020018201604052801562005b20578160200160208202803683370190505b50805162005b37916027916020909101906200a81f565b508260ff1667ffffffffffffffff81111562005b575762005b576200abed565b60405190808252806020026020018201604052801562005b81578160200160208202803683370190505b50805162005b98916028916020909101906200a81f565b508260ff1667ffffffffffffffff81111562005bb85762005bb86200abed565b60405190808252806020026020018201604052801562005be2578160200160208202803683370190505b50805162005bf9916029916020909101906200a81f565b5060408051600180825281830190925290602080830190803683375050815162005c2b92602a9250602001906200a81f565b506040517fffa1864900000000000000000000000000000000000000000000000000000000815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa15801562005c94573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062005cba91906200bfa6565b602a80545f9062005ccf5762005ccf6200ba71565b5f918252602082200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0393909316929092179091555b8360ff168160ff16101562005f27575f62005d2d8260016200ba39565b60ff1690505f838360ff168151811062005d4b5762005d4b6200ba71565b602002602001015190508160256001018460ff168154811062005d725762005d726200ba71565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055505f6001600160a01b0316816001600160a01b03160362005e4e57813060405162005dcd906200a94d565b63ffffffff90921682526001600160a01b03166020820152604001604051809103905ff08015801562005e02573d5f803e3d5ffd5b506025805460ff861690811062005e1d5762005e1d6200ba71565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555062005ee3565b81308260405162005e5f906200a95b565b63ffffffff90931683526001600160a01b039182166020840152166040820152606001604051809103905ff08015801562005e9c573d5f803e3d5ffd5b506025805460ff861690811062005eb75762005eb76200ba71565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b62005f1c60255f018460ff168154811062005f025762005f026200ba71565b5f918252602090912001546001600160a01b031662005686565b505060010162005d10565b503060405162005f37906200a969565b6001600160a01b039091168152602001604051809103905ff08015801562005f61573d5f803e3d5ffd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790555f5b8360ff168160ff16101562007932575f83600181111562005fc15762005fc16200c12a565b0362007704575f60255f018260ff168154811062005fe35762005fe36200ba71565b905f5260205f20015f9054906101000a90046001600160a01b03169050308164e8d4a51000620186a06040516200601a906200a977565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff08015801562006057573d5f803e3d5ffd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040518190620060a0906200a985565b6001600160a01b039091168152602001604051809103905ff080158015620060ca573d5f803e3d5ffd5b50602c6001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550308164e8d4a51000620186a06040516200610d906200a993565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff0801580156200614a573d5f803e3d5ffd5b50602e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556025805460ff84169081106200619d576200619d6200ba71565b5f91825260209091200154602c546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b15801562006205575f80fd5b505af115801562006218573d5f803e3d5ffd5b5050505060255f018260ff16815481106200623757620062376200ba71565b5f91825260209091200154602d546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b1580156200629f575f80fd5b505af1158015620062b2573d5f803e3d5ffd5b5050505060255f018260ff1681548110620062d157620062d16200ba71565b5f91825260209091200154602e546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b15801562006339575f80fd5b505af11580156200634c573d5f803e3d5ffd5b5050602c54602780546001600160a01b039092169350915060ff85169081106200637a576200637a6200ba71565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602d546028805491909216919060ff8516908110620063d957620063d96200ba71565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602e546029805491909216919060ff85169081106200643857620064386200ba71565b5f918252602082200180546001600160a01b03939093167fffffffffffffffffffffffff0000000000000000000000000000000000000000909316929092179091556040805160018082528183019092529081602001602082028036833701905050905030815f81518110620064b257620064b26200ba71565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092525f9290919082016060803683375050602c5482519293506001600160a01b0316918391505f906200650f576200650f6200ba71565b6001600160a01b039283166020918202929092010152602d548251911690829060019081106200654357620065436200ba71565b6001600160a01b039283166020918202929092010152602e548251911690829060029081106200657757620065776200ba71565b6001600160a01b039283166020918202929092010152602b5460405185925f92859291169030908790620065ab906200a9a1565b620065bc969594939291906200c157565b604051809103905ff080158015620065d6573d5f803e3d5ffd5b50602f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff86169081106200662957620066296200ba71565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff166040516200665b906200a9af565b63ffffffff9091168152602001604051809103905ff08015801562006682573d5f803e3d5ffd5b50603180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602f546040517fc7b2370b00000000000000000000000000000000000000000000000000000000815260048101929092529091169063c7b2370b906024015f604051808303815f87803b15801562006710575f80fd5b505af115801562006723573d5f803e3d5ffd5b5050505060256001018460ff16815481106200674357620067436200ba71565b5f918252602090912060088204015460079091166004026101000a900463ffffffff16620067738560016200ba39565b602b5460405184916001600160a01b031690602a90600190889062006798906200a9bd565b620067aa97969594939291906200c1a7565b604051809103905ff080158015620067c4573d5f803e3d5ffd5b50603080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff86169081106200681757620068176200ba71565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16670de0b6b3a764000060405162006852906200a9cb565b63ffffffff90921682526020820152604001604051809103905ff0801580156200687e573d5f803e3d5ffd5b50603280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f39f26dfc000000000000000000000000000000000000000000000000000000008152670de0b6b3a764000060048201819052602482015261271060448201526339f26dfc906064015f604051808303815f87803b1580156200691a575f80fd5b505af11580156200692d573d5f803e3d5ffd5b50506030546032546040517fc7b2370b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063c7b2370b91506024015f604051808303815f87803b15801562006991575f80fd5b505af1158015620069a4573d5f803e3d5ffd5b505050505050620069cf60405180606001604052806060815260200160608152602001606081525090565b620069dc8660016200ba39565b60ff1667ffffffffffffffff811115620069fa57620069fa6200abed565b60405190808252806020026020018201604052801562006a7957816020015b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018162006a195790505b50815262006a898660016200ba39565b60ff1667ffffffffffffffff81111562006aa75762006aa76200abed565b60405190808252806020026020018201604052801562006b1857816020015b604080516080810182525f8082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018162006ac65790505b50602082015262006b2b8660016200ba39565b60ff1667ffffffffffffffff81111562006b495762006b496200abed565b60405190808252806020026020018201604052801562006b8f57816020015b604080518082019091525f808252602082015281526020019060019003908162006b685790505b50604082810191909152805160018082528183019092525f91602080830190803683375050604080515f80825260208201909252603054845194955090936001600160a01b03909116925084919062006bec5762006bec6200ba71565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5b8860ff168160ff1610156200729e578060ff168660ff16031562007295575f62006c3a8260016200ba39565b60408051600180825281830190925260ff9290921692505f9190816020015b62006c636200a9d9565b81526020019060019003908162006c595790505090505f6040518060c00160405280606467ffffffffffffffff168152602001875160ff168152602001865160ff1681526020015f60ff16815260200187815260200186815250905060405180604001604052808463ffffffff16815260200182815250825f8151811062006cef5762006cef6200ba71565b6020908102919091010152602c546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906329460b0b9062006d459085906004016200c254565b5f604051808303815f87803b15801562006d5d575f80fd5b505af115801562006d70573d5f803e3d5ffd5b5050602d546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329460b0b915062006dbf9085906004016200c254565b5f604051808303815f87803b15801562006dd7575f80fd5b505af115801562006dea573d5f803e3d5ffd5b505f92506001915062006dfa9050565b60405190808252806020026020018201604052801562006e3757816020015b62006e236200aa3e565b81526020019060019003908162006e195790505b506040805180820182526127108152602f546001600160a01b0316602080830191909152825180840190935263ffffffff88168352820181905282519293509183905f9062006e8a5762006e8a6200ba71565b6020908102919091010152602c546040517fc14c43490000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c14c43499062006ee09085906004016200c34f565b5f604051808303815f87803b15801562006ef8575f80fd5b505af115801562006f0b573d5f803e3d5ffd5b50506040805160c08101825263ffffffff89168152611388602082018190529181019190915261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a08201528b518051919550935060ff891692508210905062006f805762006f806200ba71565b602002602001018190525060405180608001604052808463ffffffff16815260200161138867ffffffffffffffff16815260200161271061ffff1681526020016402540be4006fffffffffffffffffffffffffffffffff1681525087602001518560ff168151811062006ff75762006ff76200ba71565b602002602001018190525060405180604001604052808463ffffffff168152602001600381525087604001518560ff16815181106200703a576200703a6200ba71565b60200260200101819052505f60256006015f9054906101000a90046001600160a01b03166001600160a01b031663c18403276040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200709a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620070c091906200c3bf565b6040805160018082528183019092529192505f9190816020015b6200710d6040805180820182525f8082528251606081018452818152602081810183905293810191909152909182015290565b815260200190600190039081620070da57905050905060405180604001604052808663ffffffff16815260200160405180606001604052808560016200715491906200c3dd565b6fffffffffffffffffffffffffffffffff1681526001602082018190526040909101529052815182905f906200718e576200718e6200ba71565b6020908102919091010152602b546040517f3161b7f60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690633161b7f690620071e49084906004016200c414565b5f604051808303815f87803b158015620071fc575f80fd5b505af11580156200720f573d5f803e3d5ffd5b5050602b546040517f5d6d7ccb00000000000000000000000000000000000000000000000000000000815268056bc75e2d6310000060048201526001600160a01b039091169250635d6d7ccb91506024015f604051808303815f87803b15801562007278575f80fd5b505af11580156200728b573d5f803e3d5ffd5b5050505050505050505b60010162006c0e565b506040805160018082528183019092525f91816020015b620072bf6200aa80565b815260200190600190039081620072b55750506040805160c081018252602f546001600160a01b03168152855160ff9081166020808401919091528651909116828401525f606083018190526080830188905260a083018790528351808501909452620111718452908301829052835193945090928491906200734657620073466200ba71565b6020908102919091010152602e546040517fc85f4b4e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c85f4b4e906200739c9085906004016200c491565b5f604051808303815f87803b158015620073b4575f80fd5b505af1158015620073c7573d5f803e3d5ffd5b5050505050506040518060c0016040528060256001018760ff1681548110620073f457620073f46200ba71565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff168252611388908201819052604082015261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a0909101528351805160ff8b169081106200747057620074706200ba71565b6020026020010181905250604051806080016040528060256001018760ff1681548110620074a257620074a26200ba71565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff1682526113888282015261271060408301526402540be400606090920191909152840151805160ff8b169081106200750157620075016200ba71565b6020026020010181905250604051806040016040528060256001018760ff16815481106200753357620075336200ba71565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff16825260039101526040840151805160ff8b169081106200757b576200757b6200ba71565b6020908102919091010152602f5483516040517f3d85ac330000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691633d85ac3391620075d1916004016200c58b565b5f604051808303815f87803b158015620075e9575f80fd5b505af1158015620075fc573d5f803e3d5ffd5b505060305460208601516040517f52d3b8710000000000000000000000000000000000000000000000000000000081526001600160a01b0390921693506352d3b87192506200764e916004016200c626565b5f604051808303815f87803b15801562007666575f80fd5b505af115801562007679573d5f803e3d5ffd5b505060325460408087015190517ff5ff608f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909216935063f5ff608f9250620076cb916004016200c6a4565b5f604051808303815f87803b158015620076e3575f80fd5b505af1158015620076f6573d5f803e3d5ffd5b505050505050505062007929565b60018360018111156200771b576200771b6200c12a565b03620078c6575f3060255f018360ff16815481106200773e576200773e6200ba71565b5f918252602090912001546040516001600160a01b039091169062007763906200aadf565b6001600160a01b03928316815291166020820152604001604051809103905ff08015801562007794573d5f803e3d5ffd5b50905060255f018260ff1681548110620077b257620077b26200ba71565b5f918252602090912001546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063e8964e81906024015f604051808303815f87803b15801562007818575f80fd5b505af11580156200782b573d5f803e3d5ffd5b505050508060256002018360ff16815481106200784c576200784c6200ba71565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060256003018360ff16815481106200789457620078946200ba71565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505062007929565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206c696272617279207479706500000000000000000000000060448201526064016200463c565b60010162005f9c565b505f5b8360ff168160ff161015620018d2575f60255f018260ff16815481106200796057620079606200ba71565b5f9182526020822001546001600160a01b031691508460018111156200798a576200798a6200c12a565b0362007afb57806001600160a01b031663aafea3126201117160256004018560ff1681548110620079bf57620079bf6200ba71565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b15801562007a2c575f80fd5b505af115801562007a3f573d5f803e3d5ffd5b50505050806001600160a01b031663a718531b6201117160256004018560ff168154811062007a725762007a726200ba71565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b15801562007ae3575f80fd5b505af115801562007af6573d5f803e3d5ffd5b505050505b5f5b8560ff168160ff16101562007c99578060ff168360ff16031562007c90576001600160a01b03821663aafea31262007b378360016200ba39565b6027805460ff881690811062007b515762007b516200ba71565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b15801562007bbb575f80fd5b505af115801562007bce573d5f803e3d5ffd5b50505050816001600160a01b031663a718531b82600162007bf091906200ba39565b6028805460ff881690811062007c0a5762007c0a6200ba71565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b15801562007c78575f80fd5b505af115801562007c8b573d5f803e3d5ffd5b505050505b60010162007afd565b505060010162007935565b6060601580548060200260200160405190810160405280929190818152602001828054801562001a1a57602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311620019fb575050505050905090565b5f60235f62007d14868662007fde565b63ffffffff16815260208101919091526040015f908120546001600160a01b031691508062007d438462009d84565b915091505f604051806060016040528062007d5f898962008138565b63ffffffff16815260200162007d76898962008149565b815260200162007d87898962008165565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e84848462007db38c8c6200818b565b62007dbf8d8d6200819f565b62007dcb8e8e620098fa565b60405180602001604052805f8152506040518963ffffffff1660e01b815260040162007dfd969594939291906200c6ed565b5f604051808303818589803b15801562007e15575f80fd5b5088f115801562007e28573d5f803e3d5ffd5b50505050505050505050505050565b5f8062005935848462009ec7565b5f62007e52858562007fde565b90505f62007e61868662009f41565b63ffffffff83165f90815260208080526040808320848452909152812091925062007e8d88886200819f565b905062007e9b828262009f52565b5f81815260216020526040902062007eb5888a836200c7ab565b505f8181526022602052604090206200567b8688836200c7ab565b6040517f88b44c85000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906388b44c859062007f26908690869086906004016200c8b0565b5f6040518083038186803b15801562007f3d575f80fd5b505afa15801562007f50573d5f803e3d5ffd5b50505050505050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015f6040518083038186803b15801562007fc3575f80fd5b505afa15801562007fd6573d5f803e3d5ffd5b505050505050565b5f62007fef6031602d84866200c8d0565b62007ffa916200c8f9565b60e01c9392505050565b5f805f805f620080168660056200a004565b9150915081620080a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f7074696f6e7348656c7065723a206c7a52656164206f7074696f6e206e6f7460448201527f20666f756e64000000000000000000000000000000000000000000000000000060648201526084016200463c565b6040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca8690620080e79084906004016200addf565b606060405180830381865afa15801562008103573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200812991906200c940565b94509450945050509193909250565b5f62007fef600d600984866200c8d0565b5f6200815a602d600d84866200c8d0565b62001b36916200c986565b5f620081766009600184866200c8d0565b62008181916200c9c3565b60c01c9392505050565b5f62001b366200819c848462009f41565b90565b5f6200815a6071605184866200c8d0565b620081ba6200a65f565b603354620081cc9060ff165f6200196c565b60025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c0954603d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216918217905560405130906200823d906200aaed565b6200824a9291906200ca0a565b604051809103905ff08015801562008264573d5f803e3d5ffd5b50603380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384160217905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e047546040519116903090620082db906200aaed565b620082e89291906200caa7565b604051809103905ff08015801562008302573d5f803e3d5ffd5b50603580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e54604051911690309062008375906200aaed565b620083829291906200cb21565b604051809103905ff0801580156200839c573d5f803e3d5ffd5b50603780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff811115620083f857620083f86200abed565b60405190808252806020026020018201604052801562008422578160200160208202803683370190505b5060355481519192506001600160a01b03169082905f906200844857620084486200ba71565b6001600160a01b039283166020918202929092010152603354825161010090910490911690829060019081106200848357620084836200ba71565b6001600160a01b039283166020918202929092010152603754825191169082906002908110620084b757620084b76200ba71565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca254906200850d9084906004016200ae8a565b5f604051808303815f87803b15801562008525575f80fd5b505af115801562008538573d5f803e3d5ffd5b50505050603360019054906101000a90046001600160a01b031660405162008560906200aafb565b6200856c91906200cb9b565b604051809103905ff08015801562008586573d5f803e3d5ffd5b50603980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c0954604051919216903090620085fd906200ab09565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff08015801562008637573d5f803e3d5ffd5b50603480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556039546033546040519184169361010090910416919062008690906200ab17565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff080158015620086ca573d5f803e3d5ffd5b50603a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e0475460405191169030906200873d906200aaed565b6200874a9291906200cc2d565b604051809103905ff08015801562008764573d5f803e3d5ffd5b50603680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e546040519116903090620087d7906200aaed565b620087e49291906200cca7565b604051809103905ff080158015620087fe573d5f803e3d5ffd5b50603880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff8111156200885a576200885a6200abed565b60405190808252806020026020018201604052801562008884578160200160208202803683370190505b5060365481519192506001600160a01b03169082905f90620088aa57620088aa6200ba71565b6001600160a01b039283166020918202929092010152603454825191169082906001908110620088de57620088de6200ba71565b6001600160a01b0392831660209182029290920101526038548251911690829060029081106200891257620089126200ba71565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca25490620089689084906004016200ae8a565b5f604051808303815f87803b15801562008980575f80fd5b505af115801562008993573d5f803e3d5ffd5b5050603354604080517fc657c7180000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b031660048301526024820152600d60448201527f41737365744f46543a3a617262000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008a3e575f80fd5b505af115801562008a51573d5f803e3d5ffd5b5050603554604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008af8575f80fd5b505af115801562008b0b573d5f803e3d5ffd5b5050603754604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008bb2575f80fd5b505af115801562008bc5573d5f803e3d5ffd5b5050603454604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601460448201527f53686172654f4654416461707465723a3a6172620000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008c6c575f80fd5b505af115801562008c7f573d5f803e3d5ffd5b5050603654604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008d26575f80fd5b505af115801562008d39573d5f803e3d5ffd5b5050603854604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008de0575f80fd5b505af115801562008df3573d5f803e3d5ffd5b5050603954604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600a60448201527f5661756c743a3a617262000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008e9a575f80fd5b505af115801562008ead573d5f803e3d5ffd5b5050603a54604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601660448201527f5661756c74436f6d706f73657253796e633a3a617262000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008f54575f80fd5b505af115801562008f67573d5f803e3d5ffd5b5050603e5462008f8d92506001600160a01b0316905068056bc75e2d631000006200a66b565b603d5462008fae906001600160a01b031668056bc75e2d631000006200a66b565b604080516003808252608082019092525f91816020015b60408051606080820183525f80835260208301529181019190915281526020019060019003908162008fc55790505090506040518060600160405280600363ffffffff168152602001600161ffff168152602001603f805462009028906200b9b9565b80601f016020809104026020016040519081016040528092919081815260200182805462009056906200b9b9565b8015620090a55780601f106200907b57610100808354040283529160200191620090a5565b820191905f5260205f20905b8154815290600101906020018083116200908757829003601f168201915b5050505050815250815f81518110620090c257620090c26200ba71565b60200260200101819052506040518060600160405280600263ffffffff168152602001600161ffff168152602001603f8054620090ff906200b9b9565b80601f01602080910402602001604051908101604052809291908181526020018280546200912d906200b9b9565b80156200917c5780601f1062009152576101008083540402835291602001916200917c565b820191905f5260205f20905b8154815290600101906020018083116200915e57829003601f168201915b5050505050815250816001815181106200919a576200919a6200ba71565b60200260200101819052506040518060600160405280600163ffffffff168152602001600161ffff168152602001603f8054620091d7906200b9b9565b80601f016020809104026020016040519081016040528092919081815260200182805462009205906200b9b9565b8015620092545780601f106200922a5761010080835404028352916020019162009254565b820191905f5260205f20905b8154815290600101906020018083116200923657829003601f168201915b5050505050815250816002815181106200927257620092726200ba71565b60209081029190910101526033546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063b98bd07090620092cc9084906004016200cd21565b5f604051808303815f87803b158015620092e4575f80fd5b505af1158015620092f7573d5f803e3d5ffd5b50506035546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd0709150620093469084906004016200cd21565b5f604051808303815f87803b1580156200935e575f80fd5b505af115801562009371573d5f803e3d5ffd5b50506037546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd0709150620093c09084906004016200cd21565b5f604051808303815f87803b158015620093d8575f80fd5b505af1158015620093eb573d5f803e3d5ffd5b50506034546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200943a9084906004016200cd21565b5f604051808303815f87803b15801562009452575f80fd5b505af115801562009465573d5f803e3d5ffd5b50506036546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd0709150620094b49084906004016200cd21565b5f604051808303815f87803b158015620094cc575f80fd5b505af1158015620094df573d5f803e3d5ffd5b50506038546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200952e9084906004016200cd21565b5f604051808303815f87803b15801562009546575f80fd5b505af115801562007f50573d5f803e3d5ffd5b5f80836040516020016200956e91906200cdbe565b60408051601f19818403018152908290526200958f9185906020016200cddb565b60405160208183030381529060405290508051602082015ff09150813b620045b4575f80fd5b5f805f805f620095c78660036200a004565b91509150816200965a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a436f6d706f7365206f7074696f6e2060448201527f6e6f7420666f756e64000000000000000000000000000000000000000000000060648201526084016200463c565b6040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab090620096989084906004016200addf565b606060405180830381865afa158015620096b4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620096da91906200ce0d565b91986fffffffffffffffffffffffffffffffff9182169850911695509350505050565b5f80806012841480159062009713575060228414155b156200974b576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200975885855f6200a6f1565b925062009768858560026200a71b565b9150602284146200977a575f62009788565b62009788858560126200a71b565b90509250925092565b365f6200593560518285876200c8d0565b365f6200593583605181876200c8d0565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290526060905f90605c0160408051601f198184030181529082905280516020909101207fe341eaa4000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291505f9081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e341eaa490604401606060405180830381865afa15801562009878573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200989e91906200ce40565b6040805160208101939093528281019190915260f89290921b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260619091019091529695505050505050565b365f6200593583607181876200c8d0565b6200994d83836040518060400160405280600e81526020017f7465726d3120213d207465726d3200000000000000000000000000000000000081525062007ed0565b62003cf483826040518060400160405280600e81526020017f7465726d3120213d207465726d3300000000000000000000000000000000000081525062007ed0565b5f36816001840181620099a48888846200a6f1565b600292909201919050620099ba8888846200a745565b94506001820161ffff82168301620099d581838b8d6200c8d0565b979b909a50969850505061ffff160193505050565b5f62009a1f825470010000000000000000000000000000000081046fffffffffffffffffffffffffffffffff90811691161490565b1562009a315762009a3160326200a76c565b5080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909204821601165f9081526001909101602052604090205490565b80545f906fffffffffffffffffffffffffffffffff700100000000000000000000000000000000820481169116810362009ad35762009ad360316200a76c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016fffffffffffffffffffffffffffffffff9081165f818152600185016020526040812080549190558454909216700100000000000000000000000000000000909102179092555090565b5f62009b4c83836200a004565b509392505050565b5f805f8062009b658560026200a004565b915091508162009bf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696f6e7348656c7065723a206e617469766544726f70206f7074696f6e60448201527f206e6f7420666f756e640000000000000000000000000000000000000000000060648201526084016200463c565b6040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf69062009c369084906004016200addf565b6040805180830381865afa15801562009c51573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062009c7791906200ce77565b6fffffffffffffffffffffffffffffffff909116969095509350505050565b5f80806014841480159062009cac575060248414155b1562009ce4576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62009cf185855f6200a71b565b925062009d01858560106200a77d565b91506024841462009d13575f62009788565b62009788858560146200a71b565b5f806030831462009d5e576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62009d6b84845f6200a71b565b915062009d7b848460106200a7a7565b90509250929050565b5f805f8062009d958560016200a004565b915091508162009e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a52656365697665206f7074696f6e2060448201527f6e6f7420666f756e64000000000000000000000000000000000000000000000060648201526084016200463c565b6040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d619062009e669084906004016200addf565b6040805180830381865afa15801562009e81573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062009ea791906200cea6565b6fffffffffffffffffffffffffffffffff91821697911695509350505050565b5f806010831480159062009edc575060208314155b1562009f14576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62009f2184845f6200a71b565b91506020831462009f33575f62009d7b565b62009d7b848460106200a71b565b5f6200815a6051603184866200c8d0565b81546fffffffffffffffffffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0191700100000000000000000000000000000000900481169082160362009fb65762009fb660416200a76c565b6fffffffffffffffffffffffffffffffff165f81815260018401602052604090209190915581547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016179055565b601f546040517fe5c5e9a30000000000000000000000000000000000000000000000000000000081525f91606091839161010090046001600160a01b03169063e5c5e9a3906200a0599088906004016200addf565b5f60405180830381865afa1580156200a074573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200a09d91908101906200ced8565b50604080515f80825260208201909252919250908190819081905b85518510156200a634576040517f6e1775e30000000000000000000000000000000000000000000000000000000081525f90819081903090636e1775e3906200a108908c908c906004016200becf565b5f60405180830381865afa1580156200a123573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200a14c91908101906200cf3f565b9250925092508b60ff168360ff16036200a629575f808080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8916016200a291576040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d61906200a1ce908a906004016200addf565b6040805180830381865afa1580156200a1e9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a20f91906200cea6565b90955093506200a220858d6200cf9b565b9b506200a22e848c6200cf9b565b9a508b8b6040516020016200a27a929190608092831b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000090811682529190921b16601082015260200190565b60405160208183030381529060405298506200a623565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8916016200a38e576040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf6906200a2fa908a906004016200addf565b6040805180830381865afa1580156200a315573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a33b91906200ce77565b90945092506200a34c848c6200cf9b565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b16602082015260308101859052909b506050016200a27a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff8916016200a4cb576040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab0906200a3f7908a906004016200addf565b606060405180830381865afa1580156200a413573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a43991906200ce0d565b909650945091506200a44c858d6200cf9b565b9b506200a45a848c6200cf9b565b6040517fffff00000000000000000000000000000000000000000000000000000000000060f085901b1660208201527fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b8216602284015283901b166032820152909b506042016200a27a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff8916016200a623576040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca86906200a534908a906004016200addf565b606060405180830381865afa1580156200a550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a57691906200c940565b91965090945090506200a58a848c6200cf9b565b9a506200a598858d6200cf9b565b9b506200a5a6818b6200cfc7565b6040517fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b821660208401527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1660308401528e901b166034820152909a5060440160405160208183030381529060405298505b50505050505b96506200a0b8915050565b80515f036200a64e575f975095506200593a945050505050565b60019a909950975050505050505050565b6200a6696200a7ce565b565b6040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015f604051808303815f87803b1580156200a6de575f80fd5b505af115801562007fd6573d5f803e3d5ffd5b5f600282016200a704818486886200c8d0565b6200a70f916200cfe7565b60f01c95945050505050565b5f601082016200a72e818486886200c8d0565b6200a739916200d02e565b60801c95945050505050565b5f8383838181106200a75b576200a75b6200ba71565b919091013560f81c95945050505050565b634e487b715f52806020526024601cfd5b5f600482016200a790818486886200c8d0565b6200a79b916200c8f9565b60e01c95945050505050565b5f602082016200a7ba818486886200c8d0565b6200a7c5916200c986565b95945050505050565b6040516200a7dc906200ab25565b604051809103905ff0801580156200a7f6573d5f803e3d5ffd5b50601f60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550565b828054828255905f5260205f209081019282156200a88d579160200282015b828111156200a88d57825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039091161782556020909201916001909101906200a83e565b506200a89b9291506200ab33565b5090565b828054828255905f5260205f20906007016008900481019282156200a88d579160200282015f5b838211156200a90c57835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026200a8c6565b80156200a93e5782816101000a81549063ffffffff02191690556004016020816003010492830192600103026200a90c565b50506200a89b9291506200ab33565b615fc2806200d07683390190565b616193806201303883390190565b61196d80620191cb83390190565b615881806201ab3883390190565b612b7c80620203b983390190565b615cb28062022f3583390190565b613af98062028be783390190565b611b50806202c6e083390190565b614aae806202e23083390190565b6124708062032cde83390190565b60405180604001604052805f63ffffffff1681526020016200aa396040518060c001604052805f67ffffffffffffffff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b905290565b60405180604001604052805f63ffffffff1681526020016200aa3960405180604001604052805f63ffffffff1681526020015f6001600160a01b031681525090565b60405180604001604052805f63ffffffff1681526020016200aa396040518060c001604052805f6001600160a01b031681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b611e15806203514e83390190565b613f7b8062036f6383390190565b611b1c806203aede83390190565b61355f806203c9fa83390190565b6124be806203ff5983390190565b610aa9806204241783390190565b5b808211156200a89b575f81556001016200ab34565b63ffffffff81168114620044a3575f80fd5b6001600160a01b0381168114620044a3575f80fd5b5f80604083850312156200ab82575f80fd5b82356200ab8f816200ab49565b915060208301356200aba1816200ab5b565b809150509250929050565b5f8083601f8401126200abbd575f80fd5b50813567ffffffffffffffff8111156200abd5575f80fd5b6020830191508360208285010111156200593a575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156200ac40576200ac406200abed565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156200ac72576200ac726200abed565b604052919050565b5f67ffffffffffffffff8211156200ac96576200ac966200abed565b50601f01601f191660200190565b5f82601f8301126200acb4575f80fd5b81356200accb6200acc5826200ac7a565b6200ac46565b8181528460208386010111156200ace0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80606085870312156200ad10575f80fd5b843567ffffffffffffffff808211156200ad28575f80fd5b6200ad36888389016200abac565b909650945060208701359150808211156200ad4f575f80fd5b6200ad5d888389016200aca4565b935060408701359150808211156200ad73575f80fd5b506200ad82878288016200aca4565b91505092959194509250565b5f5b838110156200adaa5781810151838201526020016200ad90565b50505f910152565b5f81518084526200adcb8160208601602086016200ad8e565b601f01601f19169290920160200192915050565b602081525f62001b3660208301846200adb2565b60ff81168114620044a3575f80fd5b8035600281106200ae11575f80fd5b919050565b5f80604083850312156200ae28575f80fd5b82356200ae35816200adf3565b915062009d7b602084016200ae02565b5f815180845260208085019450602084015f5b838110156200ae7f5781516001600160a01b0316875295820195908201906001016200ae58565b509495945050505050565b602081525f62001b3660208301846200ae45565b5f805f606084860312156200aeb1575f80fd5b833567ffffffffffffffff8111156200aec8575f80fd5b6200aed6868287016200aca4565b93505060208401356200aee9816200adf3565b915060408401356200aefb816200adf3565b809150509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b848110156200af5557601f198684030189526200af428383516200adb2565b988401989250908301906001016200af23565b5090979650505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200aff3578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b031684528701518784018790526200afdf878501826200af06565b95880195935050908601906001016200af89565b509098975050505050505050565b5f805f805f805f60c0888a0312156200b018575f80fd5b87356200b025816200ab49565b965060208801356200b037816200ab5b565b9550604088013567ffffffffffffffff808211156200b054575f80fd5b6200b0628b838c016200aca4565b965060608a0135955060808a013591506200b07d826200ab5b565b90935060a089013590808211156200b093575f80fd5b506200b0a28a828b016200abac565b989b979a50959850939692959293505050565b5f80602083850312156200b0c7575f80fd5b823567ffffffffffffffff8111156200b0de575f80fd5b6200b0ec858286016200abac565b90969095509350505050565b61ffff81168114620044a3575f80fd5b5f80604083850312156200b11a575f80fd5b82356200b127816200b0f8565b946020939093013593505050565b5f805f604084860312156200b148575f80fd5b833567ffffffffffffffff808211156200b160575f80fd5b6200b16e878388016200abac565b909550935060208601359150808211156200b187575f80fd5b506200b196868287016200aca4565b9150509250925092565b5f67ffffffffffffffff8211156200b1bc576200b1bc6200abed565b5060051b60200190565b5f82601f8301126200b1d6575f80fd5b813560206200b1e96200acc5836200b1a0565b8083825260208201915060208460051b8701019350868411156200b20b575f80fd5b602086015b848110156200b2345780356200b226816200ab5b565b83529183019183016200b210565b509695505050505050565b5f80604083850312156200b251575f80fd5b823567ffffffffffffffff808211156200b269575f80fd5b6200b277868387016200b1c6565b93506020915081850135818111156200b28e575f80fd5b85019050601f810186136200b2a1575f80fd5b80356200b2b26200acc5826200b1a0565b81815260059190911b820183019083810190888311156200b2d1575f80fd5b928401925b828410156200b2fc5783356200b2ec816200ab49565b825292840192908401906200b2d6565b80955050505050509250929050565b5f815180845260208085019450602084015f5b838110156200ae7f5781517fffffffff0000000000000000000000000000000000000000000000000000000016875295820195908201906001016200b31e565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200aff3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815180518785526200b3ca888601826200adb2565b91890151858303868b01529190506200b3e481836200b30b565b9689019694505050908601906001016200b385565b5f805f604084860312156200b40c575f80fd5b833567ffffffffffffffff8111156200b423575f80fd5b6200b431868287016200abac565b909790965060209590950135949350505050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b60ff85168152606060208201525f6200b48c6060830185876200b445565b905082604083015295945050505050565b5f602082840312156200b4ae575f80fd5b813567ffffffffffffffff8111156200b4c5575f80fd5b6200b4d3848285016200b1c6565b949350505050565b5f805f805f60a086880312156200b4f0575f80fd5b85356200b4fd816200ab49565b9450602086013593506040860135925060608601356200b51d816200ab5b565b9150608086013567ffffffffffffffff8111156200b539575f80fd5b6200b547888289016200aca4565b9150509295509295909350565b602081525f62001b3660208301846200af06565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200aff3578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b031684528701518784018790526200b5e5878501826200b30b565b95880195935050908601906001016200b58f565b5f805f805f608086880312156200b60e575f80fd5b853567ffffffffffffffff808211156200b626575f80fd5b6200b63489838a016200abac565b909750955060208801359150808211156200b64d575f80fd5b506200b65c888289016200aca4565b9350506040860135915060608601356200b676816200ab5b565b809150509295509295909350565b5f602082840312156200b695575f80fd5b813562001b36816200ab5b565b5f80604083850312156200b6b4575f80fd5b82356200b127816200ab49565b5f805f606084860312156200b6d4575f80fd5b83356200b6e1816200adf3565b92506200b6f1602085016200ae02565b9150604084013567ffffffffffffffff8111156200b70d575f80fd5b6200b196868287016200b1c6565b6fffffffffffffffffffffffffffffffff81168114620044a3575f80fd5b5f602082840312156200b74a575f80fd5b813562001b36816200b71b565b5f805f80604085870312156200b76b575f80fd5b843567ffffffffffffffff808211156200b783575f80fd5b6200b791888389016200abac565b909650945060208701359150808211156200b7aa575f80fd5b506200b7b9878288016200abac565b95989497509550505050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526200b80960e08501826200adb2565b905060a083015184820360a08601526200b82482826200adb2565b91505060c083015184820360c08601526200a7c582826200adb2565b5f6001600160a01b038087168352808616602084015250836040830152608060608301526200b87360808301846200b7c5565b9695505050505050565b5f604082840312156200b88e575f80fd5b6040516040810181811067ffffffffffffffff821117156200b8b4576200b8b46200abed565b604052825181526020928301519281019290925250919050565b805180151581146200ae11575f80fd5b5f602082840312156200b8ef575f80fd5b62001b36826200b8ce565b838152606060208201525f6200b91460608301856200b7c5565b90506001600160a01b0383166040830152949350505050565b5f602082840312156200b93e575f80fd5b5051919050565b855163ffffffff1681526020808701519082015260408087015167ffffffffffffffff16908201526001600160a01b038516606082015283608082015260e060a08201525f6200b99960e08301856200adb2565b82810360c08401526200b9ad81856200adb2565b98975050505050505050565b600181811c908216806200b9ce57607f821691505b6020821081036200ba06577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff81811683821601908111156200246857620024686200ba0c565b60ff82811682821603908111156200246857620024686200ba0c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6001600160a01b03808a16835280891660208401525086604083015261ffff8616606083015260c060808301526200badc60c0830185876200b445565b82810360a08401526200baf081856200adb2565b9a9950505050505050505050565b80516200ae11816200ab5b565b5f80604083850312156200bb1d575f80fd5b82516200bb2a816200ab5b565b915062009d7b602084016200b8ce565b805167ffffffffffffffff811681146200ae11575f80fd5b80516200ae11816200adf3565b5f805f606084860312156200bb72575f80fd5b6200bb7d846200bb3a565b925060208401516200bb8f816200adf3565b60408501519092506200aefb816200adf3565b5f82601f8301126200bbb2575f80fd5b81516200bbc36200acc5826200ac7a565b8181528460208386010111156200bbd8575f80fd5b6200b4d38260208301602087016200ad8e565b5f602082840312156200bbfc575f80fd5b815167ffffffffffffffff8111156200bc13575f80fd5b6200b4d3848285016200bba2565b5f82601f8301126200bc31575f80fd5b815160206200bc446200acc5836200b1a0565b8083825260208201915060208460051b8701019350868411156200bc66575f80fd5b602086015b848110156200b2345780516200bc81816200ab5b565b83529183019183016200bc6b565b5f602082840312156200bca0575f80fd5b815167ffffffffffffffff808211156200bcb8575f80fd5b9083019060c082860312156200bccc575f80fd5b6200bcd66200ac1a565b6200bce1836200bb3a565b81526200bcf1602084016200bb52565b60208201526200bd04604084016200bb52565b60408201526200bd17606084016200bb52565b60608201526080830151828111156200bd2e575f80fd5b6200bd3c878286016200bc21565b60808301525060a0830151828111156200bd54575f80fd5b6200bd62878286016200bc21565b60a08301525095945050505050565b818382375f9101908152919050565b606081525f6200bd9460608301866200adb2565b905083602083015260ff83166040830152949350505050565b808201808211156200246857620024686200ba0c565b63ffffffff851681526001600160a01b0384166020820152608060408201525f6200bdf260808301856200adb2565b905082606083015295945050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200aff3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160a063ffffffff82511685526001600160a01b038983015116898601528782015181898701526200be90828701826200adb2565b9150506060808301518187015250608080830151925085820381870152506200beba81836200adb2565b9689019694505050908601906001016200be2a565b604081525f6200bee360408301856200adb2565b90508260208301529392505050565b5f602082840312156200bf03575f80fd5b815167ffffffffffffffff808211156200bf1b575f80fd5b9083019060c082860312156200bf2f575f80fd5b6200bf396200ac1a565b6200bce1836200bafe565b8281525f82516200bf5d8160208501602087016200ad8e565b919091016020019392505050565b606081525f6200bf7f60608301866200adb2565b60208301949094525060400152919050565b602081525f6200b4d36020830184866200b445565b5f602082840312156200bfb7575f80fd5b815162001b36816200ab5b565b5f602082840312156200bfd5575f80fd5b815162001b36816200ab49565b5f816200bff3576200bff36200ba0c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b604081525f6200c02d60408301856200adb2565b82810360208401526200a7c581856200adb2565b606081525f6200c05560608301866200adb2565b82810360208401526200c06981866200adb2565b905082810360408401526200b87381856200adb2565b608081525f6200c09360808301876200adb2565b82810360208401526200c0a781876200adb2565b9150508360408301526001600160a01b038316606083015295945050505050565b63ffffffff881681525f6001600160a01b03808916602084015260c060408401526200c0f860c08401896200adb2565b876060850152818716608085015283810360a08501526200c11b8186886200b445565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f6001600160a01b038089168352808816602084015260c060408401526200c18360c08401886200ae45565b8187166060850152818616608085015283810360a08501526200baf081866200ae45565b63ffffffff881681525f602060ff8916602084015260e060408401526200c1d260e08401896200ae45565b6001600160a01b038881166060860152848203608086015287548083525f8981526020808220940191905b818110156200c21d5784548416835260019485019492860192016200c1fd565b505067ffffffffffffffff881660a087015285810360c08701526200c24381886200ae45565b9d9c50505050505050505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200aff3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff168552880151888501889052805167ffffffffffffffff16888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200c31d6101008801836200ae45565b920151868303840160e08801529190506200c33981836200ae45565b978a01979550505091870191506001016200c27b565b602080825282518282018190525f919060409081850190868401855b828110156200c3b2578151805163ffffffff9081168652908701518051909116878601528601516001600160a01b031685850152606090930192908501906001016200c36b565b5091979650505050505050565b5f602082840312156200c3d0575f80fd5b815162001b36816200b71b565b6fffffffffffffffffffffffffffffffff8181168382160280821691908281146200c40c576200c40c6200ba0c565b505092915050565b602080825282518282018190525f919060409081850190868401855b828110156200c3b2578151805163ffffffff90811686529087015180516fffffffffffffffffffffffffffffffff16888701528088015167ffffffffffffffff1687870152860151166060850152608090930192908501906001016200c430565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200aff3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff16855288015188850188905280516001600160a01b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200c5596101008801836200ae45565b920151868303840160e08801529190506200c57581836200ae45565b978a01979550505091870191506001016200c4b8565b602080825282518282018190525f919060409081850190868401855b828110156200c3b2578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c090930192908501906001016200c5a7565b602080825282518282018190525f919060409081850190868401855b828110156200c3b2578151805163ffffffff1685528681015167ffffffffffffffff16878601528581015161ffff16868601526060908101516fffffffffffffffffffffffffffffffff1690850152608090930192908501906001016200c642565b602080825282518282018190525f919060409081850190868401855b828110156200c3b2578151805163ffffffff1685528601518685015292840192908501906001016200c6c0565b865163ffffffff1681526020808801519082015260408088015167ffffffffffffffff16908201526001600160a01b038616606082015284608082015260e060a08201525f6200c74260e0830185876200b445565b82810360c08401526200c75681856200adb2565b9998505050505050505050565b601f82111562003cf457805f5260205f20601f840160051c810160208510156200c78a5750805b601f840160051c820191505b8181101562002407575f81556001016200c796565b67ffffffffffffffff8311156200c7c6576200c7c66200abed565b6200c7de836200c7d783546200b9b9565b836200c763565b5f601f8411600181146200c831575f85156200c7fa5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b17835562002407565b5f83815260208120601f198716915b828110156200c86257868501358255602094850194600190920191016200c840565b50868210156200c89e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b838152826020820152606060408201525f6200a7c560608301846200adb2565b5f80858511156200c8df575f80fd5b838611156200c8ec575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156200c40c5760049490940360031b84901b1690921692915050565b5f805f606084860312156200c953575f80fd5b83516200c960816200b71b565b60208501519093506200c973816200ab49565b60408501519092506200aefb816200b71b565b8035602083101562002468577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156200c40c5760089490940360031b84901b1690921692915050565b608081525f6200ca4760808301600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200ca8481600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b0380851660408401528084166060840152509392505050565b608081525f6200cae460808301600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200ca8481600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b608081525f6200cb5e60808301600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200ca8481600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b606081525f6200cbd860608301600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200cc1581600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b038316604083015292915050565b608081525f6200cc6a60808301600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200ca8481600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b608081525f6200cce460808301600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200ca8481600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200aff3578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff168885015286015160608785018190526200cda9818601836200adb2565b9689019694505050908601906001016200cd48565b5f82516200cdd18184602087016200ad8e565b9190910192915050565b5f83516200cdee8184602088016200ad8e565b8351908301906200ce048183602088016200ad8e565b01949350505050565b5f805f606084860312156200ce20575f80fd5b83516200ce2d816200b0f8565b60208501519093506200c973816200b71b565b5f805f606084860312156200ce53575f80fd5b83516200ce60816200adf3565b602085015160409095015190969495509392505050565b5f80604083850312156200ce89575f80fd5b82516200ce96816200b71b565b6020939093015192949293505050565b5f80604083850312156200ceb8575f80fd5b82516200cec5816200b71b565b60208401519092506200aba1816200b71b565b5f80604083850312156200ceea575f80fd5b825167ffffffffffffffff808211156200cf02575f80fd5b6200cf10868387016200bba2565b935060208501519150808211156200cf26575f80fd5b506200cf35858286016200bba2565b9150509250929050565b5f805f606084860312156200cf52575f80fd5b83516200cf5f816200adf3565b602085015190935067ffffffffffffffff8111156200cf7c575f80fd5b6200cf8a868287016200bba2565b925050604084015190509250925092565b6fffffffffffffffffffffffffffffffff818116838216019080821115620045b457620045b46200ba0c565b63ffffffff818116838216019080821115620045b457620045b46200ba0c565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156200c40c5760029490940360031b84901b1690921692915050565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156200c40c5760109490940360031b84901b169092169291505056fe60c06040526001600d5534801562000015575f80fd5b5060405162005fc238038062005fc28339810160408190526200003891620002c2565b81816001600160a01b0381166200006957604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007481620000c8565b5063ffffffff166080526040516200008c90620002b4565b604051809103905ff080158015620000a6573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c09062000117565b505062000338565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200012162000284565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200016b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000191919062000310565b620001af5760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001e95760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002b25760405163118cdaa760e01b815233600482015260240162000060565b565b6102818062005d4183390190565b5f8060408385031215620002d4575f80fd5b825163ffffffff81168114620002e8575f80fd5b60208401519092506001600160a01b038116811462000305575f80fd5b809150509250929050565b5f6020828403121562000321575f80fd5b8151801515811462000331575f80fd5b9392505050565b60805160a0516159c46200037d5f395f61078601525f818161054301528181612d7701528181613782015281816137e801528181613f570152613fbd01526159c45ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b73578063ef667aa114610b92578063f2fde38b14610bdb578063f64be4c714610bfa575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b54575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614886565b610c2e565b005b348015610374575f80fd5b5061037d610d41565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c036600461492e565b610d71565b6103d86103d3366004614976565b6110f2565b60405161039d91906149c5565b3480156103f0575f80fd5b506103676103ff366004614a07565b611258565b34801561040f575f80fd5b5061042361041e366004614a72565b611315565b60405161039d9190614b2e565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614b57565b61142b565b34801561049b575f80fd5b506104636104aa366004614bb9565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614bf8565b6115ff565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614b57565b611694565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614c20565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614c39565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614c72565b611841565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614c8b565b61188f565b34801561067e575f80fd5b5061036761068d36600461492e565b611904565b34801561069d575f80fd5b506103676106ac366004614d7f565b611df9565b3480156106bc575f80fd5b506103676106cb366004614e59565b611e63565b3480156106db575f80fd5b5061070e6106ea366004614c72565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614c72565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f31565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004614ee3565b611f44565b3480156107ea575f80fd5b506106446107f9366004614f30565b612047565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120b2565b60405161039d9190614f59565b610367610849366004614fa5565b612112565b348015610859575f80fd5b50610367610868366004615049565b6122ce565b348015610878575f80fd5b5061060c610887366004614c39565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd366004615049565b6125c0565b3480156108dd575f80fd5b5061060c6108ec366004614c39565b612694565b3480156108fc575f80fd5b5061036761090b366004615089565b61272b565b34801561091b575f80fd5b5061036761092a3660046150b2565b612b2a565b34801561093a575f80fd5b506103676109493660046150cd565b612b42565b348015610959575f80fd5b50610463610968366004614c39565b612cd8565b348015610978575f80fd5b50610367610987366004615107565b612de6565b348015610997575f80fd5b506105ae6109a6366004614bf8565b61309d565b3480156109b6575f80fd5b506103676109c5366004614c20565b613123565b3480156109d5575f80fd5b506106446109e4366004614f30565b613198565b3480156109f4575f80fd5b50610463610a03366004615121565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614c20565b6131fc565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a366004615089565b613273565b348015610a8a575f80fd5b50610367610a99366004615121565b61356e565b348015610aa9575f80fd5b50610644610ab8366004614c20565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614bf8565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614976565b613690565b60405161039d9190615160565b348015610b4d575f80fd5b505f6105ae565b348015610b5f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b7e575f80fd5b50610367610b8d366004614c20565b6139b1565b348015610b9d575f80fd5b5061070e610bac366004614bf8565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610be6575f80fd5b50610367610bf5366004614c20565b613bab565b348015610c05575f80fd5b506105ae610c14366004614c72565b60096020525f90815260409020546001600160a01b031681565b610c7d86610c3f60208a018a614c72565b60208a0135610c5460608c0160408d01615177565b898989604051602001610c6993929190615190565b604051602081830303815290604052613c01565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cd1908b908a908a908a9033908b908b9060040161522a565b5f604051808303818588803b158015610ce8575f80fd5b505af1158015610cfa573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d30929190615280565b60405180910390a150505050505050565b5f80610d50600d546001141590565b610d5b575f80610d69565b610d69600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610dc4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e7d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3591906152d1565b6002811115610e4657610e466152a4565b03610e7d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f49576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610eef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1391906152fc565b610f49576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f5288613e3f565b5f610f5d89896115ff565b9150508015610f98576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03610ff6576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001015561108c565b43861161102f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b6110fa6147d8565b6111076020840184614c72565b336001600d5414611144576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d5561118390860160808701615317565b80156111985750600e546001600160a01b0316155b156111cf576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111db3388613ea8565b915091505f6111e73490565b90505f6112026111fd60a08b0160808c01615317565b614180565b90506112138460400151838361424a565b600e54604085015160200151611235916001600160a01b03169083868c6142b1565b6040840151516112479083858b6142de565b50506001600d555095945050505050565b61126185613e3f565b5f83838360405160200161127793929190615190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112d3866112b86020880188614c72565b60208801356112cd60608a0160408b01615177565b85613c01565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611305929190615280565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661136b576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113dc573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261142191908101906153f8565b9695505050505050565b61143485613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114bf576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061150b575080155b1561154e576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611305565b6001600160a01b038083165f90815260076020908152604080832063ffffffff86168452909152812054909116908161168d5763ffffffff83165f908152600a60205260409020546001600160a01b0316915081611689576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b61169d85613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611723576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114b6565b80158061176d57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117b0576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611305565b63ffffffff81165f908152600960205260408120546001600160a01b031615801590611889575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516118ee9a9998979695949392919061542a565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561193657506001600160a01b03811615155b1561196d576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a26575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119de91906152d1565b60028111156119ef576119ef6152a4565b03611a26576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611af2576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611a98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611abc91906152fc565b611af2576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611afb88613e3f565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b62576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d4f576001600160a01b0381161580611c1c57506001600160a01b038716155b15611c53576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c7a91906154bf565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d41918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611dee565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110df565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e4e9a999897969594939291906154d2565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611eb6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ebf85613e3f565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f0890889087908790600401615530565b5f604051808303815f87803b158015611f1f575f80fd5b505af1158015611dee573d5f803e3d5ffd5b611f39614308565b611f425f61434d565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fb2576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fc292919061567b565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161203891908890889088908890889061568a565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120ab9185918591859061207690850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166143b4565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561210857602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116120ea575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161215c908790879061567b565b604051809103902090508082146121a9576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114b6565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612230908e908d908c908c9033908d908d906004016156d2565b5f604051808303818588803b158015612247575f80fd5b505af1158015612259573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122ba94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561230057506001600160a01b03811615155b15612337576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b038116156123f1576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612385573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a991906152d1565b60028111156123ba576123ba6152a4565b036123f1576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124bd576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248791906152fc565b6124bd576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c687613e3f565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361252c576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d30565b5f805f6125cd86866115ff565b91509150816001600160a01b0316846001600160a01b0316036125f5576001925050506120ab565b5f81612628576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061263d565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126775750438160200151115b1561268857600193505050506120ab565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612723576001016126d0565b949350505050565b612733614308565b6001600160a01b0382165f90815260056020526040902054829060ff16612786576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561283f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f791906152d1565b6002811115612808576128086152a4565b0361283f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561290b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d591906152fc565b61290b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612966576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612a965763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a3b87436154bf565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b20565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b32614308565b612b3d83838361444c565b505050565b612b5982612b536020860186614c72565b336125c0565b612b8f576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bb790870187614c72565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612bf48484836143b4565b612c2a576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c3584848361446f565b612c6b576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c9783612c7c6020870187614c72565b6020870135612c916060890160408a01615177565b86614528565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612cca93929190615725565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d209067ffffffffffffffff16600161574d565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612dee614308565b6001600160a01b0381165f90815260056020526040902054819060ff16612e41576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612efb576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb391906152d1565b6002811115612ec457612ec46152a4565b03612efb576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fc7576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906152fc565b612fc7576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613020576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611305565b6001600160a01b038083165f90815260066020908152604080832063ffffffff861684529091529020541680611889575063ffffffff81165f908152600960205260409020546001600160a01b031680611889576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61312b614308565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b0381165f90815260016020908152604082206120ab918591859185906131c790850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff1661446f565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981910161318d565b6001600160a01b0382165f90815260056020526040902054829060ff166132c6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561337f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613313573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333791906152d1565b6002811115613348576133486152a4565b0361337f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561344b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156133f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061341591906152fc565b61344b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613453614308565b845f0361349d5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613522565b4385116134d6576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d30565b61357784613e3f565b613582848484612694565b61358d90600161574d565b67ffffffffffffffff168167ffffffffffffffff16146135e5576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612cca565b604080518082019091525f80825260208201526136b360a0840160808501615317565b80156136c85750600e546001600160a01b0316155b156136ff576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061372790870187614c72565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137629067ffffffffffffffff16600161574d565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137cd9190614c72565b63ffffffff168152602001866020013581526020016138c7847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061381a9190614c72565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b81526020016138d9604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139259050856109a66020890189614c72565b90506001600160a01b03811663d80e9bd98361394460608a018a61576e565b61395460a08c0160808d01615317565b6040518563ffffffff1660e01b815260040161397394939291906157cf565b6040805180830381865afa15801561398d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142191906158c3565b6139b9614308565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5891906152fc565b613a8e576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613ae0576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161318d565b613bb3614308565b6001600160a01b038116613bf5576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114b6565b613bfe8161434d565b50565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d5957600181015b8467ffffffffffffffff168167ffffffffffffffff1611613cf5576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613ced576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b600101613c4d565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613dec576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114b6565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613e7157506001600160a01b038181165f908152600f6020526040902054163314155b15613bfe576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613eb06147d8565b5f80613f3785613ec36020870187614c72565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fa29190614c72565b63ffffffff16815260200186602001358152602001613fef847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061381a9190614c72565b8152602001614001604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061404d9050876109a66020890189614c72565b90505f806001600160a01b038316634389e58f8561406e60608c018c61576e565b61407e60a08e0160808f01615317565b6040518563ffffffff1660e01b815260040161409d94939291906157cf565b5f604051808303815f875af11580156140b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526140fd91908101906158dd565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161413160608b018b61576e565b866040516141429493929190615929565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b5f811561424557600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156141e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061420a9190615969565b9050805f03614245576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b825182108061425c5750808360200151115b15612b3d57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114b6565b83156142c2576142c28583866145a7565b828410156142d7576142d785828686036145a7565b5050505050565b83156142ee576142ee82856145fb565b8284101561430257614302818585036145fb565b50505050565b5f546001600160a01b03163314611f42576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114b6565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061272357506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d9061440d908790600401615980565b602060405180830381865afa158015614428573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272391906152fc565b6001600160a01b03831661446457612b3d82826145fb565b612b3d8383836145a7565b5f67ffffffffffffffff821661448b6060860160408701615177565b67ffffffffffffffff16118061272357506001600160a01b0383165f90815260026020908152604082209082906144c490880188614c72565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f8660400160208101906145049190615177565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b8061455f576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6001600160a01b0382166145e7576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b3d6001600160a01b03841683836146d6565b6001600160a01b03821661463b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614684576040519150601f19603f3d011682016040523d82523d5f602084013e614689565b606091505b5050905080612b3d576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114b6565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b3d93879390925f9283929183919082885af180614772576040513d5f823e3d81fd5b50505f513d91508115614789578060011415614796565b6001600160a01b0384163b155b15614302576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114b6565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161481760405180604001604052805f81526020015f81525090565b905290565b5f6060828403121561482c575f80fd5b50919050565b80356001600160a01b0381168114614245575f80fd5b5f8083601f840112614858575f80fd5b50813567ffffffffffffffff81111561486f575f80fd5b60208301915083602082850101111561168d575f80fd5b5f805f805f805f60e0888a03121561489c575f80fd5b6148a6898961481c565b96506148b460608901614832565b95506080880135945060a088013567ffffffffffffffff808211156148d7575f80fd5b6148e38b838c01614848565b909650945060c08a01359150808211156148fb575f80fd5b506149088a828b01614848565b989b979a50959850939692959293505050565b803563ffffffff81168114614245575f80fd5b5f805f8060808587031215614941575f80fd5b61494a85614832565b93506149586020860161491b565b925061496660408601614832565b9396929550929360600135925050565b5f8060408385031215614987575f80fd5b823567ffffffffffffffff81111561499d575f80fd5b830160a081860312156149ae575f80fd5b91506149bc60208401614832565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614a00604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614a1b575f80fd5b614a2486614832565b9450614a33876020880161481c565b93506080860135925060a086013567ffffffffffffffff811115614a55575f80fd5b614a6188828901614848565b969995985093965092949392505050565b5f805f8060808587031215614a85575f80fd5b614a8e85614832565b9350614a9c60208601614832565b9250614aaa6040860161491b565b9150614ab86060860161491b565b905092959194509250565b5f5b83811015614add578181015183820152602001614ac5565b50505f910152565b5f8151808452614afc816020860160208601614ac3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120ab6020830184614ae5565b803567ffffffffffffffff81168114614245575f80fd5b5f805f805f60a08688031215614b6b575f80fd5b614b7486614832565b9450614b826020870161491b565b935060408601359250614b9760608701614b40565b949793965091946080013592915050565b803561ffff81168114614245575f80fd5b5f805f8060808587031215614bcc575f80fd5b614bd585614832565b9350614be360208601614832565b925060408501359150614ab860608601614ba8565b5f8060408385031215614c09575f80fd5b614c1283614832565b91506149bc6020840161491b565b5f60208284031215614c30575f80fd5b6120ab82614832565b5f805f60608486031215614c4b575f80fd5b614c5484614832565b9250614c626020850161491b565b9150604084013590509250925092565b5f60208284031215614c82575f80fd5b6120ab8261491b565b5f805f805f805f805f805f806101208d8f031215614ca7575f80fd5b614cb08d614832565b9b50614cbe60208e01614832565b9a5060408d01359950614cd360608e01614ba8565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614cfb575f80fd5b614d0b8e60c08f01358f01614848565b909650945067ffffffffffffffff60e08e01351115614d28575f80fd5b614d388e60e08f01358f01614848565b909450925067ffffffffffffffff6101008e01351115614d56575f80fd5b614d678e6101008f01358f01614848565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614d9a575f80fd5b614da48d8d61481c565b9a50614db260608d01614832565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614de2575f80fd5b614df28e60e08f01358f01614848565b90975095506101008d0135811015614e08575f80fd5b614e198e6101008f01358f01614848565b90955093506101208d0135811015614e2f575f80fd5b50614e418d6101208e01358e01614848565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614e6c575f80fd5b614e7585614832565b9350614e8360208601614832565b9250604085013567ffffffffffffffff80821115614e9f575f80fd5b818701915087601f830112614eb2575f80fd5b813581811115614ec0575f80fd5b8860208260051b8501011115614ed4575f80fd5b95989497505060200194505050565b5f805f805f60808688031215614ef7575f80fd5b614f0086614832565b945060208601359350614f1560408701614ba8565b9250606086013567ffffffffffffffff811115614a55575f80fd5b5f8060808385031215614f41575f80fd5b614f4b848461481c565b91506149bc60608401614832565b602080825282518282018190525f9190848201906040850190845b81811015614f995783516001600160a01b031683529284019291840191600101614f74565b50909695505050505050565b5f805f805f805f8060c0898b031215614fbc575f80fd5b614fc589614832565b9750614fd360208a01614832565b965060408901359550614fe860608a01614ba8565b9450608089013567ffffffffffffffff80821115615004575f80fd5b6150108c838d01614848565b909650945060a08b0135915080821115615028575f80fd5b506150358b828c01614848565b999c989b5096995094979396929594505050565b5f805f6060848603121561505b575f80fd5b61506484614832565b92506150726020850161491b565b915061508060408501614832565b90509250925092565b5f805f6060848603121561509b575f80fd5b6150a48461491b565b9250614c6260208501614832565b5f805f606084860312156150c4575f80fd5b6150a484614832565b5f805f60a084860312156150df575f80fd5b6150e9858561481c565b92506150f760608501614832565b9150608084013590509250925092565b5f8060408385031215615118575f80fd5b6149ae8361491b565b5f805f8060808587031215615134575f80fd5b61513d85614832565b935061514b6020860161491b565b925060408501359150614ab860608601614b40565b815181526020808301519082015260408101611889565b5f60208284031215615187575f80fd5b6120ab82614b40565b838152818360208301375f910160200190815292915050565b63ffffffff6151b78261491b565b1682526020810135602083015267ffffffffffffffff6151d960408301614b40565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b61523481896151a9565b86606082015260e060808201525f61525060e0830187896151e3565b6001600160a01b03861660a084015282810360c08401526152728185876151e3565b9a9950505050505050505050565b6080810161528e82856151a9565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f602082840312156152e1575f80fd5b8151600381106120ab575f80fd5b8015158114613bfe575f80fd5b5f6020828403121561530c575f80fd5b81516120ab816152ef565b5f60208284031215615327575f80fd5b81356120ab816152ef565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011261536e575f80fd5b815167ffffffffffffffff8082111561538957615389615332565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156153cf576153cf615332565b816040528381528660208588010111156153e7575f80fd5b611421846020830160208901614ac3565b5f60208284031215615408575f80fd5b815167ffffffffffffffff81111561541e575f80fd5b6127238482850161535f565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f61545960e08301888a6151e3565b82810360a084015261546c8187896151e3565b905082810360c08401526154818185876151e3565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561188957611889615492565b5f6101206154e0838e6151a9565b8b60608401528a60808401528960a08401528060c0840152615505818401898b6151e3565b905082810360e084015261551a8187896151e3565b90508281036101008401526154818185876151e3565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b8981101561566b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c36030181126155c4575f80fd5b8b0163ffffffff806155d58361491b565b168552806155e488840161491b565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811261561d575f80fd5b01858101903567ffffffffffffffff811115615637575f80fd5b803603821315615645575f80fd5b878986015261565788860182846151e3565b958701959450505090840190600101615564565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a060808301526156c660a0830184866151e3565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a060408401526156fb60a08401888a6151e3565b818716606085015283810360808501526157168186886151e3565b9b9a5050505050505050505050565b60a0810161573382866151a9565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614a0057614a00615492565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126157a1575f80fd5b83018035915067ffffffffffffffff8211156157bb575f80fd5b60200191503681900382131561168d575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f606086015161581f60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152615850610140840182614ae5565b905082810360208401526158658186886151e3565b915050612ddd604083018415159052565b5f60408284031215615886575f80fd5b6040516040810181811067ffffffffffffffff821117156158a9576158a9615332565b604052825181526020928301519281019290925250919050565b5f604082840312156158d3575f80fd5b6120ab8383615876565b5f80606083850312156158ee575f80fd5b6158f88484615876565b9150604083015167ffffffffffffffff811115615913575f80fd5b61591f8582860161535f565b9150509250929050565b606081525f61593b6060830187614ae5565b828103602084015261594e8186886151e3565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615979575f80fd5b5051919050565b6060810161188982846151a956fea2646970667358221220938f9466c98d432f294c8fa92afa649818bd8c0b591d10b7b71b464300e2a18764736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c6343000816003360e06040526001600d5534801562000015575f80fd5b5060405162006193380380620061938339810160408190526200003891620002ef565b828281816001600160a01b0381166200006b57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007681620000d9565b5063ffffffff166080526040516200008e90620002c5565b604051809103905ff080158015620000a8573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c29062000128565b50506001600160a01b031660c05250620003679050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200013262000295565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200017c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a291906200033f565b620001c05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001fa5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002c35760405163118cdaa760e01b815233600482015260240162000062565b565b6102818062005f1283390190565b80516001600160a01b0381168114620002ea575f80fd5b919050565b5f805f6060848603121562000302575f80fd5b835163ffffffff8116811462000316575f80fd5b92506200032660208501620002d3565b91506200033660408501620002d3565b90509250925092565b5f6020828403121562000350575f80fd5b8151801515811462000360575f80fd5b9392505050565b60805160a05160c051615b48620003ca5f395f8181610b500152818161314e015281816141df01526143f001525f61078601525f818161054301528181612d98015281816137b40152818161381a01528181613f860152613fec0152615b485ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b93578063ef667aa114610bb2578063f2fde38b14610bfb578063f64be4c714610c1a575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b74575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614a0a565b610c4e565b005b348015610374575f80fd5b5061037d610d61565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c0366004614ab2565b610d91565b6103d86103d3366004614afa565b611112565b60405161039d9190614b49565b3480156103f0575f80fd5b506103676103ff366004614b8b565b611279565b34801561040f575f80fd5b5061042361041e366004614bf6565b611336565b60405161039d9190614cb2565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614cdb565b61144c565b34801561049b575f80fd5b506104636104aa366004614d3d565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614d7c565b611620565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614cdb565b6116b5565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614da4565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614dbd565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614df6565b611862565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614e0f565b6118b0565b34801561067e575f80fd5b5061036761068d366004614ab2565b611925565b34801561069d575f80fd5b506103676106ac366004614f03565b611e1a565b3480156106bc575f80fd5b506103676106cb366004614fdd565b611e84565b3480156106db575f80fd5b5061070e6106ea366004614df6565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614df6565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f52565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004615067565b611f65565b3480156107ea575f80fd5b506106446107f93660046150b4565b612068565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120d3565b60405161039d91906150dd565b610367610849366004615129565b612133565b348015610859575f80fd5b506103676108683660046151cd565b6122ef565b348015610878575f80fd5b5061060c610887366004614dbd565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd3660046151cd565b6125e1565b3480156108dd575f80fd5b5061060c6108ec366004614dbd565b6126b5565b3480156108fc575f80fd5b5061036761090b36600461520d565b61274c565b34801561091b575f80fd5b5061036761092a366004615236565b612b4b565b34801561093a575f80fd5b50610367610949366004615251565b612b63565b348015610959575f80fd5b50610463610968366004614dbd565b612cf9565b348015610978575f80fd5b5061036761098736600461528b565b612e07565b348015610997575f80fd5b506105ae6109a6366004614d7c565b6130be565b3480156109b6575f80fd5b506103676109c5366004614da4565b613144565b3480156109d5575f80fd5b506106446109e43660046150b4565b6131c3565b3480156109f4575f80fd5b50610463610a033660046152a5565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614da4565b613227565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a36600461520d565b6132a5565b348015610a8a575f80fd5b50610367610a993660046152a5565b6135a0565b348015610aa9575f80fd5b50610644610ab8366004614da4565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614d7c565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614afa565b6136c2565b60405161039d91906152e4565b348015610b4d575f80fd5b507f00000000000000000000000000000000000000000000000000000000000000006105ae565b348015610b7f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b9e575f80fd5b50610367610bad366004614da4565b6139e3565b348015610bbd575f80fd5b5061070e610bcc366004614d7c565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c06575f80fd5b50610367610c15366004614da4565b613bdd565b348015610c25575f80fd5b506105ae610c34366004614df6565b60096020525f90815260409020546001600160a01b031681565b610c9d86610c5f60208a018a614df6565b60208a0135610c7460608c0160408d016152fb565b898989604051602001610c8993929190615314565b604051602081830303815290604052613c30565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cf1908b908a908a908a9033908b908b906004016153ae565b5f604051808303818588803b158015610d08575f80fd5b505af1158015610d1a573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d50929190615404565b60405180910390a150505050505050565b5f80610d70600d546001141590565b610d7b575f80610d89565b610d89600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610de4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e9d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e559190615455565b6002811115610e6657610e66615428565b03610e9d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f69576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610f0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f339190615480565b610f69576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f7288613e6e565b5f610f7d8989611620565b9150508015610fb8576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03611016576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600101556110ac565b43861161104f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b61111a61495c565b6111276020840184614df6565b336001600d5414611164576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d556111a39086016080870161549b565b80156111b85750600e546001600160a01b0316155b156111ef576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111fb3388613ed7565b915091505f6112086141af565b90505f61122361121e60a08b0160808c0161549b565b614255565b90506112348460400151838361431f565b600e54604085015160200151611256916001600160a01b03169083868c614386565b6040840151516112689083858b6143b3565b50506001600d555095945050505050565b61128285613e6e565b5f83838360405160200161129893929190615314565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112f4866112d96020880188614df6565b60208801356112ee60608a0160408b016152fb565b85613c30565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611326929190615404565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661138c576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113fd573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611442919081019061557c565b9695505050505050565b61145585613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114e0576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061152c575080155b1561156f576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611326565b6001600160a01b038083165f90815260076020908152604080832063ffffffff8616845290915281205490911690816116ae5763ffffffff83165f908152600a60205260409020546001600160a01b03169150816116aa576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b6116be85613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611744576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114d7565b80158061178e57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117d1576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611326565b63ffffffff81165f908152600960205260408120546001600160a01b0316158015906118aa575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d60405161190f9a999897969594939291906155ae565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561195757506001600160a01b03811615155b1561198e576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a47575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ff9190615455565b6002811115611a1057611a10615428565b03611a47576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611b13576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611ab9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611add9190615480565b611b13576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b1c88613e6e565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b83576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d70576001600160a01b0381161580611c3d57506001600160a01b038716155b15611c74576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c9b9190615643565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d62918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611e0f565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110ff565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e6f9a99989796959493929190615656565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611ed7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ee085613e6e565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f29908890879087906004016156b4565b5f604051808303815f87803b158015611f40575f80fd5b505af1158015611e0f573d5f803e3d5ffd5b611f5a61441e565b611f635f614463565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fd3576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fe39291906157ff565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161205991908890889088908890889061580e565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120cc9185918591859061209790850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166144ca565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561212957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161210b575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161217d90879087906157ff565b604051809103902090508082146121ca576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114d7565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612251908e908d908c908c9033908d908d90600401615856565b5f604051808303818588803b158015612268575f80fd5b505af115801561227a573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122db94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561232157506001600160a01b03811615155b15612358576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612412576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ca9190615455565b60028111156123db576123db615428565b03612412576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124de576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612484573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124a89190615480565b6124de576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124e787613e6e565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361254d576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d50565b5f805f6125ee8686611620565b91509150816001600160a01b0316846001600160a01b031603612616576001925050506120cc565b5f81612649576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061265e565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126985750438160200151115b156126a957600193505050506120cc565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612744576001016126f1565b949350505050565b61275461441e565b6001600160a01b0382165f90815260056020526040902054829060ff166127a7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615612860575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128189190615455565b600281111561282957612829615428565b03612860576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561292c576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f69190615480565b61292c576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612987576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612ab75763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a5c8743615643565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b41565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b5361441e565b612b5e838383614562565b505050565b612b7a82612b746020860186614df6565b336125e1565b612bb0576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bd890870187614df6565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612c158484836144ca565b612c4b576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c56848483614585565b612c8c576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cb883612c9d6020870187614df6565b6020870135612cb26060890160408a016152fb565b8661463e565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612ceb939291906158a9565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d419067ffffffffffffffff1660016158d1565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612e0f61441e565b6001600160a01b0381165f90815260056020526040902054819060ff16612e62576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612f1c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed49190615455565b6002811115612ee557612ee5615428565b03612f1c576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fe8576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fb29190615480565b612fe8576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613041576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611326565b6001600160a01b038083165f90815260066020908152604080832063ffffffff8616845290915290205416806118aa575063ffffffff81165f908152600960205260409020546001600160a01b0316806118aa576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61314c61441e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036131b7576040517f10647d0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131c0816146bd565b50565b6001600160a01b0381165f90815260016020908152604082206120cc918591859185906131f290850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff16614585565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d798398191015b60405180910390a150565b6001600160a01b0382165f90815260056020526040902054829060ff166132f8576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b038116156133b1575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133699190615455565b600281111561337a5761337a615428565b036133b1576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561347d576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015613423573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134479190615480565b61347d576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61348561441e565b845f036134cf5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613554565b438511613508576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d50565b6135a984613e6e565b6135b48484846126b5565b6135bf9060016158d1565b67ffffffffffffffff168167ffffffffffffffff1614613617576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612ceb565b604080518082019091525f80825260208201526136e560a084016080850161549b565b80156136fa5750600e546001600160a01b0316155b15613731576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061375990870187614df6565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137949067ffffffffffffffff1660016158d1565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137ff9190614df6565b63ffffffff168152602001866020013581526020016138f9847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061384c9190614df6565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b815260200161390b60408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139579050856109a66020890189614df6565b90506001600160a01b03811663d80e9bd98361397660608a018a6158f2565b61398660a08c0160808d0161549b565b6040518563ffffffff1660e01b81526004016139a59493929190615953565b6040805180830381865afa1580156139bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114429190615a47565b6139eb61441e565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a8a9190615480565b613ac0576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613b12576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161329a565b613be561441e565b6001600160a01b038116613c27576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114d7565b6131c081614463565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d8857600181015b8467ffffffffffffffff168167ffffffffffffffff1611613d24576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613d1c576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b600101613c7c565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613e1b576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114d7565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613ea057506001600160a01b038181165f908152600f6020526040902054163314155b156131c0576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613edf61495c565b5f80613f6685613ef26020870187614df6565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fd19190614df6565b63ffffffff1681526020018660200135815260200161401e847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061384c9190614df6565b815260200161403060408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061407c9050876109a66020890189614df6565b90505f806001600160a01b038316634389e58f8561409d60608c018c6158f2565b6140ad60a08e0160808f0161549b565b6040518563ffffffff1660e01b81526004016140cc9493929190615953565b5f604051808303815f875af11580156140e7573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261412c9190810190615a61565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161416060608b018b6158f2565b866040516141719493929190615aad565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561422c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142509190615aed565b905090565b5f811561431a57600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156142bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142df9190615aed565b9050805f0361431a576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b82518210806143315750808360200151115b15612b5e57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114d7565b83156143975761439785838661472b565b828410156143ac576143ac858286860361472b565b5050505050565b34156143eb576040517f9a317a5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144187f000000000000000000000000000000000000000000000000000000000000000085858585614386565b50505050565b5f546001600160a01b03163314611f63576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114d7565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061274457506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d90614523908790600401615b04565b602060405180830381865afa15801561453e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127449190615480565b6001600160a01b03831661457a57612b5e828261477f565b612b5e83838361472b565b5f67ffffffffffffffff82166145a160608601604087016152fb565b67ffffffffffffffff16118061274457506001600160a01b0383165f90815260026020908152604082209082906145da90880188614df6565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f86604001602081019061461a91906152fb565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b80614675576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6146c561441e565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a623969060200161329a565b6001600160a01b03821661476b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b5e6001600160a01b038416838361485a565b6001600160a01b0382166147bf576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614808576040519150601f19603f3d011682016040523d82523d5f602084013e61480d565b606091505b5050905080612b5e576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114d7565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b5e93879390925f9283929183919082885af1806148f6576040513d5f823e3d81fd5b50505f513d9150811561490d57806001141561491a565b6001600160a01b0384163b155b15614418576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114d7565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161499b60405180604001604052805f81526020015f81525090565b905290565b5f606082840312156149b0575f80fd5b50919050565b80356001600160a01b038116811461431a575f80fd5b5f8083601f8401126149dc575f80fd5b50813567ffffffffffffffff8111156149f3575f80fd5b6020830191508360208285010111156116ae575f80fd5b5f805f805f805f60e0888a031215614a20575f80fd5b614a2a89896149a0565b9650614a38606089016149b6565b95506080880135945060a088013567ffffffffffffffff80821115614a5b575f80fd5b614a678b838c016149cc565b909650945060c08a0135915080821115614a7f575f80fd5b50614a8c8a828b016149cc565b989b979a50959850939692959293505050565b803563ffffffff8116811461431a575f80fd5b5f805f8060808587031215614ac5575f80fd5b614ace856149b6565b9350614adc60208601614a9f565b9250614aea604086016149b6565b9396929550929360600135925050565b5f8060408385031215614b0b575f80fd5b823567ffffffffffffffff811115614b21575f80fd5b830160a08186031215614b32575f80fd5b9150614b40602084016149b6565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614b84604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614b9f575f80fd5b614ba8866149b6565b9450614bb787602088016149a0565b93506080860135925060a086013567ffffffffffffffff811115614bd9575f80fd5b614be5888289016149cc565b969995985093965092949392505050565b5f805f8060808587031215614c09575f80fd5b614c12856149b6565b9350614c20602086016149b6565b9250614c2e60408601614a9f565b9150614c3c60608601614a9f565b905092959194509250565b5f5b83811015614c61578181015183820152602001614c49565b50505f910152565b5f8151808452614c80816020860160208601614c47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120cc6020830184614c69565b803567ffffffffffffffff8116811461431a575f80fd5b5f805f805f60a08688031215614cef575f80fd5b614cf8866149b6565b9450614d0660208701614a9f565b935060408601359250614d1b60608701614cc4565b949793965091946080013592915050565b803561ffff8116811461431a575f80fd5b5f805f8060808587031215614d50575f80fd5b614d59856149b6565b9350614d67602086016149b6565b925060408501359150614c3c60608601614d2c565b5f8060408385031215614d8d575f80fd5b614d96836149b6565b9150614b4060208401614a9f565b5f60208284031215614db4575f80fd5b6120cc826149b6565b5f805f60608486031215614dcf575f80fd5b614dd8846149b6565b9250614de660208501614a9f565b9150604084013590509250925092565b5f60208284031215614e06575f80fd5b6120cc82614a9f565b5f805f805f805f805f805f806101208d8f031215614e2b575f80fd5b614e348d6149b6565b9b50614e4260208e016149b6565b9a5060408d01359950614e5760608e01614d2c565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614e7f575f80fd5b614e8f8e60c08f01358f016149cc565b909650945067ffffffffffffffff60e08e01351115614eac575f80fd5b614ebc8e60e08f01358f016149cc565b909450925067ffffffffffffffff6101008e01351115614eda575f80fd5b614eeb8e6101008f01358f016149cc565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614f1e575f80fd5b614f288d8d6149a0565b9a50614f3660608d016149b6565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614f66575f80fd5b614f768e60e08f01358f016149cc565b90975095506101008d0135811015614f8c575f80fd5b614f9d8e6101008f01358f016149cc565b90955093506101208d0135811015614fb3575f80fd5b50614fc58d6101208e01358e016149cc565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614ff0575f80fd5b614ff9856149b6565b9350615007602086016149b6565b9250604085013567ffffffffffffffff80821115615023575f80fd5b818701915087601f830112615036575f80fd5b813581811115615044575f80fd5b8860208260051b8501011115615058575f80fd5b95989497505060200194505050565b5f805f805f6080868803121561507b575f80fd5b615084866149b6565b94506020860135935061509960408701614d2c565b9250606086013567ffffffffffffffff811115614bd9575f80fd5b5f80608083850312156150c5575f80fd5b6150cf84846149a0565b9150614b40606084016149b6565b602080825282518282018190525f9190848201906040850190845b8181101561511d5783516001600160a01b0316835292840192918401916001016150f8565b50909695505050505050565b5f805f805f805f8060c0898b031215615140575f80fd5b615149896149b6565b975061515760208a016149b6565b96506040890135955061516c60608a01614d2c565b9450608089013567ffffffffffffffff80821115615188575f80fd5b6151948c838d016149cc565b909650945060a08b01359150808211156151ac575f80fd5b506151b98b828c016149cc565b999c989b5096995094979396929594505050565b5f805f606084860312156151df575f80fd5b6151e8846149b6565b92506151f660208501614a9f565b9150615204604085016149b6565b90509250925092565b5f805f6060848603121561521f575f80fd5b61522884614a9f565b9250614de6602085016149b6565b5f805f60608486031215615248575f80fd5b615228846149b6565b5f805f60a08486031215615263575f80fd5b61526d85856149a0565b925061527b606085016149b6565b9150608084013590509250925092565b5f806040838503121561529c575f80fd5b614b3283614a9f565b5f805f80608085870312156152b8575f80fd5b6152c1856149b6565b93506152cf60208601614a9f565b925060408501359150614c3c60608601614cc4565b8151815260208083015190820152604081016118aa565b5f6020828403121561530b575f80fd5b6120cc82614cc4565b838152818360208301375f910160200190815292915050565b63ffffffff61533b82614a9f565b1682526020810135602083015267ffffffffffffffff61535d60408301614cc4565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6153b8818961532d565b86606082015260e060808201525f6153d460e083018789615367565b6001600160a01b03861660a084015282810360c08401526153f6818587615367565b9a9950505050505050505050565b60808101615412828561532d565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60208284031215615465575f80fd5b8151600381106120cc575f80fd5b80151581146131c0575f80fd5b5f60208284031215615490575f80fd5b81516120cc81615473565b5f602082840312156154ab575f80fd5b81356120cc81615473565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126154f2575f80fd5b815167ffffffffffffffff8082111561550d5761550d6154b6565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715615553576155536154b6565b8160405283815286602085880101111561556b575f80fd5b611442846020830160208901614c47565b5f6020828403121561558c575f80fd5b815167ffffffffffffffff8111156155a2575f80fd5b612744848285016154e3565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f6155dd60e08301888a615367565b82810360a08401526155f0818789615367565b905082810360c0840152615605818587615367565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156118aa576118aa615616565b5f610120615664838e61532d565b8b60608401528a60808401528960a08401528060c0840152615689818401898b615367565b905082810360e084015261569e818789615367565b9050828103610100840152615605818587615367565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b898110156157ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c3603018112615748575f80fd5b8b0163ffffffff8061575983614a9f565b16855280615768888401614a9f565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181126157a1575f80fd5b01858101903567ffffffffffffffff8111156157bb575f80fd5b8036038213156157c9575f80fd5b87898601526157db8886018284615367565b9587019594505050908401906001016156e8565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a0608083015261584a60a083018486615367565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a0604084015261587f60a08401888a615367565b8187166060850152838103608085015261589a818688615367565b9b9a5050505050505050505050565b60a081016158b7828661532d565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614b8457614b84615616565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615925575f80fd5b83018035915067ffffffffffffffff82111561593f575f80fd5b6020019150368190038213156116ae575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f60608601516159a360c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e06101208401526159d4610140840182614c69565b905082810360208401526159e9818688615367565b915050612dfe604083018415159052565b5f60408284031215615a0a575f80fd5b6040516040810181811067ffffffffffffffff82111715615a2d57615a2d6154b6565b604052825181526020928301519281019290925250919050565b5f60408284031215615a57575f80fd5b6120cc83836159fa565b5f8060608385031215615a72575f80fd5b615a7c84846159fa565b9150604083015167ffffffffffffffff811115615a97575f80fd5b615aa3858286016154e3565b9150509250929050565b606081525f615abf6060830187614c69565b8281036020840152615ad2818688615367565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615afd575f80fd5b5051919050565b606081016118aa828461532d56fea264697066735822122068baa86dcd9bd8142959c16f23b905a6a20b9dbc18984656c1ecce183a4b190464736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c63430008160033608060405234801561000f575f80fd5b506040516200196d3803806200196d83398101604081905261003091610108565b338061005557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005e816100b9565b506001600160a01b03165f908152600260205260409020805460ff1916600190811790915580546001600160801b03191668056bc75e2d6310000017905560058054602f60801b6001600160801b0391909116179055610135565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610118575f80fd5b81516001600160a01b038116811461012e575f80fd5b9392505050565b61182a80620001435f395ff3fe608060405260043610610178575f3560e01c80638ca2fb08116100d1578063d350ad251161007c578063e0ad121a11610057578063e0ad121a14610607578063f2fde38b146106ba578063fd9be522146106d9575f80fd5b8063d350ad25146104d4578063da26663a146104f3578063dbbb4155146105e8575f80fd5b8063c1723a1d116100ac578063c1723a1d1461045f578063c184032714610472578063cd68b79b14610498575f80fd5b80638ca2fb08146103b55780638da5cb5b146103f357806392807f581461041c575f80fd5b80635d6d7ccb116101315780637bc3c9ab1161010c5780637bc3c9ab146102fa5780637dc438a41461033f57806388a4124c1461035e575f80fd5b80635d6d7ccb146102765780635e280f1114610295578063715018a6146102e6575f80fd5b80633161b7f6116101615780633161b7f6146101d257806336a5beba146101f157806352a7251014610257575f80fd5b806311f2c3431461017c5780632f7cb0b4146101b1575b5f80fd5b348015610187575f80fd5b5061019e61019636600461145a565b5f9392505050565b6040519081526020015b60405180910390f35b3480156101bc575f80fd5b506101d06101cb3660046114a9565b6106f8565b005b3480156101dd575f80fd5b506101d06101ec3660046114c9565b610735565b3480156101fc575f80fd5b506040805180820182525f8082526020918201528151808301835260045467ffffffffffffffff811680835263ffffffff680100000000000000009092048216928401928352845190815291511691810191909152016101a8565b348015610262575f80fd5b506101d061027136600461155b565b610901565b348015610281575f80fd5b506101d06102903660046114a9565b61095e565b3480156102a0575f80fd5b506006546102c19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a8565b3480156102f1575f80fd5b506101d0610a23565b348015610305575f80fd5b506103196103143660046115a5565b610a36565b604080519283526fffffffffffffffffffffffffffffffff9091166020830152016101a8565b34801561034a575f80fd5b506101d06103593660046115c0565b610ad0565b348015610369575f80fd5b5061037d61037836600461145a565b610bd9565b604080519485526fffffffffffffffffffffffffffffffff9384166020860152918316918401919091521660608201526080016101a8565b3480156103c0575f80fd5b506103e36103cf3660046115d6565b60026020525f908152604090205460ff1681565b60405190151581526020016101a8565b3480156103fe575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166102c1565b348015610427575f80fd5b506005546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff90911681526020016101a8565b61037d61046d36600461145a565b610bf9565b34801561047d575f80fd5b506001546fffffffffffffffffffffffffffffffff1661043e565b3480156104a3575f80fd5b5060055461043e9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b3480156104df575f80fd5b506101d06104ee3660046114a9565b610c29565b3480156104fe575f80fd5b506105a461050d3660046115ef565b60408051606080820183525f808352602080840182905292840181905263ffffffff94851681526003835283902083519182018452546fffffffffffffffffffffffffffffffff81168252700100000000000000000000000000000000810467ffffffffffffffff169282019290925278010000000000000000000000000000000000000000000000009091049092169082015290565b6040805182516fffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff16908201529181015163ffffffff16908201526060016101a8565b3480156105f3575f80fd5b506101d06106023660046115d6565b610c74565b348015610612575f80fd5b506105a4610621366004611608565b60408051606080820183525f808352602080840182905292840181905261ffff949094168452600382529282902082519384018352546fffffffffffffffffffffffffffffffff8116845267ffffffffffffffff700100000000000000000000000000000000820416918401919091527801000000000000000000000000000000000000000000000000900463ffffffff169082015290565b3480156106c5575f80fd5b506101d06106d43660046115d6565b610cc3565b3480156106e4575f80fd5b506101d06106f3366004611621565b610d26565b610700610d3c565b600580546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055565b336107545f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146107b757335f9081526002602052604090205460ff166107b7576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156108fc57368383838181106107d4576107d4611649565b6080029190910191506108f390506107ef60208301836115ef565b6108013684900384016020850161168d565b805160208083015160409384015184516060810186526fffffffffffffffffffffffffffffffff948516815267ffffffffffffffff92831681850190815263ffffffff9283168288019081529783165f908152600390955295909320925183549551965194167fffffffffffffffff000000000000000000000000000000000000000000000000909516949094177001000000000000000000000000000000009590911694909402939093177fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000009190921602179055565b506001016107b9565b505050565b610909610d3c565b73ffffffffffffffffffffffffffffffffffffffff919091165f90815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b3361097d5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146109e057335f9081526002602052604090205460ff166109e0576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610a2b610d3c565b610a345f610d8e565b565b5f808461ffff16606e1480610a5057508461ffff1661279f145b80610a6057508461ffff16614eaf145b15610a7d57610a748561ffff168585610e02565b91509150610ac8565b8461ffff16606f1480610a9557508461ffff16612794145b80610aa557508461ffff16614ea4145b15610ab957610a748561ffff168585610f5c565b610a748561ffff168585611104565b935093915050565b33610aef5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610b5257335f9081526002602052604090205460ff16610b52576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b626107ef60208301836115ef565b5f610b7360a083016080840161171c565b90505f610b8660c0840160a085016115ef565b6004805463ffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090921667ffffffffffffffff90941693909317179091555050565b5f805f80610be88787876111d7565b935093509350935093509350935093565b5f80808080610c0c565b60405180910390fd5b610c178888886111d7565b94509450945094505093509350935093565b610c31610d3c565b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610c7c610d3c565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ccb610d3c565b73ffffffffffffffffffffffffffffffffffffffff8116610d1a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610c03565b610d2381610d8e565b50565b610d2e610d3c565b610d3882826112ad565b5050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610a34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c03565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b63ffffffff8381165f90815260036020526040812060045460055492938493849268010000000000000000900490911690606490610e669070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1689611762565b610e7091906117ac565b610e7a9190611762565b82549091505f90610ead907801000000000000000000000000000000000000000000000000900463ffffffff1688611762565b83546004549192505f9167ffffffffffffffff70010000000000000000000000000000000090920482169184918691610ee791168b6117bf565b610ef191906117bf565b610efb91906117bf565b610f059190611762565b60015485549192506fffffffffffffffffffffffffffffffff90811691610f2d911683611762565b610f3791906117ac565b935493996fffffffffffffffffffffffffffffffff9094169850929650505050505050565b5f805f610f68866113af565b63ffffffff8082165f9081526003602052604081208054939450929091610fac91780100000000000000000000000000000000000000000000000090041688611762565b610fb890610c746117bf565b82549091505f90610fe790700100000000000000000000000000000000900467ffffffffffffffff1683611762565b63ffffffff808b165f908152600360205260408120805493945092909161102b9178010000000000000000000000000000000000000000000000009004168b611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661105a8b846117bf565b6110649190611762565b60015487549192505f916fffffffffffffffffffffffffffffffff9182169161108e911687611762565b61109891906117ac565b60015485549192505f916fffffffffffffffffffffffffffffffff918216916110c2911685611762565b6110cc91906117ac565b90505f6110d982846117bf565b9554959f6fffffffffffffffffffffffffffffffff9096169e50949c50505050505050505050505050565b63ffffffff8084165f908152600360205260408120805491928392839161114891780100000000000000000000000000000000000000000000000090041687611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661117787846117bf565b6111819190611762565b60015484549192506fffffffffffffffffffffffffffffffff908116916111a9911683611762565b6111b391906117ac565b925492986fffffffffffffffffffffffffffffffff90931697509195505050505050565b5f808080806111e8617530896117d2565b90508063ffffffff16606e148061120657508063ffffffff1661279f145b8061121857508063ffffffff16614eaf145b1561123257611228818888610e02565b9095509350611281565b8063ffffffff16606f148061124e57508063ffffffff16612794145b8061126057508063ffffffff16614ea4145b1561127057611228818888610f5c565b61127b818888611104565b90955093505b505060015460055493979296506fffffffffffffffffffffffffffffffff908116955090921692509050565b73ffffffffffffffffffffffffffffffffffffffff82166112fa576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114611350576040519150601f19603f3d011682016040523d82523d5f602084013e611355565b606091505b50509050806108fc576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c03565b5f806113bd617530846117d2565b90508063ffffffff16606f036113d65750606592915050565b8063ffffffff16612794036113ef575061278992915050565b8063ffffffff16614ea4036114085750614e9992915050565b6040517ff42c33dc00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c03565b803563ffffffff81168114611455575f80fd5b919050565b5f805f6060848603121561146c575f80fd5b61147584611442565b95602085013595506040909401359392505050565b80356fffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f602082840312156114b9575f80fd5b6114c28261148a565b9392505050565b5f80602083850312156114da575f80fd5b823567ffffffffffffffff808211156114f1575f80fd5b818501915085601f830112611504575f80fd5b813581811115611512575f80fd5b8660208260071b8501011115611526575f80fd5b60209290920196919550909350505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f806040838503121561156c575f80fd5b61157583611538565b915060208301358015158114611589575f80fd5b809150509250929050565b803561ffff81168114611455575f80fd5b5f805f606084860312156115b7575f80fd5b61147584611594565b5f60c082840312156115d0575f80fd5b50919050565b5f602082840312156115e6575f80fd5b6114c282611538565b5f602082840312156115ff575f80fd5b6114c282611442565b5f60208284031215611618575f80fd5b6114c282611594565b5f8060408385031215611632575f80fd5b61163b83611538565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b803567ffffffffffffffff81168114611455575f80fd5b5f6060828403121561169d575f80fd5b6040516060810181811067ffffffffffffffff821117156116e5577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040526116f18361148a565b81526116ff60208401611676565b602082015261171060408401611442565b60408201529392505050565b5f6020828403121561172c575f80fd5b6114c282611676565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761177957611779611735565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826117ba576117ba61177f565b500490565b8082018082111561177957611779611735565b5f63ffffffff808416806117e8576117e861177f565b9216919091069291505056fea2646970667358221220057b4584fe743c800fee37c9f14cc5705300ed67e417991ba4a7213c92a3bfad64736f6c6343000816003360e060405234801562000010575f80fd5b506040516200588138038062005881833981016040819052620000339162000185565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001cf565b6001600160a01b03821660805263ffffffff811660a05283833380620000d957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000e4816200011e565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b03989098169790971790965550620001fb945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811462000182575f80fd5b50565b5f805f806080858703121562000199575f80fd5b8451620001a6816200016d565b6020860151909450620001b9816200016d565b6040860151606090960151949790965092505050565b5f60208284031215620001e0575f80fd5b815163ffffffff81168114620001f4575f80fd5b9392505050565b60805160a05160c0516156426200023f5f395f8181612458015261264f01525f50505f81816107f80152818161093b015281816116c30152611daa01526156425ff3fe608060405260043610610186575f3560e01c806361d027b3116100d1578063d15b0d491161007c578063f2fde38b11610057578063f2fde38b14610528578063faaebd2114610547578063fd9be52214610580575f80fd5b8063d15b0d49146104be578063d80e9bd9146104dd578063f0f4426014610509575f80fd5b80638da5cb5b116100ac5780638da5cb5b1461044a5780639c33abf714610473578063c14c43491461049f575f80fd5b806361d027b3146103eb5780636750cd4c14610417578063715018a614610436575f80fd5b806329460b0b1161013157806343ea4fa91161010c57806343ea4fa9146103145780634d9632001461033357806354fd4d50146103c0575f80fd5b806329460b0b1461029c57806339e3f938146102bb5780634389e58f146102e7575f80fd5b80631881d94d116101615780631881d94d14610242578063200175f71461025c57806320efd7221461027d575f80fd5b806301ffc9a7146101915780630e97289b146101c5578063188183f414610216575f80fd5b3661018d57005b5f80fd5b34801561019c575f80fd5b506101b06101ab3660046141f9565b61059f565b60405190151581526020015b60405180910390f35b3480156101d0575f80fd5b506006546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b348015610221575f80fd5b50610235610230366004614285565b610683565b6040516101bc91906142bc565b34801561024d575f80fd5b505f6040516101bc91906142ef565b348015610267575f80fd5b5061027b61027636600461432e565b61078e565b005b348015610288575f80fd5b5061027b6102973660046143ad565b610939565b3480156102a7575f80fd5b5061027b6102b63660046143fe565b610aec565b3480156102c6575f80fd5b506102da6102d5366004614285565b610ccf565b6040516101bc91906144fe565b3480156102f2575f80fd5b5061030661030136600461451f565b610e6a565b6040516101bc929190614631565b34801561031f575f80fd5b506102da61032e366004614285565b610f1f565b34801561033e575f80fd5b5061038f61034d366004614285565b600460209081525f928352604080842090915290825290205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101bc565b3480156103cb575f80fd5b5060408051600381525f60208201526002918101919091526060016101bc565b3480156103f6575f80fd5b506003546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b348015610422575f80fd5b506101b0610431366004614654565b6112d0565b348015610441575f80fd5b5061027b6112da565b348015610455575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166101f1565b34801561047e575f80fd5b5061049261048d36600461466f565b6112ed565b6040516101bc91906146b7565b3480156104aa575f80fd5b5061027b6104b93660046146c9565b6113d4565b3480156104c9575f80fd5b5061027b6104d8366004614738565b611547565b3480156104e8575f80fd5b506104fc6104f736600461451f565b6115d5565b6040516101bc919061474f565b348015610514575f80fd5b5061027b610523366004614766565b611643565b348015610533575f80fd5b5061027b610542366004614766565b611657565b348015610552575f80fd5b50610572610561366004614766565b60056020525f908152604090205481565b6040519081526020016101bc565b34801561058b575f80fd5b5061027b61059a366004614781565b6116b7565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061063157507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b8061067d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080518082019091525f808252602082015263ffffffff8083165f8181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845260048352818420948452939091528120805492939092169081900361071257825463ffffffff16610714565b805b63ffffffff1684528154640100000000900473ffffffffffffffffffffffffffffffffffffffff1680610766578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16610768565b805b73ffffffffffffffffffffffffffffffffffffffff166020860152509295945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146107df576040517f885762a700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061088391906147ab565b73ffffffffffffffffffffffffffffffffffffffff16036108d0576040517fe695d04400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108db8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109a8576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610ae657368383838181106109c5576109c56147c6565b90506020028101906109d791906147f3565b90506109ee6109e96020830183614654565b611821565b6001610a006040830160208401614654565b63ffffffff1603610a4057610a3b610a1b6020830183614654565b86610a29604085018561482f565b810190610a369190614958565b611868565b610add565b6002610a526040830160208401614654565b63ffffffff1603610a8d57610a3b610a6d6020830183614654565b86610a7b604085018561482f565b810190610a889190614b11565b611914565b610a9d6040820160208301614654565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b506001016109aa565b50505050565b610af461195d565b5f5b81811015610c915736838383818110610b1157610b116147c6565b9050602002810190610b239190614b43565b905060ff610b346020830183614b75565b610b45906040810190602001614ba7565b60ff1603610b7f576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff610b8e6020830183614b75565b610b9f906060810190604001614ba7565b60ff1603610bd9576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff610bef6020830183614b75565b610bfd906020810190614bc0565b67ffffffffffffffff1603610c3e576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5c610c4e6020830183614b75565b610c5790614bd9565b6119af565b610c885f610c6d6020840184614654565b610c7a6020850185614b75565b610c8390614bd9565b611a00565b50600101610af6565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610cc3929190614c90565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a01000000000000000000009091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610dec57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dc1575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610e5957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e2e575b505050505081525050905092915050565b604080518082019091525f80825260208201526060610e8b86868686611d93565b6006546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815292945090925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610ee990849089908990600401614e2d565b5f604051808303815f87803b158015610f00575f80fd5b505af1158015610f12573d5f803e3d5ffd5b5050505094509492505050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610fce57825467ffffffffffffffff168452610fed565b67ffffffffffffffff81811614610fed5767ffffffffffffffff811684525b815468010000000000000000900460ff166110a157825468010000000000000000900460ff161561109c578260010180548060200260200160405190810160405280929190818152602001828054801561107b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611050575b50505050506080850152825468010000000000000000900460ff1660208501525b61113d565b815468010000000000000000900460ff9081161461113d578160010180548060200260200160405190810160405280929190818152602001828054801561111c57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116110f1575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff1661120a5782546901000000000000000000900460ff161561120557826002018054806020026020016040519081016040528092919081815260200182805480156111cd57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111a2575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112be565b81546901000000000000000000900460ff908116146112be578160020180548060200260200160405190810160405280929190818152602001828054801561128657602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161125b575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112c7846119af565b50505092915050565b5f61067d82611e8a565b6112e261195d565b6112eb5f611ef0565b565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161134c576113268385610683565b60405160200161133691906142bc565b60405160208183030381529060405290506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601611393576113838385610f1f565b60405160200161133691906144fe565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610ad4565b9392505050565b6113dc61195d565b5f5b8181101561151557368383838181106113f9576113f96147c6565b60609081029290920192505f916114169150830160408401614766565b73ffffffffffffffffffffffffffffffffffffffff1603611463576040517f20e9d05a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114736040820160208301614654565b63ffffffff165f036114b1576040517f49cfac4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec906114eb8385614654565b63ffffffff16815260208101919091526040015f2061150a8282614e8f565b5050506001016113de565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610cc3929190614f27565b61154f61195d565b600254811115611599576002546040517f34084fb8000000000000000000000000000000000000000000000000000000008152610ad4918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f806116246115fd6060890160408a01614766565b61160d60808a0160608b01614654565b61161a60c08b018b61482f565b9050878a8a611f64565b604080518082019091529182526020820152925050505b949350505050565b61164b61195d565b61165481612062565b50565b61165f61195d565b73ffffffffffffffffffffffffffffffffffffffff81166116ae576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b61165481611ef0565b6116c0816120d5565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174e91906147ab565b905061175b81848461213d565b6040805133815273ffffffffffffffffffffffffffffffffffffffff851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a66698839060600161092c565b73ffffffffffffffffffffffffffffffffffffffff82166117fb576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61181c73ffffffffffffffffffffffffffffffffffffffff8416838361216d565b505050565b61182a81611e8a565b611654576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610ad4565b73ffffffffffffffffffffffffffffffffffffffff8083165f90815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc8059061092c90849086908590614fb3565b61191f828483611a00565b6119298284610f1f565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161092c9392919061500f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146112eb576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ad4565b602081015160ff161580156119c95750606081015160ff16155b15611654576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff9081161480611a1b5750602081015160ff16155b15611a625760808101515115611a5d576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae1565b806020015160ff16816080015151141580611a9d57506002611a86600160ff615076565b611a90919061508f565b60ff16816020015160ff16115b15611ad4576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae181608001516121fa565b604081015160ff9081161480611afc5750604081015160ff16155b15611b825760a08101515115611b3e576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611b7d576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c59565b806040015160ff168160a0015151141580611bbd57506002611ba6600160ff615076565b611bb0919061508f565b60ff16816040015160ff16115b15611bf4576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff161580611c155750806040015160ff16816060015160ff16115b15611c4c576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c598160a001516121fa565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a0100000000000000000000959091169490940293909317835560808401518051859493611d6f93908501920190614166565b5060a08201518051611d8b916002840191602090910190614166565b505050505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314611e17576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611e24888888612292565b90925090505f80611e55611e3e60608c0160408d01614766565b611e4e60808d0160608e01614654565b858a612359565b9092509050611e6482846150d5565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff161515806113cd5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f80611f7286866124e3565b915091505f611f828b8b846124fc565b90505f611f8f8c8c610683565b9050611fa48a825f015163ffffffff16612508565b806020015173ffffffffffffffffffffffffffffffffffffffff1663709eb6648c8e8d886040518563ffffffff1660e01b8152600401611fe794939291906150e8565b602060405180830381865afa158015612002573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120269190615132565b61203090836150d5565b91505f806120408e8e868e612550565b909250905061204f82856150d5565b9e909d509b505050505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016115ca565b335f9081526005602052604090205480821115612128576040517f34084fb80000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b335f9081526005602052604090209190039055565b73ffffffffffffffffffffffffffffffffffffffff83166121625761181c8282612691565b61181c8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261181c908490612793565b5f805b825181101561181c575f838281518110612219576122196147c6565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611612288576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b91506001016121fd565b60605f805f6122a186866124e3565b90925090505f6122ca6122ba60608a0160408b01614766565b61023060808b0160608c01614654565b90505f6122da60c08a018a61482f565b905090506122f181835f015163ffffffff16612508565b60208201516123219061230a60808c0160608d01614654565b61231a60608d0160408e01614766565b8488612832565b61232b90866150d5565b94505f806123398b86612966565b909250905061234882886150d5565b909b909a5098505050505050505050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526003549192505f9182916124809173ffffffffffffffffffffffffffffffffffffffff16907f000000000000000000000000000000000000000000000000000000000000000090849087612988565b9150915061249087878484612a33565b909550935084156124d75760035473ffffffffffffffffffffffffffffffffffffffff165f90815260056020526040812080548792906124d19084906150d5565b90915550505b50505094509492505050565b6060806124f08484612aaa565b915091505b9250929050565b5f61163b848484612b90565b8082111561254c576040517fc667af3e0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b5050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526003549192505f9182916126759173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086612c04565b9150915061268587878484612a33565b94509450505050611e81565b73ffffffffffffffffffffffffffffffffffffffff82166126de576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612734576040519150601f19603f3d011682016040523d82523d5f602084013e612739565b606091505b505090508061181c576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ad4565b5f8060205f8451602086015f885af1806127b2576040513d5f823e3d81fd5b50505f513d915081156127c95780600114156127e3565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610ae6576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ad4565b6040517f717e8a420000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff87169063717e8a429061288c9088908890889088906004016150e8565b6020604051808303815f875af11580156128a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128cc9190615132565b9050801561290e5773ffffffffffffffffffffffffffffffffffffffff86165f90815260056020526040812080548392906129089084906150d5565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff88168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b5f606061297d6005612977866151d3565b85612cab565b909590945092505050565b5f6060863b8083036129ad57604080515f808252602082019092529250925050612a29565b5f805f8761ffff1667ffffffffffffffff8111156129cd576129cd614890565b6040519080825280601f01601f1916602001820160405280156129f7576020820181803683370190505b5090505f80885160208a018c8f8ff191503d925087831115612a17578792505b828152825f602083013e909450925050505b9550959350505050565b5f80831580612a43575082516020115b15612a5257505f905080611e81565b5f83806020019051810190612a679190615132565b90508515612a7757809150612aa0565b5f6002548811612a8957600254612a8b565b875b9050808211612a9a5781612a9c565b805b9350505b5094509492505050565b6060805f80612ab98686612dfe565b9150915080515f03612b0e57604080515f808252602082019092528391612b02565b604080518082019091525f815260606020820152815260200190600190039081612adb5790505b509350935050506124f5565b6040805160018082528183019092525f91816020015b604080518082019091525f815260606020820152815260200190600190039081612b245790505090506040518060400160405280600260ff16815260200183815250815f81518110612b7857612b786147c6565b60209081029190910101529196919550909350505050565b5f80612b9c8585610f1f565b90505f83515f14612bca57835f81518110612bb957612bb96147c6565b602002602001015160200151612bda565b60405180602001604052805f8152505b90505f80612be783613034565b91509150612bf884888a85856132ce565b98975050505050505050565b5f6060853b808303612c2957604080515f808252602082019092529250925050611e81565b5f805f8761ffff1667ffffffffffffffff811115612c4957612c49614890565b6040519080825280601f01601f191660200182016040528015612c73576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115612c92578792505b828152825f602083013e90999098509650505050505050565b5f60605f612cb885613486565b90505f612cc48661356c565b805160208201206060880151604089015192935090915f612ce58284610f1f565b90505f89515f14612d1357895f81518110612d0257612d026147c6565b602002602001015160200151612d23565b60405180602001604052805f8152505b90506060612d828d846040518060a001604052808963ffffffff1681526020018c81526020018a8152602001875f015167ffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525085613589565b604051919b509150612d9a908990899060200161526e565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a0015183604051612de69392919061529c565b60405180910390a15050505050505050935093915050565b6060806002831015612e3e576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b5f612e4c60028286886152f8565b612e559161531f565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161301d57805f5b86831015612faa575f612e9e60018501858a8c6152f8565b612ea791615367565b60f81c90505f819003612ee8576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b8160ff165f03612efa57809150612f36565b8160ff168160ff1614612f3657365f612f1586868c8e6152f8565b91509150612f26898986858561385b565b9099509750859450919250829150505b60018401935f90612f4c90600301868b8d6152f8565b612f559161531f565b60f01c90505f819003612f97576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101869052602401610ad4565b8060020161ffff16850194505050612e86565b828714612fe6576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b600287111561301657365f612ffd85858b8d6152f8565b9150915061300e888885858561385b565b909850965050505b505061302b565b6130288287876139ce565b93505b50509250929050565b60608082515f0361304457915091565b5f61304e84613c49565b90508060ff166001036130fe5760408051600180825281830190925290816020015b606081526020019060019003908161307057905050925083835f8151811061309a5761309a6147c6565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506130d2846003613d6b565b825f815181106130e4576130e46147c6565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561311a5761311a614890565b604051908082528060200260200182016040528015613143578160200160208202803683370190505b5091508060ff1667ffffffffffffffff81111561316257613162614890565b60405190808252806020026020018201604052801561319557816020015b60608152602001906001900390816131805790505b5092505f8060ff5b8651831015613245576001909201915f6131b78885613dea565b6002949094019390505f6131cb8986613d6b565b90508260ff1660ff036131e057809250613236565b8260ff168160ff1614613236577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f61321e8b8784613e69565b905061322c8a8a8784613fe2565b5093909301929150815b5061ffff16929092019161319d565b8183035f613254898584613e69565b905061326288888584613fe2565b5f5b8660ff168160ff1610156132c257878160ff1681518110613287576132876147c6565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613264565b50505050505050915091565b5f80866040015187602001516132e491906153ad565b90505f5b8160ff168160ff16101561347b575f886020015160ff168260ff161061333c5760a089015160208a015161331c9084615076565b60ff168151811061332f5761332f6147c6565b602002602001015161335e565b88608001518260ff1681518110613355576133556147c6565b60200260200101515b60408051602081019091525f808252919250905b86518110156133ca578360ff16878281518110613391576133916147c6565b602002602001015160ff16036133c2578781815181106133b3576133b36147c6565b602002602001015191506133ca565b600101613372565b5089516040517f30bb3aac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416916330bb3aac91613423918d918d9087906004016153c6565b602060405180830381865afa15801561343e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134629190615132565b61346c90866150d5565b945050508060010190506132e8565b505095945050505050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001613556929190615410565b5f60605f8061359785613034565b915091505f876040015188602001516135b091906153ad565b90508060ff1667ffffffffffffffff8111156135ce576135ce614890565b6040519080825280602002602001820160405280156135f7578160200160208202803683370190505b5093505f5b8160ff168160ff161015610f12575f896020015160ff168260ff16106136505760a08a015160208b01516136309084615076565b60ff1681518110613643576136436147c6565b6020026020010151613672565b89608001518260ff1681518110613669576136696147c6565b60200260200101515b60408051602081019091525f808252919250905b85518110156136de578360ff168682815181106136a5576136a56147c6565b602002602001015160ff16036136d6578681815181106136c7576136c76147c6565b602002602001015191506136de565b600101613686565b506040517f95d376d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906395d376d790613733908d908590600401615435565b6020604051808303815f875af115801561374f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137739190615132565b878460ff1681518110613788576137886147c6565b6020026020010181815250505f878460ff16815181106137aa576137aa6147c6565b6020026020010151111561385157868360ff16815181106137cd576137cd6147c6565b60200260200101518c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461381f91906150d5565b92505081905550868360ff168151811061383b5761383b6147c6565b60200260200101518861384e91906150d5565b97505b50506001016135fc565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8616016138f5578651156138b8578684846040516020016138a4939291906154b2565b6040516020818303038152906040526138ee565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b96506139c3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff86160161398c5785511561394f5785848460405160200161393b939291906154b2565b604051602081830303815290604052613985565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b95506139c3565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff86166004820152602401610ad4565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff851601613af35760228214613a35576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613a55613a476022600286886152f8565b613a50916154d8565b61410d565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b1660248201529091506034016040516020818303038152906040529150506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff851601613c1157604282111580613b2e5750606282115b15613b65576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613b77613a476022600286886152f8565b90505f613b8b613a476042602287896152f8565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613bbe866042818a6152f8565b613bc7916154d8565b60405160086020938403029190911c9250613bf8916001916011918391889183916031916002918b918b9101615514565b60405160208183030381529060405293505050506113cd565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff85166004820152602401610ad4565b5f80805b8351821015613d27576001909101905f613c678584613dea565b905060028301925060028161ffff161015613cb1576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b5f613cbc8685613d6b565b90508060ff1660ff03613cfb576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b8316613d185760019485019460ff82161b831792505b5061ffff169190910190613c4d565b83518214613d64576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101839052602401610ad4565b5050919050565b5f613d778260016150d5565b83511015613de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401610ad4565b50016001015190565b5f613df68260026150d5565b83511015613e60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606401610ad4565b50016002015190565b606081613e7781601f6150d5565b1015613edf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ad4565b613ee982846150d5565b84511015613f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ad4565b606082158015613f715760405191505f825260208201604052613fd9565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613faa578051835260209283019201613f92565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff0361401f576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61402b8360016153ad565b90505f5b8451811015611d8b575f85828151811061404b5761404b6147c6565b602002602001015190508060ff168360ff16036140c057868281518110614074576140746147c6565b60200260200101518460405160200161408e92919061526e565b6040516020818303038152906040528783815181106140af576140af6147c6565b602002602001018190525050611d8b565b8060ff165f0361410457828683815181106140dd576140dd6147c6565b602002602001019060ff16908160ff1681525050838783815181106140af576140af6147c6565b5060010161402f565b5f6fffffffffffffffffffffffffffffffff821115614162576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526080600482015260248101839052604401610ad4565b5090565b828054828255905f5260205f209081019282156141de579160200282015b828111156141de57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614184565b506141629291505b80821115614162575f81556001016141e6565b5f60208284031215614209575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113cd575f80fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611654575f80fd5b803561426481614238565b919050565b63ffffffff81168114611654575f80fd5b803561426481614269565b5f8060408385031215614296575f80fd5b82356142a181614238565b915060208301356142b181614269565b809150509250929050565b815163ffffffff16815260208083015173ffffffffffffffffffffffffffffffffffffffff16908201526040810161067d565b6020810160038310614328577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f805f60608486031215614340575f80fd5b833561434b81614238565b9250602084013561435b81614238565b929592945050506040919091013590565b5f8083601f84011261437c575f80fd5b50813567ffffffffffffffff811115614393575f80fd5b6020830191508360208260051b85010111156124f5575f80fd5b5f805f604084860312156143bf575f80fd5b83356143ca81614238565b9250602084013567ffffffffffffffff8111156143e5575f80fd5b6143f18682870161436c565b9497909650939450505050565b5f806020838503121561440f575f80fd5b823567ffffffffffffffff811115614425575f80fd5b6144318582860161436c565b90969095509350505050565b5f815180845260208085019450602084015f5b8381101561448257815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614450565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c060808501526144dc60c085018261443d565b905060a083015184820360a08601526144f5828261443d565b95945050505050565b602081525f6113cd602083018461448d565b80358015158114614264575f80fd5b5f805f8060608587031215614532575f80fd5b843567ffffffffffffffff80821115614549575f80fd5b9086019060e0828903121561455c575f80fd5b90945060208601359080821115614571575f80fd5b818701915087601f830112614584575f80fd5b813581811115614592575f80fd5b8860208285010111156145a3575f80fd5b6020830195508094505050506145bb60408601614510565b905092959194509250565b5f5b838110156145e05781810151838201526020016145c8565b50505f910152565b5f81518084526145ff8160208601602086016145c6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f61163b60608301846145e8565b5f60208284031215614664575f80fd5b81356113cd81614269565b5f805f60608486031215614681575f80fd5b833561468c81614269565b9250602084013561469c81614238565b915060408401356146ac81614269565b809150509250925092565b602081525f6113cd60208301846145e8565b5f80602083850312156146da575f80fd5b823567ffffffffffffffff808211156146f1575f80fd5b818501915085601f830112614704575f80fd5b813581811115614712575f80fd5b866020606083028501011115614726575f80fd5b60209290920196919550909350505050565b5f60208284031215614748575f80fd5b5035919050565b81518152602080830151908201526040810161067d565b5f60208284031215614776575f80fd5b81356113cd81614238565b5f8060408385031215614792575f80fd5b823561479d81614238565b946020939093013593505050565b5f602082840312156147bb575f80fd5b81516113cd81614238565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614825575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614862575f80fd5b83018035915067ffffffffffffffff82111561487c575f80fd5b6020019150368190038213156124f5575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156148e0576148e0614890565b60405290565b60405160e0810167ffffffffffffffff811182821017156148e0576148e0614890565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561495057614950614890565b604052919050565b5f60408284031215614968575f80fd5b6040516040810181811067ffffffffffffffff8211171561498b5761498b614890565b604052823561499981614269565b815260208301356149a981614238565b60208201529392505050565b803567ffffffffffffffff81168114614264575f80fd5b803560ff81168114614264575f80fd5b5f82601f8301126149eb575f80fd5b8135602067ffffffffffffffff821115614a0757614a07614890565b8160051b614a16828201614909565b9283528481018201928281019087851115614a2f575f80fd5b83870192505b84831015614a57578235614a4881614238565b82529183019190830190614a35565b979650505050505050565b5f60c08284031215614a72575f80fd5b614a7a6148bd565b9050614a85826149b5565b8152614a93602083016149cc565b6020820152614aa4604083016149cc565b6040820152614ab5606083016149cc565b6060820152608082013567ffffffffffffffff80821115614ad4575f80fd5b614ae0858386016149dc565b608084015260a0840135915080821115614af8575f80fd5b50614b05848285016149dc565b60a08301525092915050565b5f60208284031215614b21575f80fd5b813567ffffffffffffffff811115614b37575f80fd5b61163b84828501614a62565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614825575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614825575f80fd5b5f60208284031215614bb7575f80fd5b6113cd826149cc565b5f60208284031215614bd0575f80fd5b6113cd826149b5565b5f61067d3683614a62565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c17575f80fd5b830160208101925035905067ffffffffffffffff811115614c36575f80fd5b8060051b36038213156124f5575f80fd5b8183525f60208085019450825f5b85811015614482578135614c6881614238565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614c55565b60208082528181018390525f906040808401600586901b8501820187855b88811015614e1f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112614d0f575f80fd5b8b018035614d1c81614269565b63ffffffff16855280880135368290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41018112614d58575f80fd5b8589018890520167ffffffffffffffff614d71826149b5565b1687860152614d818882016149cc565b606060ff80831682890152614d978a85016149cc565b92506080818416818a0152614dad8386016149cc565b935060a09250818416838a0152614dc681860186614be4565b60c08b81015294509150614de1905061010089018483614c47565b925050614df081840184614be4565b93509050838783030160e0880152614e09828483614c47565b978a019796505050928701925050600101614cae565b509098975050505050505050565b604081525f614e3f60408301866145e8565b8281036020840152838152838560208301375f6020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b8135614e9a81614269565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135614eda81614238565b77ffffffffffffffffffffffffffffffffffffffff000000008160201b16837fffffffffffffffff0000000000000000000000000000000000000000000000008416171784555050505050565b60208082528181018390525f90604080840186845b87811015614fa6578135614f4f81614269565b63ffffffff90811684528286013590614f6782614269565b168386015281840135614f7981614238565b73ffffffffffffffffffffffffffffffffffffffff16838501526060928301929190910190600101614f3c565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526080810161163b6040830184805163ffffffff16825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6144f5606083018461448d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561067d5761067d615049565b5f60ff8316806150c6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b8082018082111561067d5761067d615049565b63ffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201525f61512860808301846145e8565b9695505050505050565b5f60208284031215615142575f80fd5b5051919050565b5f82601f830112615158575f80fd5b813567ffffffffffffffff81111561517257615172614890565b6151a360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614909565b8181528460208386010111156151b7575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e082360312156151e3575f80fd5b6151eb6148e6565b6151f4836149b5565b81526152026020840161427a565b602082015261521360408401614259565b60408201526152246060840161427a565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff811115615256575f80fd5b61526236828601615149565b60c08301525092915050565b5f835161527f8184602088016145c6565b8351908301906152938183602088016145c6565b01949350505050565b606081525f6152ae606083018661443d565b602083820360208501526152c2828761443d565b8481036040860152855180825260208088019450909101905f5b81811015614e1f578451835293830193918301916001016152dc565b5f8085851115615306575f80fd5b83861115615312575f80fd5b5050820193919092039150565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561535f5780818660020360031b1b83161692505b505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561535f5760019490940360031b84901b1690921692915050565b60ff818116838216019081111561067d5761067d615049565b63ffffffff8516815267ffffffffffffffff8416602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201525f61512860808301846145e8565b8281525f82516154278160208501602087016145c6565b919091016020019392505050565b6040815263ffffffff83511660408201525f602084015160a0606084015261546060e08401826145e8565b90506040850151608084015267ffffffffffffffff60608601511660a084015273ffffffffffffffffffffffffffffffffffffffff60808601511660c084015282810360208401526144f581856145e8565b5f84516154c38184602089016145c6565b8201838582375f930192835250909392505050565b8035602083101561067d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b166017840152506155f4601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea264697066735822122007106a9f1a4ad0c76a6c3862b682c6be555db12b22a4209a408302fac9b0046164736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002b7c38038062002b7c833981016040819052620000339162000139565b8080816001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000072573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000098919062000168565b3380620000be57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c981620000ea565b506001600160a01b0390911660805263ffffffff1660a052506200018d9050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156200014a575f80fd5b81516001600160a01b038116811462000161575f80fd5b9392505050565b5f6020828403121562000179575f80fd5b815163ffffffff8116811462000161575f80fd5b60805160a0516129c6620001b65f395f61036301525f818161048301526104e701526129c65ff3fe608060405234801561000f575f80fd5b5060043610610115575f3560e01c806343ea4fa9116100ad5780638da5cb5b1161007d578063c40ff83511610063578063c40ff835146102b6578063e084d952146102c9578063f2fde38b146102dc575f80fd5b80638da5cb5b1461026f5780639c33abf714610296575f80fd5b806343ea4fa91461022257806354fd4d50146102355780636750cd4c14610254578063715018a614610267575f80fd5b806320efd722116100e857806320efd7221461017857806329460b0b1461018b57806339e3f9381461019e5780633c782a52146101be575f80fd5b806301ffc9a7146101195780630223536e146101415780630894edf1146101565780631881d94d14610169575b5f80fd5b61012c610127366004611bf2565b6102ef565b60405190151581526020015b60405180910390f35b61015461014f366004611c92565b61034a565b005b610154610164366004611ceb565b61035c565b60016040516101389190611d33565b610154610186366004611dd6565b6104e5565b610154610199366004611e25565b610645565b6101b16101ac366004611e77565b610828565b6040516101389190611f69565b6102026101cc366004611f7b565b600260209081525f938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff909116602083015201610138565b6101b1610230366004611e77565b6109c3565b60408051600381525f6020820152600291810191909152606001610138565b61012c610262366004611fad565b610d74565b610154610d7e565b5f5460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610138565b6102a96102a4366004611fc6565b610d91565b6040516101389190611ffd565b6101546102c4366004612067565b610e31565b61012c6102d7366004612283565b610e41565b6101546102ea3660046122cd565b610e55565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0ab7be9f000000000000000000000000000000000000000000000000000000001480610344575061034482610eb8565b92915050565b61035684848484610f4e565b50505050565b61038783837f0000000000000000000000000000000000000000000000000000000000000000611060565b5f610392848461112e565b90505f61039f858561113f565b90505f6103ac83836109c3565b90506103d08187876040516103c29291906122e6565b604051809103902086611161565b5f60405180606001604052808463ffffffff1681526020016103f2898961130a565b81526020016104018989611322565b67ffffffffffffffff908116909152604080517fa825d747000000000000000000000000000000000000000000000000000000008152835163ffffffff1660048201526020840151602482015290830151909116604482015273ffffffffffffffffffffffffffffffffffffffff8681166064830152608482018890529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b1580156104c6575f80fd5b505af11580156104d8573d5f803e3d5ffd5b5050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610554576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156103565736838383818110610571576105716122f5565b90506020028101906105839190612322565b905061059a6105956020830183611fad565b611344565b60026105ac6040830160208401611fad565b63ffffffff16036105ec576105e76105c76020830183611fad565b866105d5604085018561235e565b8101906105e291906123bf565b61138b565b61063c565b6105fc6040820160208301611fad565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610556565b61064d6113e1565b5f5b818110156107ea573683838381811061066a5761066a6122f5565b905060200281019061067c91906123f1565b905060ff61068d6020830183612423565b61069e906040810190602001612455565b60ff16036106d8576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6106e76020830183612423565b6106f8906060810190604001612455565b60ff1603610732576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6107486020830183612423565b61075690602081019061246e565b67ffffffffffffffff1603610797576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b56107a76020830183612423565b6107b090612487565b611433565b6107e15f6107c66020840184611fad565b6107d36020850185612423565b6107dc90612487565b611484565b5060010161064f565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b560828260405161081c92919061253c565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561094557602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161091a575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156109b257602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610987575b505050505081525050905092915050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610a7257825467ffffffffffffffff168452610a91565b67ffffffffffffffff81811614610a915767ffffffffffffffff811684525b815468010000000000000000900460ff16610b4557825468010000000000000000900460ff1615610b405782600101805480602002602001604051908101604052809291908181526020018280548015610b1f57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610af4575b50505050506080850152825468010000000000000000900460ff1660208501525b610be1565b815468010000000000000000900460ff90811614610be15781600101805480602002602001604051908101604052809291908181526020018280548015610bc057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b95575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610cae5782546901000000000000000000900460ff1615610ca95782600201805480602002602001604051908101604052809291908181526020018280548015610c7157602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c46575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d62565b81546901000000000000000000900460ff90811614610d625781600201805480602002602001604051908101604052809291908181526020018280548015610d2a57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610cff575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d6b84611433565b50505092915050565b5f61034482611817565b610d866113e1565b610d8f5f61187d565b565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601610df057610dca83856109c3565b604051602001610dda9190611f69565b6040516020818303038152906040529050610e2a565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610633565b9392505050565b610e3c838383611060565b505050565b5f610e4d8484846118f1565b949350505050565b610e5d6113e1565b73ffffffffffffffffffffffffffffffffffffffff8116610eac576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610633565b610eb58161187d565b50565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061034457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610344565b6040805180820182526001815267ffffffffffffffff8316602082015290516002905f90610f7f90889088906122e6565b604080519182900390912082526020808301939093529081015f9081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916110529187908790869088906126d6565b60405180910390a150505050565b6051821461109a576040517fc9bf37b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016110a684846119f1565b60ff16146110e0576040517f3a9ae7b900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff166110f18484611a12565b63ffffffff1614610e3c576040517f42d2c97e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e2a61113c8484611a21565b90565b5f61114e600d60098486612759565b61115791612780565b60e01c9392505050565b61116c8383836118f1565b6111a2576040517f4c3118d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611257575f5b836020015160ff168160ff161015611255575f83815260026020908152604080832085845290915281206080860151805191929160ff85169081106111f8576111f86122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001690556001016111b1565b505b604083015160ff1615610e3c575f5b836040015160ff168160ff161015610356575f838152600260209081526040808320858452909152812060a0860151805191929160ff85169081106112ad576112ad6122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611266565b5f611319602d600d8486612759565b610e2a916127c8565b5f611331600960018486612759565b61133a91612804565b60c01c9392505050565b61134d81611817565b610eb5576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610633565b611396828483611484565b6113a082846109c3565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516113d49392919061284a565b60405180910390a1505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610d8f576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610633565b602081015160ff1615801561144d5750606081015160ff16155b15610eb5576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff908116148061149f5750602081015160ff16155b156114e657608081015151156114e1576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611565565b806020015160ff168160800151511415806115215750600261150a600160ff6128b1565b61151491906128ca565b60ff16816020015160ff16115b15611558576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115658160800151611a30565b604081015160ff90811614806115805750604081015160ff16155b156116065760a081015151156115c2576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611601576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd565b806040015160ff168160a00151511415806116415750600261162a600160ff6128b1565b61163491906128ca565b60ff16816040015160ff16115b15611678576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806116995750806040015160ff16816060015160ff16115b156116d0576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd8160a00151611a30565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a01000000000000000000009590911694909402939093178355608084015180518594936117f393908501920190611b56565b5060a0820151805161180f916002840191602090910190611b56565b505050505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff16151580610e2a5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60208301515f9060ff161561196f575f5b846020015160ff168160ff1610156119585761194385608001518260ff1681518110611930576119306122f5565b60200260200101518585885f0151611ac8565b611950575f915050610e2a565b600101611902565b50836040015160ff165f0361196f57506001610e2a565b60608401515f5b856040015160ff168160ff1610156119e6576119b78660a001518260ff16815181106119a4576119a46122f5565b60200260200101518686895f0151611ac8565b156119de57816119c681612910565b9250508160ff165f036119de57600192505050610e2a565b600101611976565b505f95945050505050565b5f6119ff6001828486612759565b611a089161294a565b60f81c9392505050565b5f61114e6031602d8486612759565b5f611319605160318486612759565b5f805b8251811015610e3c575f838281518110611a4f57611a4f6122f5565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611611abe576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101611a33565b5f838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff16938301939093529091611b4c57508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b828054828255905f5260205f20908101928215611bce579160200282015b82811115611bce57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190611b74565b50611bda929150611bde565b5090565b5b80821115611bda575f8155600101611bdf565b5f60208284031215611c02575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e2a575f80fd5b5f8083601f840112611c41575f80fd5b50813567ffffffffffffffff811115611c58575f80fd5b602083019150836020828501011115611c6f575f80fd5b9250929050565b803567ffffffffffffffff81168114611c8d575f80fd5b919050565b5f805f8060608587031215611ca5575f80fd5b843567ffffffffffffffff811115611cbb575f80fd5b611cc787828801611c31565b90955093505060208501359150611ce060408601611c76565b905092959194509250565b5f805f60408486031215611cfd575f80fd5b833567ffffffffffffffff811115611d13575f80fd5b611d1f86828701611c31565b909790965060209590950135949350505050565b6020810160038310611d6c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b803573ffffffffffffffffffffffffffffffffffffffff81168114611c8d575f80fd5b5f8083601f840112611da5575f80fd5b50813567ffffffffffffffff811115611dbc575f80fd5b6020830191508360208260051b8501011115611c6f575f80fd5b5f805f60408486031215611de8575f80fd5b611df184611d72565b9250602084013567ffffffffffffffff811115611e0c575f80fd5b611e1886828701611d95565b9497909650939450505050565b5f8060208385031215611e36575f80fd5b823567ffffffffffffffff811115611e4c575f80fd5b611e5885828601611d95565b90969095509350505050565b803563ffffffff81168114611c8d575f80fd5b5f8060408385031215611e88575f80fd5b611e9183611d72565b9150611e9f60208401611e64565b90509250929050565b5f815180845260208085019450602084015f5b83811015611eed57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611ebb565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152611f4760c0850182611ea8565b905060a083015184820360a0860152611f608282611ea8565b95945050505050565b602081525f610e2a6020830184611ef8565b5f805f60608486031215611f8d575f80fd5b8335925060208401359150611fa460408501611d72565b90509250925092565b5f60208284031215611fbd575f80fd5b610e2a82611e64565b5f805f60608486031215611fd8575f80fd5b611fe184611e64565b9250611fef60208501611d72565b9150611fa460408501611e64565b5f602080835283518060208501525f5b818110156120295785810183015185820160400152820161200d565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f805f60408486031215612079575f80fd5b833567ffffffffffffffff81111561208f575f80fd5b61209b86828701611c31565b9094509250611fa4905060208501611e64565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156120fe576120fe6120ae565b60405290565b803560ff81168114611c8d575f80fd5b5f82601f830112612123575f80fd5b8135602067ffffffffffffffff80831115612140576121406120ae565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715612183576121836120ae565b60405293845260208187018101949081019250878511156121a2575f80fd5b6020870191505b848210156121c9576121ba82611d72565b835291830191908301906121a9565b979650505050505050565b5f60c082840312156121e4575f80fd5b6121ec6120db565b90506121f782611c76565b815261220560208301612104565b602082015261221660408301612104565b604082015261222760608301612104565b6060820152608082013567ffffffffffffffff80821115612246575f80fd5b61225285838601612114565b608084015260a084013591508082111561226a575f80fd5b5061227784828501612114565b60a08301525092915050565b5f805f60608486031215612295575f80fd5b833567ffffffffffffffff8111156122ab575f80fd5b6122b7868287016121d4565b9660208601359650604090950135949350505050565b5f602082840312156122dd575f80fd5b610e2a82611d72565b818382375f9101908152919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112612354575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612391575f80fd5b83018035915067ffffffffffffffff8211156123ab575f80fd5b602001915036819003821315611c6f575f80fd5b5f602082840312156123cf575f80fd5b813567ffffffffffffffff8111156123e5575f80fd5b610e4d848285016121d4565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612354575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612354575f80fd5b5f60208284031215612465575f80fd5b610e2a82612104565b5f6020828403121561247e575f80fd5b610e2a82611c76565b5f61034436836121d4565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124c5575f80fd5b830160208101925035905067ffffffffffffffff8111156124e4575f80fd5b8060051b3603821315611c6f575f80fd5b8183525f60208085019450825f5b85811015611eed5773ffffffffffffffffffffffffffffffffffffffff61252983611d72565b1687529582019590820190600101612503565b60208082528181018390525f906040808401600586901b8501820187855b888110156126c8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c36030181126125bb575f80fd5b8b0163ffffffff6125cb82611e64565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612601575f80fd5b8589018890520167ffffffffffffffff61261a82611c76565b168786015261262a888201612104565b606060ff808316828901526126408a8501612104565b92506080818416818a0152612656838601612104565b935060a09250818416838a015261266f81860186612492565b60c08b8101529450915061268a9050610100890184836124f5565b92505061269981840184612492565b93509050838783030160e08801526126b28284836124f5565b978a01979650505092870192505060010161255a565b509098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a08301375f60a085830101525f60a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b5f8085851115612767575f80fd5b83861115612773575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156127c05780818660040360031b1b83161692505b505092915050565b80356020831015610344577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156127c05760089490940360031b84901b1690921692915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f611f606060830184611ef8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561034457610344612884565b5f60ff831680612901577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b5f60ff82168061292257612922612884565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156127c05760019490940360031b84901b169092169291505056fea264697066735822122049ae6e8c1120ac3b04c6e78fb5426f5903144b4cb03d43aa8492006a0cbef95864736f6c6343000816003360e060405234801562000010575f80fd5b5060405162005cb238038062005cb2833981016040819052620000339162000170565b82836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000071573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000979190620001ba565b3380620000bd57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c88162000109565b506001600160a01b0391821660805263ffffffff1660a05260c092909252600655600280546001600160a01b031916939091169290921790915550620001e6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016d575f80fd5b50565b5f805f806080858703121562000184575f80fd5b8451620001918162000158565b6020860151909450620001a48162000158565b6040860151606090960151949790965092505050565b5f60208284031215620001cb575f80fd5b815163ffffffff81168114620001df575f80fd5b9392505050565b60805160a05160c051615a7e620002345f395f81816121c00152612ffa01525f610e0f01525f81816107510152818161089401528181610a0f01528181610ff80152611cee0152615a7e5ff3fe60806040526004361061019c575f3560e01c80637620fd01116100dc578063d15b0d4911610087578063f0f4426011610062578063f0f442601461055b578063f2fde38b1461057a578063faaebd2114610599578063fd9be522146105c4575f80fd5b8063d15b0d49146104f1578063d80e9bd914610510578063ea69d69d1461053c575f80fd5b80639c33abf7116100b75780639c33abf714610487578063ab750e75146104b3578063c85f4b4e146104d2575f80fd5b80637620fd01146103d65780638da5cb5b146104325780638eb0bf301461045b575f80fd5b806320efd7221161014757806354fd4d501161012257806354fd4d5014610359578063594924da146103845780636750cd4c146103a3578063715018a6146103c2575f80fd5b806320efd722146102d15780633c782a52146102f05780634389e58f1461032c575f80fd5b80631881d94d116101775780631881d94d1461024b5780631fb5122514610266578063200175f7146102b0575f80fd5b806301ffc9a7146101a7578063052368ca146101db5780630e97289b146101fa575f80fd5b366101a357005b5f80fd5b3480156101b2575f80fd5b506101c66101c1366004614622565b6105e3565b60405190151581526020015b60405180910390f35b3480156101e6575f80fd5b506101c66101f5366004614661565b6106c7565b348015610205575f80fd5b506002546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b348015610256575f80fd5b5060026040516101d291906146b5565b348015610271575f80fd5b506102a261028036600461474f565b600360209081525f938452604080852082529284528284209052825290205481565b6040519081526020016101d2565b3480156102bb575f80fd5b506102cf6102ca366004614791565b6106e7565b005b3480156102dc575f80fd5b506102cf6102eb366004614817565b610892565b3480156102fb575f80fd5b506102a261030a366004614868565b600460209081525f938452604080852082529284528284209052825290205481565b348015610337575f80fd5b5061034b6103463660046148dc565b6109f8565b6040516101d29291906149c9565b348015610364575f80fd5b5060408051600a81525f60208201526002918101919091526060016101d2565b34801561038f575f80fd5b506102cf61039e3660046149ec565b610d8d565b3480156103ae575f80fd5b506101c66103bd366004614a39565b61105c565b3480156103cd575f80fd5b506102cf611066565b3480156103e1575f80fd5b5061040660075460065473ffffffffffffffffffffffffffffffffffffffff90911691565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d2565b34801561043d575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610226565b348015610466575f80fd5b5061047a610475366004614a52565b611079565b6040516101d29190614b52565b348015610492575f80fd5b506104a66104a1366004614b64565b6114bd565b6040516101d29190614b9d565b3480156104be575f80fd5b506102cf6104cd3660046149ec565b61155d565b3480156104dd575f80fd5b506102cf6104ec366004614baf565b6115e6565b3480156104fc575f80fd5b506102cf61050b366004614bee565b6117cd565b34801561051b575f80fd5b5061052f61052a3660046148dc565b61185b565b6040516101d29190614c05565b348015610547575f80fd5b5061047a610556366004614a52565b6119c4565b348015610566575f80fd5b506102cf610575366004614c1c565b611b7e565b348015610585575f80fd5b506102cf610594366004614c1c565b611bf9565b3480156105a4575f80fd5b506102a26105b3366004614c1c565b60056020525f908152604090205481565b3480156105cf575f80fd5b506102cf6105de366004614c37565b611c5c565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061067557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b806106c157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f6106dc6106d486614e6e565b858585611dcc565b90505b949350505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610738576040517f96830d1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107dc9190614e79565b73ffffffffffffffffffffffffffffffffffffffff1603610829576040517fb77f504400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610834838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610901576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156109f2573683838381811061091e5761091e614e94565b90506020028101906109309190614ec1565b90506109476109426020830183614a39565b611fac565b60016109596040830160208401614a39565b63ffffffff1603610999576109946109746020830183614a39565b866109826040850185614efd565b81019061098f9190614f5e565b611ff3565b6109e9565b6109a96040820160208301614a39565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610903565b50505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610a7c576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6080860135610aad610a946060890160408a01614c1c565b73ffffffffffffffffffffffffffffffffffffffff1690565b14610ae4576040517fa4884a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80610af188888861203c565b90925090505f80610b22610b0b60608c0160408d01614c1c565b610b1b60808d0160608e01614a39565b858a6120c1565b9092509050610b318284614fbd565b9250610b4060c08b018b614efd565b604051610b4e929190614fd0565b604051809103902060035f8c6040016020810190610b6c9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f90812090610ba460808e0160608f01614a39565b63ffffffff1681526020808201929092526040015f90812091610bc9908e018e614fdf565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f20819055505f610ce36040518060e001604052808d5f016020810190610c0f9190614fdf565b67ffffffffffffffff1681526020018d6060016020810190610c319190614a39565b63ffffffff1681526020018d6040016020810190610c4f9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff1681526020018d6020016020810190610c7d9190614a39565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610ca960c08f018f614efd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505091525061224b565b6002546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610d3e9084908e908e9060040161503f565b5f604051808303815f87803b158015610d55575f80fd5b505af1158015610d67573d5f803e3d5ffd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610dc7576040517f864d08b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001610dd385856122b0565b60ff1614610e0d576040517f7952a82f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610e3e85856122d1565b63ffffffff1614610e7b576040517f3e96df1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e8685856122f3565b90505f610e938686612304565b90505f610ea08787612313565b73ffffffffffffffffffffffffffffffffffffffff84165f90815260036020908152604080832063ffffffff87168452825280832067ffffffffffffffff851684529091529020549091508514610f23576040517f660e96ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610f2e8484611079565b9050610f53818989604051610f44929190614fd0565b60405180910390208888612335565b5f60405180606001604052808563ffffffff168152602001610f758b8b6124ca565b815267ffffffffffffffff858116602092830152604080517fa825d747000000000000000000000000000000000000000000000000000000008152845163ffffffff16600482015292840151602484015283015116604482015273ffffffffffffffffffffffffffffffffffffffff8781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b15801561103b575f80fd5b505af115801561104d573d5f803e3d5ffd5b50505050505050505050505050565b5f6106c1826124e2565b61106e612560565b6110775f6125b2565b565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88811685526001845286852092855291909252939091208054929391929091168061113057825473ffffffffffffffffffffffffffffffffffffffff16611132565b805b73ffffffffffffffffffffffffffffffffffffffff168452815474010000000000000000000000000000000000000000900460ff1661122257825474010000000000000000000000000000000000000000900460ff161561121d57826001018054806020026020016040519081016040528092919081815260200182805480156111f057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111c5575b50505050506080850152825474010000000000000000000000000000000000000000900460ff1660208501525b6112d6565b815474010000000000000000000000000000000000000000900460ff908116146112d657816001018054806020026020016040519081016040528092919081815260200182805480156112a957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161127e575b50505050506080850152815474010000000000000000000000000000000000000000900460ff1660208501525b81547501000000000000000000000000000000000000000000900460ff166113d35782547501000000000000000000000000000000000000000000900460ff16156113ce578260020180548060200260200160405190810160405280929190818152602001828054801561137e57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611353575b505050505060a0850152825460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114ab565b81547501000000000000000000000000000000000000000000900460ff908116146114ab578160020180548060200260200160405190810160405280929190818152602001828054801561145b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611430575b505050505060a0850152815460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114b484612626565b50505092915050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161151c576114f68385611079565b6040516020016115069190614b52565b6040516020818303038152906040529050611556565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff831660048201526024016109e0565b9392505050565b8060045f8686604051611571929190614fd0565b604080519182900390912082526020808301939093529081015f90812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a95258916115d891879087908790879061506e565b60405180910390a150505050565b6115ee612560565b5f5b8181101561178f573683838381811061160b5761160b614e94565b905060200281019061161d91906150b1565b905060ff61162e60208301836150e3565b61163f906040810190602001615115565b60ff1603611679576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff61168860208301836150e3565b611699906060810190604001615115565b60ff16036116d3576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f16116e360208301836150e3565b6116ec90614e6e565b612626565b5f6116ff60208301836150e3565b61170d906020810190614c1c565b73ffffffffffffffffffffffffffffffffffffffff160361175a576040517f76df55a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117865f61176b6020840184614a39565b61177860208501856150e3565b61178190614e6e565b612677565b506001016115f0565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f3482826040516117c19291906151da565b60405180910390a15050565b6117d5612560565b60065481111561181f576006546040517fb79d12630000000000000000000000000000000000000000000000000000000081526109e0918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f8061187a8686612a25565b90925090505f6118906060890160408a01614c1c565b90505f6118a360808a0160608b01614a39565b90505f6118b08383611079565b90505f6118df82856118c96118c48f61540c565b612c5b565b8e8060c001906118d99190614efd565b8a612d2f565b82516040517fc8f8dcd100000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063c8f8dcd1906119379087908a906004016154a7565b602060405180830381865afa158015611952573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197691906154d5565b6119809082614fbd565b90505f806119908686858d612efb565b909250905061199f8284614fbd565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8084165f90815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff7401000000000000000000000000000000000000000087048116828501527501000000000000000000000000000000000000000000870481168287015276010000000000000000000000000000000000000000000090960490951660608601529182018054845181840281018401909552808552929360808601939092830182828015611b0057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611ad5575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015611b6d57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611b42575b505050505081525050905092915050565b611b86612560565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f90602001611850565b611c01612560565b73ffffffffffffffffffffffffffffffffffffffff8116611c50576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b611c59816125b2565b50565b335f9081526005602052604090205480821115611caf576040517fb79d126300000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016109e0565b335f908152600560209081526040808320858503905580517fe1758bd800000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169263e1758bd892600480820193918290030181865afa158015611d48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190614e79565b9050611d7981858561303c565b6040805133815273ffffffffffffffffffffffffffffffffffffffff861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a6669883906060016115d8565b60208401515f9060ff1615611e80575f5b856020015160ff168160ff161015611e6957611e5486608001518260ff1681518110611e0b57611e0b614e94565b60200260200101518686865f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b611e61575f9150506106df565b600101611ddd565b50846040015160ff165f03611e80575060016106df565b60608501515f5b866040015160ff168160ff161015611f2d57611efe8760a001518260ff1681518110611eb557611eb5614e94565b60200260200101518787875f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b15611f255781611f0d816154ec565b9250508160ff165f03611f25576001925050506106df565b600101611e87565b505f9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611f86576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa773ffffffffffffffffffffffffffffffffffffffff8416838361306c565b505050565b611fb5816124e2565b611c59576040517f0ff03e5400000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526024016109e0565b611ffe828483612677565b6120088284611079565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e14282848360405161088593929190615526565b60605f805f61204b8686612a25565b90925090505f61207461206460608a0160408b01614c1c565b61047560808b0160608c01614a39565b80519091506120939061208d60608b0160408c01614c1c565b856130f9565b93505f806120a2838b86613227565b90925090506120b18287614fbd565b909a909950975050505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526007549192505f9182916121e89173ffffffffffffffffffffffffffffffffffffffff16907f0000000000000000000000000000000000000000000000000000000000000000908490876132ed565b915091506121f887878484613398565b9095509350841561223f5760075473ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604081208054879290612239908490614fbd565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a01519551939861229a986001989197919673ffffffffffffffffffffffffffffffffffffffff169501615560565b6040516020818303038152906040529050919050565b5f6122be6001828486615625565b6122c79161564c565b60f81c9392505050565b5f6122e06031602d8486615625565b6122e991615694565b60e01c9392505050565b5f611556612301848461340f565b90565b5f6122e0600d60098486615625565b5f612322600960018486615625565b61232b916156da565b60c01c9392505050565b61234184848484611dcc565b612377576040517f28ca4b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084015160ff161561241e575f5b846020015160ff168160ff16101561241c575f84815260046020908152604080832086845290915281206080870151805191929160ff85169081106123cd576123cd614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9055806001019050612386565b505b604084015160ff16156109f2575f5b846040015160ff168160ff1610156124c3575f848152600460209081526040808320868452909152812060a0870151805191929160ff851690811061247457612474614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f905580600101905061242d565b5050505050565b5f6124d9602d600d8486615625565b61155691615720565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805474010000000000000000000000000000000000000000900460ff16151580611556575054760100000000000000000000000000000000000000000000900460ff16151592915050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611077576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016109e0565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff161580156126405750606081015160ff16155b15611c59576040517f9b5f9f7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806126925750602081015160ff16155b156126d957608081015151156126d4576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758565b806020015160ff16816080015151141580612714575060026126fd600160ff61575c565b6127079190615775565b60ff16816020015160ff16115b1561274b576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758816080015161341e565b604081015160ff90811614806127735750604081015160ff16155b156127f95760a081015151156127b5576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16156127f4576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d0565b806040015160ff168160a00151511415806128345750600261281d600160ff61575c565b6128279190615775565b60ff16816040015160ff16115b1561286b576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16158061288c5750806040015160ff16816060015160ff16115b156128c3576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d08160a0015161341e565b73ffffffffffffffffffffffffffffffffffffffff8381165f90815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097167fffffffffffffffffffffff000000000000000000000000000000000000000000909116177401000000000000000000000000000000000000000060ff96871602177fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000968616969096027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16959095177601000000000000000000000000000000000000000000009490951693909302939093178255608084015180518594612a0193850192019061458f565b5060a08201518051612a1d91600284019160209091019061458f565b505050505050565b6060806002831015612a65576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b5f612a736002828688615625565b612a7c916157bb565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8201612c4457805f5b86831015612bd1575f612ac560018501858a8c615625565b612ace9161564c565b60f81c90505f819003612b0f576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b8160ff165f03612b2157809150612b5d565b8160ff168160ff1614612b5d57365f612b3c86868c8e615625565b91509150612b4d89898685856134b6565b9099509750859450919250829150505b60018401935f90612b7390600301868b8d615625565b612b7c916157bb565b60f01c90505f819003612bbe576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016109e0565b8060020161ffff16850194505050612aad565b828714612c0d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b6002871115612c3d57365f612c2485858b8d615625565b91509150612c3588888585856134b6565b909850965050505b5050612c52565b612c4f828787613629565b93505b50509250929050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d830152605182015260710161229a565b5f805f612d3b846138a4565b915091505f89604001518a60200151612d549190615801565b90505f5b8160ff168160ff161015612eed575f8b6020015160ff168260ff1610612dac5760a08c015160208d0151612d8c908461575c565b60ff1681518110612d9f57612d9f614e94565b6020026020010151612dce565b8b608001518260ff1681518110612dc557612dc5614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015612e3a578360ff16868281518110612e0157612e01614e94565b602002602001015160ff1603612e3257868181518110612e2357612e23614e94565b60200260200101519150612e3a565b600101612de2565b506040517ffdb9b0f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063fdb9b0f190612e95908f908f908f908f90889060040161581a565b602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed491906154d5565b612ede9088614fbd565b96505050806001019050612d58565b505050509695505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526007549192505f9182916130209173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086613b3e565b9150915061303087878484613398565b94509450505050610d84565b73ffffffffffffffffffffffffffffffffffffffff831661306157611fa78282613be5565b611fa7838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611fa7908490613ce7565b6040517fc015bb7d0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff85169063c015bb7d9061314f90869086906004016154a7565b6020604051808303815f875af115801561316b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061318f91906154d5565b905080156131d15773ffffffffffffffffffffffffffffffffffffffff84165f90815260056020526040812080548392906131cb908490614fbd565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff86168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b5f6060816132376118c48661540c565b90505f61324b6132468761540c565b613d86565b905060606132768861326289840160408b01614c1c565b8561327060c08c018c614efd565b8b613da3565b604051919650915061328e908490849060200161587b565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a00151836040516132da939291906158a9565b60405180910390a1505050935093915050565b5f6060863b80830361331257604080515f80825260208201909252925092505061338e565b5f805f8761ffff1667ffffffffffffffff81111561333257613332614c61565b6040519080825280601f01601f19166020018201604052801561335c576020820181803683370190505b5090505f80885160208a018c8f8ff191503d92508783111561337c578792505b828152825f602083013e909450925050505b9550959350505050565b5f808315806133a8575082516020115b156133b757505f905080610d84565b5f838060200190518101906133cc91906154d5565b905085156133dc57809150613405565b5f60065488116133ee576006546133f0565b875b90508082116133ff5781613401565b805b9350505b5094509492505050565b5f6124d9605160318486615625565b5f805b8251811015611fa7575f83828151811061343d5761343d614e94565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116134ac576040517fc0762a5d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101613421565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161355057865115613513578684846040516020016134ff93929190615905565b604051602081830303815290604052613549565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b965061361e565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016135e7578551156135aa5785848460405160200161359693929190615905565b6040516020818303038152906040526135e0565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b955061361e565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016109e0565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff85160161374e5760228214613690576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6136b06136a2602260028688615625565b6136ab91615720565b614072565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050611556565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff85160161386c576042821115806137895750606282115b156137c0576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6137d26136a2602260028688615625565b90505f6137e66136a2604260228789615625565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613819866042818a615625565b61382291615720565b60405160086020938403029190911c9250613853916001916011918391889183916031916002918b918b910161592b565b6040516020818303038152906040529350505050611556565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016109e0565b60608082515f036138b457915091565b5f6138be846140cb565b90508060ff1660010361396e5760408051600180825281830190925290816020015b60608152602001906001900390816138e057905050925083835f8151811061390a5761390a614e94565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506139428460036141ed565b825f8151811061395457613954614e94565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561398a5761398a614c61565b6040519080825280602002602001820160405280156139b3578160200160208202803683370190505b5091508060ff1667ffffffffffffffff8111156139d2576139d2614c61565b604051908082528060200260200182016040528015613a0557816020015b60608152602001906001900390816139f05790505b5092505f8060ff5b8651831015613ab5576001909201915f613a27888561426c565b6002949094019390505f613a3b89866141ed565b90508260ff1660ff03613a5057809250613aa6565b8260ff168160ff1614613aa6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f613a8e8b87846142eb565b9050613a9c8a8a8784614464565b5093909301929150815b5061ffff169290920191613a0d565b8183035f613ac48985846142eb565b9050613ad288888584614464565b5f5b8660ff168160ff161015613b3257878160ff1681518110613af757613af7614e94565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613ad4565b50505050505050915091565b5f6060853b808303613b6357604080515f808252602082019092529250925050610d84565b5f805f8761ffff1667ffffffffffffffff811115613b8357613b83614c61565b6040519080825280601f01601f191660200182016040528015613bad576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115613bcc578792505b828152825f602083013e90999098509650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216613c32576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114613c88576040519150601f19603f3d011682016040523d82523d5f602084013e613c8d565b606091505b5050905080611fa7576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016109e0565b5f8060205f8451602086015f885af180613d06576040513d5f823e3d81fd5b50505f513d91508115613d1d578060011415613d37565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016109e0565b60608160a001518260c0015160405160200161229a929190615a23565b5f60605f80613db1856138a4565b915091505f8a604001518b60200151613dca9190615801565b90508060ff1667ffffffffffffffff811115613de857613de8614c61565b604051908082528060200260200182016040528015613e11578160200160208202803683370190505b5093505f5b8160ff168160ff161015614063575f8c6020015160ff168260ff1610613e6a5760a08d015160208e0151613e4a908461575c565b60ff1681518110613e5d57613e5d614e94565b6020026020010151613e8c565b8c608001518260ff1681518110613e8357613e83614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015613ef8578360ff16868281518110613ebf57613ebf614e94565b602002602001015160ff1603613ef057868181518110613ee157613ee1614e94565b60200260200101519150613ef8565b600101613ea0565b508173ffffffffffffffffffffffffffffffffffffffff1663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b8152600401613f3a95949392919061581a565b6020604051808303815f875af1158015613f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7a91906154d5565b878460ff1681518110613f8f57613f8f614e94565b6020026020010181815250505f878460ff1681518110613fb157613fb1614e94565b6020026020010151111561405957868360ff1681518110613fd457613fd4614e94565b602002602001015160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546140279190614fbd565b92505081905550868360ff168151811061404357614043614e94565b6020026020010151886140569190614fbd565b97505b5050600101613e16565b50505050965096945050505050565b5f6fffffffffffffffffffffffffffffffff8211156140c7576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016109e0565b5090565b5f80805b83518210156141a9576001909101905f6140e9858461426c565b905060028301925060028161ffff161015614133576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b5f61413e86856141ed565b90508060ff1660ff0361417d576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b831661419a5760019485019460ff82161b831792505b5061ffff1691909101906140cf565b835182146141e6576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018390526024016109e0565b5050919050565b5f6141f9826001614fbd565b83511015614263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e64730000000000000000000000000060448201526064016109e0565b50016001015190565b5f614278826002614fbd565b835110156142e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e647300000000000000000000000060448201526064016109e0565b50016002015190565b6060816142f981601f614fbd565b1015614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b61436b8284614fbd565b845110156143d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b6060821580156143f35760405191505f82526020820160405261445b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561442c578051835260209283019201614414565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff036144a1576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144ad836001615801565b90505f5b8451811015612a1d575f8582815181106144cd576144cd614e94565b602002602001015190508060ff168360ff1603614542578682815181106144f6576144f6614e94565b60200260200101518460405160200161451092919061587b565b60405160208183030381529060405287838151811061453157614531614e94565b602002602001018190525050612a1d565b8060ff165f03614586578286838151811061455f5761455f614e94565b602002602001019060ff16908160ff16815250508387838151811061453157614531614e94565b506001016144b1565b828054828255905f5260205f20908101928215614607579160200282015b8281111561460757825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906145ad565b506140c79291505b808211156140c7575f815560010161460f565b5f60208284031215614632575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611556575f80fd5b5f805f8060808587031215614674575f80fd5b843567ffffffffffffffff81111561468a575f80fd5b850160c0818803121561469b575f80fd5b966020860135965060408601359560600135945092505050565b60208101600383106146ee577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b73ffffffffffffffffffffffffffffffffffffffff81168114611c59575f80fd5b8035614720816146f4565b919050565b803563ffffffff81168114614720575f80fd5b803567ffffffffffffffff81168114614720575f80fd5b5f805f60608486031215614761575f80fd5b833561476c816146f4565b925061477a60208501614725565b915061478860408501614738565b90509250925092565b5f805f606084860312156147a3575f80fd5b83356147ae816146f4565b925060208401356147be816146f4565b929592945050506040919091013590565b5f8083601f8401126147df575f80fd5b50813567ffffffffffffffff8111156147f6575f80fd5b6020830191508360208260051b8501011115614810575f80fd5b9250929050565b5f805f60408486031215614829575f80fd5b8335614834816146f4565b9250602084013567ffffffffffffffff81111561484f575f80fd5b61485b868287016147cf565b9497909650939450505050565b5f805f6060848603121561487a575f80fd5b83359250602084013591506040840135614893816146f4565b809150509250925092565b5f8083601f8401126148ae575f80fd5b50813567ffffffffffffffff8111156148c5575f80fd5b602083019150836020828501011115614810575f80fd5b5f805f80606085870312156148ef575f80fd5b843567ffffffffffffffff80821115614906575f80fd5b9086019060e08289031215614919575f80fd5b9094506020860135908082111561492e575f80fd5b5061493b8782880161489e565b90945092505060408501358015158114614953575f80fd5b939692955090935050565b5f5b83811015614978578181015183820152602001614960565b50505f910152565b5f815180845261499781602086016020860161495e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f6106df6060830184614980565b5f805f80606085870312156149ff575f80fd5b843567ffffffffffffffff811115614a15575f80fd5b614a218782880161489e565b90989097506020870135966040013595509350505050565b5f60208284031215614a49575f80fd5b61155682614725565b5f8060408385031215614a63575f80fd5b8235614a6e816146f4565b9150614a7c60208401614725565b90509250929050565b5f815180845260208085019450602084015f5b83811015614aca57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614a98565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152614b3060c0850182614a85565b905060a083015184820360a0860152614b498282614a85565b95945050505050565b602081525f6115566020830184614ad5565b5f805f60608486031215614b76575f80fd5b614b7f84614725565b92506020840135614b8f816146f4565b915061478860408501614725565b602081525f6115566020830184614980565b5f8060208385031215614bc0575f80fd5b823567ffffffffffffffff811115614bd6575f80fd5b614be2858286016147cf565b90969095509350505050565b5f60208284031215614bfe575f80fd5b5035919050565b8151815260208083015190820152604081016106c1565b5f60208284031215614c2c575f80fd5b8135611556816146f4565b5f8060408385031215614c48575f80fd5b8235614c53816146f4565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b60405290565b60405160e0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614d2157614d21614c61565b604052919050565b803560ff81168114614720575f80fd5b5f82601f830112614d48575f80fd5b8135602067ffffffffffffffff821115614d6457614d64614c61565b8160051b614d73828201614cda565b9283528481018201928281019087851115614d8c575f80fd5b83870192505b84831015614db4578235614da5816146f4565b82529183019190830190614d92565b979650505050505050565b5f60c08284031215614dcf575f80fd5b614dd7614c8e565b9050614de282614715565b8152614df060208301614d29565b6020820152614e0160408301614d29565b6040820152614e1260608301614d29565b6060820152608082013567ffffffffffffffff80821115614e31575f80fd5b614e3d85838601614d39565b608084015260a0840135915080821115614e55575f80fd5b50614e6284828501614d39565b60a08301525092915050565b5f6106c13683614dbf565b5f60208284031215614e89575f80fd5b8151611556816146f4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614ef3575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f30575f80fd5b83018035915067ffffffffffffffff821115614f4a575f80fd5b602001915036819003821315614810575f80fd5b5f60208284031215614f6e575f80fd5b813567ffffffffffffffff811115614f84575f80fd5b6106df84828501614dbf565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156106c1576106c1614f90565b818382375f9101908152919050565b5f60208284031215614fef575f80fd5b61155682614738565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f6150516040830186614980565b8281036020840152615064818587614ff8565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f61509d608083018688614ff8565b604083019490945250606001529392505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614ef3575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614ef3575f80fd5b5f60208284031215615125575f80fd5b61155682614d29565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615161575f80fd5b830160208101925035905067ffffffffffffffff811115615180575f80fd5b8060051b3603821315614810575f80fd5b8183525f60208085019450825f5b85811015614aca5781356151b2816146f4565b73ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161519f565b60208082528181018390525f906040808401600586901b8501820187855b88811015615374577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112615259575f80fd5b8b0163ffffffff61526982614725565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4182360301811261529f575f80fd5b8589018890520180356152b1816146f4565b73ffffffffffffffffffffffffffffffffffffffff16858801526152d6818901614d29565b606060ff808316828901526152ec8a8501614d29565b92506080818416818a0152615302838601614d29565b935060a09250818416838a015261531b8186018661512e565b60c08b81015294509150615336905061010089018483615191565b9250506153458184018461512e565b93509050838783030160e088015261535e828483615191565b978a0197965050509287019250506001016151f8565b509098975050505050505050565b5f82601f830112615391575f80fd5b813567ffffffffffffffff8111156153ab576153ab614c61565b6153dc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614cda565b8181528460208386010111156153f0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0823603121561541c575f80fd5b615424614cb7565b61542d83614738565b815261543b60208401614725565b602082015261544c60408401614715565b604082015261545d60608401614725565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff81111561548f575f80fd5b61549b36828601615382565b60c08301525092915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6106df6040830184614980565b5f602082840312156154e5575f80fd5b5051919050565b5f60ff8216806154fe576154fe614f90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6106dc6060830184614ad5565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d84015250846031830152836051830152825161561181607185016020870161495e565b919091016071019998505050505050505050565b5f8085851115615633575f80fd5b8386111561563f575f80fd5b5050820193919092039150565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561568c5780818660010360031b1b83161692505b505092915050565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561568c5760049490940360031b84901b1690921692915050565b7fffffffffffffffff000000000000000000000000000000000000000000000000813581811691600885101561568c5760089490940360031b84901b1690921692915050565b803560208310156106c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b60ff82811682821603908111156106c1576106c1614f90565b5f60ff8316806157ac577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561568c5760029490940360031b84901b1690921692915050565b60ff81811683821601908111156106c1576106c1614f90565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f6158486080830187614980565b828103604084015261585b818688614ff8565b9050828103606084015261586f8185614980565b98975050505050505050565b5f835161588c81846020880161495e565b8351908301906158a081836020880161495e565b01949350505050565b606081525f6158bb6060830186614a85565b602083820360208501526158cf8287614a85565b8481036040860152855180825260208088019450909101905f5b81811015615374578451835293830193918301916001016158e9565b5f845161591681846020890161495e565b8201838582375f930192835250909392505050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b16601784015250615a0b601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b50602881019190915260480198975050505050505050565b8281525f8251615a3a81602085016020870161495e565b91909101602001939250505056fea2646970667358221220bea5f362b07accaf075edb98d71a1b4a7df6e2ebc2aacf15c6426cab5ad7691964736f6c63430008160033608060405234801562000010575f80fd5b5060405162003af938038062003af983398101604081905262000033916200045e565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b038581169190911790915584908490612ee090859085908216156200008d576200008b5f8362000220565b505b5f5b8551811015620000f157620000e77f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d357620000d36200050c565b60200260200101516200022060201b60201c565b506001016200008f565b505f5b81518110156200014257620001387fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d357620000d36200050c565b50600101620000f4565b505060016004908155600680546001600160a01b0319166001600160a01b038d169081179091556040805163416ecebf60e01b8152905191965063416ecebf95508083019450602093509091908290030181865afa158015620001a7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001cd919062000520565b6006805463ffffffff92909216600160a01b0263ffffffff60a01b199092169190911790555050600780546001600160a01b039094166001600160a01b0319909416939093179092555062000586915050565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156200027157505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620002be57600180546015906200029990600160a81b90046001600160401b03166200054c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b620002ca8383620002d6565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1662000379575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003303390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620002d0565b505f620002d0565b80516001600160a01b038116811462000398575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620003c1575f80fd5b815160206001600160401b0380831115620003e057620003e06200039d565b8260051b604051601f19603f830116810181811084821117156200040857620004086200039d565b604052938452602081870181019490810192508785111562000428575f80fd5b6020870191505b848210156200045357620004438262000381565b835291830191908301906200042f565b979650505050505050565b5f805f805f8060c0878903121562000474575f80fd5b6200047f8762000381565b95506200048f6020880162000381565b60408801519095506001600160401b0380821115620004ac575f80fd5b620004ba8a838b01620003b1565b9550620004ca60608a0162000381565b9450620004da60808a0162000381565b935060a0890151915080821115620004f0575f80fd5b50620004ff89828a01620003b1565b9150509295509295509295565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121562000531575f80fd5b815163ffffffff8116811462000545575f80fd5b9392505050565b5f6001600160401b038281166002600160401b031981016200057c57634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b61356580620005945f395ff3fe608060405260043610610242575f3560e01c8063724e78da11610131578063c358de0a116100ac578063cd88b9031161007c578063d2ae210411610062578063d2ae2104146107ae578063d547741f14610800578063e395eb5c1461081f575f80fd5b8063cd88b9031461077c578063cfc325701461079b575f80fd5b8063c358de0a146106ee578063c416aa511461070d578063c7b2370b1461073e578063c8f8dcd11461075d575f80fd5b806391d1485411610101578063a217fddf116100e7578063a217fddf14610690578063c015bb7d146106a3578063c2803b2c146106c2575f80fd5b806391d14854146105675780639e944965146105b6575f80fd5b8063724e78da146104f6578063741bef1a146105155780637cd44734146105415780638624ba0714610554575f80fd5b80633146646a116101c1578063475b6d9e116101915780635e280f11116101775780635e280f1114610467578063709eb664146104b8578063717e8a42146104d7575f80fd5b8063475b6d9e1461043d5780635c975abb14610450575f80fd5b80633146646a146103cd57806336568abe146103ec5780633927c0751461040b5780633d85ac331461041e575f80fd5b806316c38b3c1161021657806326e67a37116101fc57806326e67a37146103635780632de113761461038f5780632f2ff15d146103ae575f80fd5b806316c38b3c14610308578063248a9ca314610327575f80fd5b8062bf2e801461024657806301e336671461029957806301ffc9a7146102ba5780631095b6d7146102e9575b5f80fd5b348015610251575f80fd5b50600154610281907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b3480156102a4575f80fd5b506102b86102b336600461267b565b610868565b005b3480156102c5575f80fd5b506102d96102d43660046126b4565b6108a3565b6040519015158152602001610290565b3480156102f4575f80fd5b506102b861030336600461267b565b61093b565b348015610313575f80fd5b506102b86103223660046126f3565b610ac4565b348015610332575f80fd5b50610355610341366004612712565b5f9081526020819052604090206001015490565b604051908152602001610290565b34801561036e575f80fd5b5061038261037d36600461273c565b610ae8565b6040516102909190612755565b34801561039a575f80fd5b506102d96103a936600461279b565b610b6b565b3480156103b9575f80fd5b506102b86103c83660046127b4565b610c4c565b3480156103d8575f80fd5b506102b86103e7366004612823565b610c70565b3480156103f7575f80fd5b506102b86104063660046127b4565b610d33565b6102b86104193660046128c2565b610d65565b348015610429575f80fd5b506102b8610438366004612a3b565b610e53565b6102b861044b366004612b50565b611035565b34801561045b575f80fd5b5060015460ff166102d9565b348015610472575f80fd5b506006546104939073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610290565b3480156104c3575f80fd5b506103556104d2366004612bca565b611089565b3480156104e2575f80fd5b506103556104f1366004612bca565b6111e5565b348015610501575f80fd5b506102b861051036600461279b565b611365565b348015610520575f80fd5b506002546104939073ffffffffffffffffffffffffffffffffffffffff1681565b6102b861054f366004612c34565b611402565b6102b8610562366004612cf0565b6114e1565b348015610572575f80fd5b506102d96105813660046127b4565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156105c1575f80fd5b506106436105d036600461273c565b60056020525f90815260409020805460019091015467ffffffffffffffff8083169261ffff68010000000000000000820416926fffffffffffffffffffffffffffffffff6a0100000000000000000000909204821692918116917001000000000000000000000000000000009091041685565b6040805167ffffffffffffffff968716815261ffff90951660208601526fffffffffffffffffffffffffffffffff938416908501529116606083015291909116608082015260a001610290565b34801561069b575f80fd5b506103555f81565b3480156106ae575f80fd5b506103556106bd366004612d5e565b611616565b3480156106cd575f80fd5b506007546104939073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f9575f80fd5b506102b8610708366004612dad565b6117a3565b348015610718575f80fd5b5060015461049390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b348015610749575f80fd5b506102b861075836600461279b565b611851565b348015610768575f80fd5b50610355610777366004612d5e565b6118f5565b348015610787575f80fd5b506102b8610796366004612dc6565b611a56565b6102b86107a9366004612e45565b611a9f565b3480156107b9575f80fd5b506001546107e7907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610290565b34801561080b575f80fd5b506102b861081a3660046127b4565b611b7d565b34801561082a575f80fd5b506006546108539074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610290565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561089281611ba1565b61089d848484611bae565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061093557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561096581611ba1565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff166109e2576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610a4f575f80fd5b505af1158015610a61573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b5f610ace81611ba1565b8115610ae057610adc611be3565b5050565b610adc611c62565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610b5f57602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b305790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610bbe57505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610c33575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610c4057506001919050565b505f919050565b919050565b5f82815260208190526040902060010154610c6681611ba1565b61089d8383611cb9565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610c9a81611ba1565b610ca2611d89565b6007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610cfc90879087908790600401612ec6565b5f604051808303815f87803b158015610d13575f80fd5b505af1158015610d25573d5f803e3d5ffd5b5050505061089d6001600455565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610d8f81611ba1565b610d97611d89565b610db788610da58686611dcc565b610daf8787611dee565b8a8a8a611e06565b506007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610e1290879087908790600401612ec6565b5f604051808303815f87803b158015610e29575f80fd5b505af1158015610e3b573d5f803e3d5ffd5b50505050610e496001600455565b5050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610e7d81611ba1565b5f5b8251811015610ff9575f838281518110610e9b57610e9b612ee9565b6020908102919091018101516040805160a080820183528385015167ffffffffffffffff908116835260608086015161ffff9081168589019081526080808901516fffffffffffffffffffffffffffffffff908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff165f9081526005909a5296909820945185549851945188166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff9590921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090991690841617979097179290921695909517825551600191820180549351909516700100000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931693169290921717909155919091019050610e7f565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc53826040516110299190612f16565b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561105f81611ba1565b611067611d89565b611075878787878787611e06565b506110806001600455565b50505050505050565b5f8461109481610b6b565b6110ca576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110d2611f73565b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a1660208084018290528a831684860152606084018a905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f434ee01600000000000000000000000000000000000000000000000000000000815292936101009091049091169163434ee0169161119a918591908a908a90600401612fbc565b602060405180830381865afa1580156111b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d99190613079565b98975050505050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61121081611ba1565b8561121a81610b6b565b611250576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8b1660208084018290528b831684860152606084018b905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f566ef76200000000000000000000000000000000000000000000000000000000815292936101009091049091169163566ef76291611318918591908b908b90600401612fbc565b6020604051808303815f875af1158015611334573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113589190613079565b9998505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561138f81611ba1565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561142c81611ba1565b611434611d89565b6006546040517f91d20fa100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906391d20fa1908490349061149c908f908f908f908f908f908f908f908f90600401613090565b5f604051808303818589803b1580156114b3575f80fd5b5088f11580156114c5573d5f803e3d5ffd5b5050505050506114d56001600455565b50505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561150b81611ba1565b611513611d89565b6006545f9061155190602085019074010000000000000000000000000000000000000000900463ffffffff16611549828761279b565b898989611e06565b90505f61155e8234613128565b60065490915073ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08601358360208801611593818a61279b565b60808a01356115a560a08c018c61313b565b6115b260c08e018e61313b565b6040518a63ffffffff1660e01b81526004016115d497969594939291906131d6565b5f604051808303818589803b1580156115eb575f80fd5b5088f11580156115fd573d5f803e3d5ffd5b505050505050505061160f6001600455565b5050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61164181611ba1565b8461164b81610b6b565b611681576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528881166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f65003784000000000000000000000000000000000000000000000000000000008152929361010090910490911691636500378491611758918591908b908b90600401613239565b6020604051808303815f875af1158015611774573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117989190613079565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756117cd81611ba1565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561187b81611ba1565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611029565b5f8361190081610b6b565b611936576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528781166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f337c7a9e00000000000000000000000000000000000000000000000000000000815292936101009091049091169163337c7a9e91611a0d918591908a908a90600401613239565b602060405180830381865afa158015611a28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4c9190613079565b9695505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a8081611ba1565b63ffffffff84165f90815260036020526040902061160f9084846125a0565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611ac981611ba1565b611ad1611d89565b60065473ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08401353460208601611b03818861279b565b6080880135611b1560a08a018a61313b565b611b2260c08c018c61313b565b6040518a63ffffffff1660e01b8152600401611b4497969594939291906131d6565b5f604051808303818589803b158015611b5b575f80fd5b5088f1158015611b6d573d5f803e3d5ffd5b505050505050610adc6001600455565b5f82815260208190526040902060010154611b9781611ba1565b61089d8383611fb2565b611bab8133612077565b50565b73ffffffffffffffffffffffffffffffffffffffff8316611bd857611bd38282612101565b505050565b611bd3838383612203565b611beb611f73565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611c6a612271565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611c38565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015611d1657505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15611d755760018054601590611d4e907501000000000000000000000000000000000000000000900467ffffffffffffffff166132e9565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836122ad565b5060019392505050565b600260045403611dc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600455565b5f611ddb6031602d848661330f565b611de491613336565b60e01c9392505050565b5f611dff611dfc84846123a6565b90565b9392505050565b5f808367ffffffffffffffff811115611e2157611e2161294f565b604051908082528060200260200182016040528015611e4a578160200160208202803683370190505b5090505f5b84811015611f26575f868683818110611e6a57611e6a612ee9565b905060400201803603810190611e80919061337e565b90505f815f015173ffffffffffffffffffffffffffffffffffffffff16826020015187906040515f60405180830381858888f193505050503d805f8114611ee2576040519150601f19603f3d011682016040523d82523d5f602084013e611ee7565b606091505b5050905080848481518110611efe57611efe612ee9565b911515602092830291909101820152820151611f1a90866133d3565b94505050600101611e4f565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c3468888888888886604051611f6096959493929190613422565b60405180910390a1509695505050505050565b60015460ff1615611fb0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561200e57505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b1561206d5760018054601590612046907501000000000000000000000000000000000000000000900467ffffffffffffffff166134b2565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836123be565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610adc576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661214e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146121a4576040519150601f19603f3d011682016040523d82523d5f602084013e6121a9565b606091505b5050905080611bd3576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016120f8565b73ffffffffffffffffffffffffffffffffffffffff8216612250576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bd373ffffffffffffffffffffffffffffffffffffffff84168383612477565b60015460ff16611fb0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561233d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610935565b505f610935565b5f6123b560516031848661330f565b611dff916134f3565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610935565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251611bd393879390925f9283929183919082885af180612520576040513d5f823e3d81fd5b50505f513d91508115612537578060011415612551565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561089d576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016120f8565b828054828255905f5260205f2090601f01602090048101928215612634579160200282015f5b8382111561260657833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026125c6565b80156126325782816101000a81549060ff02191690556001016020815f01049283019260010302612606565b505b50612640929150612644565b5090565b5b80821115612640575f8155600101612645565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f805f6060848603121561268d575f80fd5b61269684612658565b92506126a460208501612658565b9150604084013590509250925092565b5f602082840312156126c4575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611dff575f80fd5b5f60208284031215612703575f80fd5b81358015158114611dff575f80fd5b5f60208284031215612722575f80fd5b5035919050565b803563ffffffff81168114610c47575f80fd5b5f6020828403121561274c575f80fd5b611dff82612729565b602080825282518282018190525f9190848201906040850190845b8181101561278f57835160ff1683529284019291840191600101612770565b50909695505050505050565b5f602082840312156127ab575f80fd5b611dff82612658565b5f80604083850312156127c5575f80fd5b823591506127d560208401612658565b90509250929050565b5f8083601f8401126127ee575f80fd5b50813567ffffffffffffffff811115612805575f80fd5b60208301915083602082850101111561281c575f80fd5b9250929050565b5f805f60408486031215612835575f80fd5b833567ffffffffffffffff81111561284b575f80fd5b612857868287016127de565b909790965060209590950135949350505050565b5f6060828403121561287b575f80fd5b50919050565b5f8083601f840112612891575f80fd5b50813567ffffffffffffffff8111156128a8575f80fd5b6020830191508360208260061b850101111561281c575f80fd5b5f805f805f805f60e0888a0312156128d8575f80fd5b6128e2898961286b565b9650606088013567ffffffffffffffff808211156128fe575f80fd5b61290a8b838c01612881565b909850965060808a0135955060a08a0135915080821115612929575f80fd5b506129368a828b016127de565b989b979a5095989497959660c090950135949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff8111828210171561299f5761299f61294f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156129ec576129ec61294f565b604052919050565b803567ffffffffffffffff81168114610c47575f80fd5b803561ffff81168114610c47575f80fd5b80356fffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f6020808385031215612a4c575f80fd5b823567ffffffffffffffff80821115612a63575f80fd5b818501915085601f830112612a76575f80fd5b813581811115612a8857612a8861294f565b612a96848260051b016129a5565b818152848101925060c0918202840185019188831115612ab4575f80fd5b938501935b82851015612b445780858a031215612acf575f80fd5b612ad761297c565b612ae086612729565b8152612aed8787016129f4565b878201526040612afe8188016129f4565b908201526060612b0f878201612a0b565b908201526080612b20878201612a1c565b9082015260a0612b31878201612a1c565b9082015284529384019392850192612ab9565b50979650505050505050565b5f805f805f8060e08789031215612b65575f80fd5b612b6f888861286b565b9550612b7d60608801612729565b9450612b8b60808801612658565b935060a087013567ffffffffffffffff811115612ba6575f80fd5b612bb289828a01612881565b979a969950949794969560c090950135949350505050565b5f805f805f60808688031215612bde575f80fd5b612be786612729565b9450612bf560208701612658565b935060408601359250606086013567ffffffffffffffff811115612c17575f80fd5b612c23888289016127de565b969995985093965092949392505050565b5f805f805f805f805f60e08a8c031215612c4c575f80fd5b612c558a612658565b9850612c6360208b01612658565b975060408a01359650612c7860608b01612a0b565b955060808a013567ffffffffffffffff80821115612c94575f80fd5b612ca08d838e016127de565b909750955060a08c0135915080821115612cb8575f80fd5b50612cc58c828d016127de565b9a9d999c50979a9699959894979660c00135949350505050565b5f610100828403121561287b575f80fd5b5f805f8060608587031215612d03575f80fd5b843567ffffffffffffffff80821115612d1a575f80fd5b612d2688838901612881565b9096509450602087013593506040870135915080821115612d45575f80fd5b50612d5287828801612cdf565b91505092959194509250565b5f805f60408486031215612d70575f80fd5b612d7984612658565b9250602084013567ffffffffffffffff811115612d94575f80fd5b612da0868287016127de565b9497909650939450505050565b5f60208284031215612dbd575f80fd5b611dff82612a0b565b5f805f60408486031215612dd8575f80fd5b612de184612729565b9250602084013567ffffffffffffffff80821115612dfd575f80fd5b818601915086601f830112612e10575f80fd5b813581811115612e1e575f80fd5b8760208260051b8501011115612e32575f80fd5b6020830194508093505050509250925092565b5f60208284031215612e55575f80fd5b813567ffffffffffffffff811115612e6b575f80fd5b612e7784828501612cdf565b949350505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f612ed9604083018587612e7f565b9050826020830152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f919060409081850190868401855b82811015612faf578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c09093019290850190600101612f32565b5091979650505050505050565b845173ffffffffffffffffffffffffffffffffffffffff908116825260208087015163ffffffff1690830152604080870151909116818301526060808701519083015260808087015161ffff90811682850152865467ffffffffffffffff80821660a08701529381901c90911660c085015260501c6fffffffffffffffffffffffffffffffff90811660e08501526001870154908116610100850152901c166101208201525f610160806101408401526117988184018587612e7f565b5f60208284031215613089575f80fd5b5051919050565b5f73ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525087604083015261ffff8716606083015260c060808301526130d960c083018688612e7f565b82810360a08401526130ec818587612e7f565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610935576109356130fb565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261316e575f80fd5b83018035915067ffffffffffffffff821115613188575f80fd5b60200191503681900382131561281c575f80fd5b63ffffffff6131aa82612729565b1682526020810135602083015267ffffffffffffffff6131cc604083016129f4565b1660408301525050565b6131e0818961319c565b73ffffffffffffffffffffffffffffffffffffffff8716606082015285608082015260e060a08201525f61321860e083018688612e7f565b82810360c084015261322b818587612e7f565b9a9950505050505050505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff8088511684528060208901511660208501525061ffff60408801511660408401526132d56060840187805467ffffffffffffffff808216845261ffff8260401c1660208501526fffffffffffffffffffffffffffffffff808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b806101008401526117988184018587612e7f565b5f67ffffffffffffffff808316818103613305576133056130fb565b6001019392505050565b5f808585111561331d575f80fd5b83861115613329575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156133765780818660040360031b1b83161692505b505092915050565b5f6040828403121561338e575f80fd5b6040516040810181811067ffffffffffffffff821117156133b1576133b161294f565b6040526133bd83612658565b8152602083013560208201528091505092915050565b80820180821115610935576109356130fb565b5f815180845260208085019450602084015f5b838110156134175781511515875295820195908201906001016133f9565b509495945050505050565b5f60e08201613431838a61319c565b63ffffffff8816606084015273ffffffffffffffffffffffffffffffffffffffff878116608085015260e060a085015290859052859061010084015f5b8781101561349f578261348085612658565b168252602084810135908301526040938401939091019060010161346e565b5084810360c08601526130ec81876133e6565b5f67ffffffffffffffff8216806134cb576134cb6130fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b80356020831015610935577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b169291505056fea2646970667358221220bf4067662d56dc81125eda238718adb88046662d26b0b352f03d651c8af9702b64736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b5038038062001b508339810160408190526200003391620000cf565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000080565b5063ffffffff1660a052670de0b6b3a7640000608052620000fb565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215620000e0575f80fd5b815163ffffffff81168114620000f4575f80fd5b9392505050565b60805160a051611a2c620001245f395f818161023a01526102ee01525f61083d0152611a2c5ff3fe608060405260043610610096575f3560e01c8063566ef76211610066578063715018a61161004c578063715018a6146101715780638da5cb5b14610185578063f2fde38b146101b8575f80fd5b8063566ef762146101335780636500378414610152575f80fd5b806301e33667146100a1578063337c7a9e146100c2578063434ee016146100f457806354fd4d5014610113575f80fd5b3661009d57005b5f80fd5b3480156100ac575f80fd5b506100c06100bb366004611549565b6101d7565b005b3480156100cd575f80fd5b506100e16100dc3660046115dd565b6101ef565b6040519081526020015b60405180910390f35b3480156100ff575f80fd5b506100e161010e366004611644565b610408565b34801561011e575f80fd5b506040805160018082526020820152016100eb565b34801561013e575f80fd5b506100e161014d366004611644565b61060a565b34801561015d575f80fd5b506100e161016c3660046115dd565b610620565b34801561017c575f80fd5b506100c061062d565b348015610190575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100eb565b3480156101c3575f80fd5b506100c06101d236600461168d565b610640565b6101df6106a3565b6101ea8383836106f5565b505050565b5f6101fd60208501856116ad565b67ffffffffffffffff165f0361026c576040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024015b60405180910390fd5b5f80806102a960018261028260208b018b6116ad565b61029260a08c0160808d016116ad565b6102a260808d0160608e016116f1565b8b8b610725565b919450925090505f8080806102c160208d018d61168d565b6040517f88a4124c00000000000000000000000000000000000000000000000000000000815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152871660248201526044810188905273ffffffffffffffffffffffffffffffffffffffff91909116906388a4124c90606401608060405180830381865afa158015610360573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610384919061170c565b929650909450925090506103ce846103a260408e0160208f0161175e565b8e60400160208101906103b5919061175e565b8e60400160208101906103c891906116f1565b856107b5565b97506103ee8784848f60400160208101906103e9919061175e565b6108ab565b6103f890896117ac565b9c9b505050505050505050505050565b5f61041660208501856116ad565b67ffffffffffffffff165f036104715761043660408601602087016117c5565b6040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610263565b5f806104c38161048f61048a60408b0160208c016117c5565b505f90565b61049c60208a018a6116ad565b6104ac60a08b0160808c016116ad565b6104bc60808c0160608d016116f1565b8a8a610725565b5090925090505f8080806104da60208c018c61168d565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61050560408e0160208f016117c5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff91909116600482015260608e0135602482015260448101889052606401608060405180830381865afa15801561056e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610592919061170c565b929650909450925090506105d6846105b060408d0160208e0161175e565b8d60800160208101906105c3919061175e565b8d60400160208101906103c891906116f1565b96506105f18684848e60800160208101906103e9919061175e565b6105fb90886117ac565b9b9a5050505050505050505050565b5f61061785858585610408565b95945050505050565b5f610617858585856101ef565b6106356106a3565b61063e5f610911565b565b6106486106a3565b73ffffffffffffffffffffffffffffffffffffffff8116610697576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610263565b6106a081610911565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461063e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610263565b73ffffffffffffffffffffffffffffffffffffffff831661071a576101ea8282610985565b6101ea838383610a87565b5f805f8061073686868d8d8b610af5565b805160608201516080830151919650935090915061075e9067ffffffffffffffff8a166117e8565b60208201516107779067ffffffffffffffff8c166117ac565b61078191906117ac565b92508060400151156107a757606461079a8460666117e8565b6107a491906117ff565b92505b509750975097945050505050565b5f8061ffff8616156107c757856107c9565b845b90505f6127106107dd61ffff84168a6117e8565b6107e791906117ff565b90506fffffffffffffffffffffffffffffffff8416158061081857506fffffffffffffffffffffffffffffffff8516155b156108265791506106179050565b5f88856fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000886fffffffffffffffffffffffffffffffff1661087991906117e8565b61088391906117ff565b61088d91906117ac565b905081811161089c578161089e565b805b9998505050505050505050565b5f8415610909576127108261ffff16846fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff16886108eb91906117e8565b6108f591906117ff565b6108ff91906117e8565b61061791906117ff565b949350505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166109d2576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610a28576040519150601f19603f3d011682016040523d82523d5f602084013e610a2d565b606091505b50509050806101ea576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610263565b73ffffffffffffffffffffffffffffffffffffffff8216610ad4576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101ea73ffffffffffffffffffffffffffffffffffffffff8416838361110f565b610b2a6040518060a001604052805f81526020015f81526020015f151581526020015f63ffffffff1681526020015f81525090565b5f859003610b63576040517e575ea100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80805b87831015610fbc575f368180610b7e8d8d8961119c565b9950919550935091508690507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff851601610ca6578a15610bf1576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610bfd85856111f1565b915091508b8015610c1f57505f816fffffffffffffffffffffffffffffffff16115b15610c5b576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff87166004820152602401610263565b806fffffffffffffffffffffffffffffffff168a5f01818151610c7e91906117ac565b905250610c9d6fffffffffffffffffffffffffffffffff8316896117ac565b97505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff851601610d48578a15610d0d576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f610d18848461126c565b509050806fffffffffffffffffffffffffffffffff16895f01818151610d3e91906117ac565b905250610fb39050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff851601610e75578915610daf576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610dbb85856112c1565b9250925050816fffffffffffffffffffffffffffffffff165f03610e0b576040517fa169d0e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806fffffffffffffffffffffffffffffffff168a5f01818151610e2e91906117ac565b90525060208a0180516fffffffffffffffffffffffffffffffff84169190610e579083906117ac565b90525060808a01805190610e6a82611837565b815250505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60ff851601610eab5760016040890152610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff851601610f7c578a610f11576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f805f610f1e868661134b565b925092509250806fffffffffffffffffffffffffffffffff168b5f01818151610f4791906117ac565b905250610f666fffffffffffffffffffffffffffffffff84168a6117ac565b9850610f72828961186e565b9750505050610fb3565b6040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b50505050610b67565b828814610ff8576040517f990776ea00000000000000000000000000000000000000000000000000000000815260048101849052602401610263565b83516fffffffffffffffffffffffffffffffff861610156110625783516040517e84ce0200000000000000000000000000000000000000000000000000000000815260048101919091526fffffffffffffffffffffffffffffffff86166024820152604401610263565b815f0361109b576040517fe5eb8f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8680156110ac575063ffffffff8116155b156110e3576040517f6cc33f0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81846020018181516110f591906117ac565b90525063ffffffff16606084015250909695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526101ea9084906113cc565b5f368160018401816111af888884611471565b6002929092019190506111c3888884611497565b94506001820161ffff821683016111dc81838b8d611892565b979b909a50969850505061ffff160193505050565b5f8060108314801590611205575060208314155b1561123c576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124784845f6114bb565b915060208314611257575f611263565b611263848460106114bb565b90509250929050565b5f80603083146112a8576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112b384845f6114bb565b9150611263848460106114e1565b5f8080601284148015906112d6575060228414155b1561130d576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61131885855f611471565b9250611326858560026114bb565b915060228414611336575f611342565b611342858560126114bb565b90509250925092565b5f808060148414801590611360575060248414155b15611397576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113a285855f6114bb565b92506113b0858560106114fb565b9150602484146113c0575f611342565b611342858560146114bb565b5f8060205f8451602086015f885af1806113eb576040513d5f823e3d81fd5b50505f513d9150811561140257806001141561141c565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561146b576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610263565b50505050565b5f6002820161148281848688611892565b61148b916118b9565b60f01c95945050505050565b5f8383838181106114aa576114aa611901565b919091013560f81c95945050505050565b5f601082016114cc81848688611892565b6114d59161192e565b60801c95945050505050565b5f602082016114f281848688611892565b61061791611974565b5f6004820161150c81848688611892565b611515916119b0565b60e01c95945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611544575f80fd5b919050565b5f805f6060848603121561155b575f80fd5b61156484611521565b925061157260208501611521565b9150604084013590509250925092565b5f60a08284031215611592575f80fd5b50919050565b5f8083601f8401126115a8575f80fd5b50813567ffffffffffffffff8111156115bf575f80fd5b6020830191508360208285010111156115d6575f80fd5b9250929050565b5f805f808486036101208112156115f2575f80fd5b60608112156115ff575f80fd5b508493506116108660608701611582565b925061010085013567ffffffffffffffff81111561162c575f80fd5b61163887828801611598565b95989497509550505050565b5f805f806101608587031215611658575f80fd5b6116628686611582565b93506116718660a08701611582565b925061014085013567ffffffffffffffff81111561162c575f80fd5b5f6020828403121561169d575f80fd5b6116a682611521565b9392505050565b5f602082840312156116bd575f80fd5b813567ffffffffffffffff811681146116a6575f80fd5b6fffffffffffffffffffffffffffffffff811681146106a0575f80fd5b5f60208284031215611701575f80fd5b81356116a6816116d4565b5f805f806080858703121561171f575f80fd5b845193506020850151611731816116d4565b6040860151909350611742816116d4565b6060860151909250611753816116d4565b939692955090935050565b5f6020828403121561176e575f80fd5b813561ffff811681146116a6575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156117bf576117bf61177f565b92915050565b5f602082840312156117d5575f80fd5b813563ffffffff811681146116a6575f80fd5b80820281158282048414176117bf576117bf61177f565b5f82611832577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118675761186761177f565b5060010190565b63ffffffff81811683821601908082111561188b5761188b61177f565b5092915050565b5f80858511156118a0575f80fd5b838611156118ac575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156118f95780818660020360031b1b83161692505b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156118f95760109490940360031b84901b1690921692915050565b803560208310156117bf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156118f95760049490940360031b84901b169092169291505056fea2646970667358221220ca9d45c801b5ccbb302dcb12078bab5268980f6f82de99fc1d137bac6c0848e664736f6c6343000816003360c060405234801562000010575f80fd5b5060405162004aae38038062004aae8339810160408190526200003391620004ca565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b03861617905582828686612ee05f865f5b8551811015620000d357620000c97f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000b557620000b5620005a5565b60200260200101516200027860201b60201c565b5060010162000071565b505f5b815181101562000124576200011a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000b557620000b5620005a5565b50600101620000d6565b505050505050806001600160401b03165f036200015457604051635f86e17760e01b815260040160405180910390fd5b806001600160401b0316825110156200019a5781516040516378e2c15760e11b81526001600160401b039182166004820152908216602482015260440160405180910390fd5b5f805b835181101562000229575f848281518110620001bd57620001bd620005a5565b60200260200101519050826001600160a01b0316816001600160a01b031611620001fa576040516305fa937f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600460205260409020805460ff19166001908117909155909250016200019d565b50509051600580546001600160401b0393841668010000000000000000026001600160801b0319909116939092169290921717905550505063ffffffff92831660805250501660a052620005f3565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015620002c957505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620003165760018054601590620002f190600160a81b90046001600160401b0316620005b9565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200032283836200032e565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff16620003d1575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003883390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000328565b505f62000328565b805163ffffffff81168114620003ed575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b0381168114620003ed575f80fd5b5f82601f8301126200042d575f80fd5b815160206001600160401b03808311156200044c576200044c620003f2565b8260051b604051601f19603f83011681018181108482111715620004745762000474620003f2565b604052938452602081870181019490810192508785111562000494575f80fd5b6020870191505b84821015620004bf57620004af8262000406565b835291830191908301906200049b565b979650505050505050565b5f805f805f805f60e0888a031215620004e1575f80fd5b620004ec88620003d9565b9650620004fc60208901620003d9565b60408901519096506001600160401b038082111562000519575f80fd5b620005278b838c016200041d565b96506200053760608b0162000406565b955060808a01519150808211156200054d575f80fd5b6200055b8b838c016200041d565b945060a08a01519150808216821462000572575f80fd5b60c08a01519193508082111562000587575f80fd5b50620005968a828b016200041d565b91505092959891949750929550565b634e487b7160e01b5f52603260045260245ffd5b5f6001600160401b038281166002600160401b03198101620005e957634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b60805160a05161447d620006315f395f818161090e0152818161253401526126c301525f818161084f0152818161173901526122a4015261447d5ff3fe6080604052600436106102c0575f3560e01c806395d376d711610170578063cd88b903116100d1578063e395eb5c11610087578063f42ed2ed11610062578063f42ed2ed1461096e578063fd62e75014610981578063fdb9b0f1146109a1575f80fd5b8063e395eb5c146108fd578063f010cb2314610930578063f3b4ebd01461094f575f80fd5b8063d2ae2104116100b7578063d2ae210414610886578063d547741f146108bf578063dafe0ccc146108de575f80fd5b8063cd88b9031461081f578063cf34c7681461083e575f80fd5b8063c358de0a11610126578063c5e193cd1161010c578063c5e193cd146107b4578063c7a823e0146107d3578063c7b2370b14610800575f80fd5b8063c358de0a14610764578063c416aa5114610783575f80fd5b8063a217fddf11610156578063a217fddf14610704578063aef18bf714610717578063b143044b14610745575f80fd5b806395d376d71461064e5780639e94496514610661575f80fd5b806330bb3aac116102255780635c975abb116101db578063741bef1a116101b6578063741bef1a1461058f5780638585c945146105e057806391d14854146105ff575f80fd5b80635c975abb1461052b578063724e78da14610542578063736c0d5b14610561575f80fd5b806336568abe1161020b57806336568abe146104ce57806352d3b871146104ed5780635553fb8e1461050c575f80fd5b806330bb3aac1461049057806331cb6105146104af575f80fd5b80631703a0181161027a57806326e67a371161026057806326e67a37146104265780632de11376146104525780632f2ff15d14610471575f80fd5b80631703a018146103a5578063248a9ca3146103ea575f80fd5b806301ffc9a7116102aa57806301ffc9a7146103385780631095b6d71461036757806316c38b3c14610386575f80fd5b8062bf2e80146102c457806301e3366714610317575b5f80fd5b3480156102cf575f80fd5b506001546102ff907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b348015610322575f80fd5b50610336610331366004613597565b6109c0565b005b348015610343575f80fd5b506103576103523660046135d5565b6109fb565b604051901515815260200161030e565b348015610372575f80fd5b50610336610381366004613597565b610a93565b348015610391575f80fd5b506103366103a036600461362a565b610c1d565b3480156103b0575f80fd5b506005546103d19068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161030e565b3480156103f5575f80fd5b50610418610404366004613643565b5f9081526020819052604090206001015490565b60405190815260200161030e565b348015610431575f80fd5b5061044561044036600461366d565b610c41565b60405161030e9190613686565b34801561045d575f80fd5b5061035761046c3660046136cc565b610cc4565b34801561047c575f80fd5b5061033661048b3660046136e7565b610da5565b34801561049b575f80fd5b506104186104aa366004613771565b610ef4565b3480156104ba575f80fd5b506103366104c93660046137e4565b611067565b3480156104d9575f80fd5b506103366104e83660046136e7565b6110aa565b3480156104f8575f80fd5b50610336610507366004613817565b6110dc565b348015610517575f80fd5b50610418610526366004613897565b6112a5565b348015610536575f80fd5b5060015460ff16610357565b34801561054d575f80fd5b5061033661055c3660046136cc565b611418565b34801561056c575f80fd5b5061035761057b3660046136cc565b60046020525f908152604090205460ff1681565b34801561059a575f80fd5b506002546105bb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030e565b3480156105eb575f80fd5b506103366105fa3660046138ea565b6114bd565b34801561060a575f80fd5b506103576106193660046136e7565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61041861065c366004613919565b611502565b34801561066c575f80fd5b506106c961067b36600461366d565b60066020525f908152604090205467ffffffffffffffff81169068010000000000000000810461ffff16906a010000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff909416845261ffff90921660208401526fffffffffffffffffffffffffffffffff169082015260600161030e565b34801561070f575f80fd5b506104185f81565b348015610722575f80fd5b50610357610731366004613643565b60076020525f908152604090205460ff1681565b348015610750575f80fd5b5061033661075f3660046139be565b6116d7565b34801561076f575f80fd5b5061033661077e3660046139fd565b6119db565b34801561078e575f80fd5b506001546105bb90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156107bf575f80fd5b506104186107ce366004613897565b611a89565b3480156107de575f80fd5b506107f26107ed366004613a16565b611c62565b60405161030e929190613a7e565b34801561080b575f80fd5b5061033661081a3660046136cc565b611e65565b34801561082a575f80fd5b50610336610839366004613ac9565b611f09565b348015610849575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161030e565b348015610891575f80fd5b506001546103d1907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b3480156108ca575f80fd5b506103366108d93660046136e7565b611f59565b3480156108e9575f80fd5b506103366108f8366004613597565b61206e565b348015610908575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b34801561093b575f80fd5b5061041861094a366004613b0b565b61219e565b34801561095a575f80fd5b50610336610969366004613b71565b6121d9565b61041861097c366004613bab565b61244a565b34801561098c575f80fd5b506005546103d19067ffffffffffffffff1681565b3480156109ac575f80fd5b506104186109bb366004613bab565b612603565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109ea81612790565b6109f584848461279a565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610a8d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610abd81612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16610b3a576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610ba7575f80fd5b505af1158015610bb9573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b5f610c2781612790565b8115610c3957610c356127cf565b5050565b610c3561284e565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cb857602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610c895790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610d1757505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610d8c575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610d9957506001919050565b505f919050565b919050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480610df357507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610e1d57507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b15610e6057303314610e5b576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eea565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb057610e5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6040517f94fdc372000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b6109f583836128a5565b5f83610eff81610cc4565b610f35576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a16602080840182905267ffffffffffffffff808c16858701528a8416606086015260055468010000000000000000900416608085015260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660a08601525f92835260069091529084902093517f7bfa20a9000000000000000000000000000000000000000000000000000000008152929361010090910490911691637bfa20a99161101c918591908a908a90600401613c97565b602060405180830381865afa158015611037573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105b9190613d63565b98975050505050505050565b3033146110a0576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c358282612975565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561110681612790565b5f5b82811015611266573684848381811061112357611123613d7a565b9050608002019050604051806060016040528082602001602081019061114991906138ea565b67ffffffffffffffff16815260200161116860608401604085016139fd565b61ffff1681526020016111816080840160608501613dc6565b6fffffffffffffffffffffffffffffffff16905260065f6111a5602085018561366d565b63ffffffff16815260208082019290925260409081015f20835181549385015194909201516fffffffffffffffffffffffffffffffff166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff61ffff90951668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941667ffffffffffffffff90931692909217929092179290921691909117905550600101611108565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051611298929190613ddf565b60405180910390a1505050565b5f816112b081610cc4565b6112e6576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808a16602080850182905267ffffffffffffffff808b168688015289851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517f7bfa20a9000000000000000000000000000000000000000000000000000000008152939461010090920490921692637bfa20a9926113ce928692600401613edd565b602060405180830381865afa1580156113e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140d9190613d63565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561144281612790565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146114f6576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ff81612b73565b50565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61152d81612790565b61153d60a08601608087016136cc565b61154681610cc4565b61157c576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810190915260025473ffffffffffffffffffffffffffffffffffffffff1681525f906020808201906115b6908a018a61366d565b63ffffffff1681526020016115d160808a0160608b016138ea565b67ffffffffffffffff1681526020016115f060a08a0160808b016136cc565b73ffffffffffffffffffffffffffffffffffffffff908116825260055468010000000000000000900467ffffffffffffffff166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff16604090940193909352929350610100909104169063df2b057e9083906006905f90611681908d018d61366d565b63ffffffff1663ffffffff1681526020019081526020015f2089896040518563ffffffff1660e01b81526004016116bb9493929190613c97565b6020604051808303815f875af11580156113e9573d5f803e3d5ffd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561170181612790565b5f5b828110156109f5573684848381811061171e5761171e613d7a565b90506020028101906117309190613fb2565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611766602083018361366d565b63ffffffff161461177757506119d3565b4281606001351161178857506119d3565b5f6117c0611799602084018461366d565b6117a960408501602086016136cc565b6117b66040860186613fee565b866060013561219e565b90505f6117d4826107ed6080860186613fee565b50905080611817576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a15050506119d3565b5f6118366118286040860186613fee565b6118319161404f565b612c8a565b905080156118cd575f8381526007602052604090205460ff1615611896577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab9784846040516118859291906140f7565b60405180910390a1505050506119d3565b5f83815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b5f806118df60408701602088016136cc565b73ffffffffffffffffffffffffffffffffffffffff166119026040880188613fee565b6040516119109291906141bc565b5f604051808303815f865af19150503d805f8114611949576040519150601f19603f3d011682016040523d82523d5f602084013e61194e565b606091505b5091509150816119cc578215611992575f85815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516119c39291906141cb565b60405180910390a15b5050505050505b600101611703565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a0581612790565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d906020016114b1565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de611ab481612790565b82611abe81610cc4565b611af4576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808b16602080850182905267ffffffffffffffff808c16868801528a851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517fdf2b057e00000000000000000000000000000000000000000000000000000000815293946101009092049092169263df2b057e92611bdc928692600401613edd565b6020604051808303815f875af1158015611bf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c1c9190613d63565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef84604051611c4f91815260200190565b60405180910390a1505050949350505050565b6005545f908190611c8a9068010000000000000000900467ffffffffffffffff166041614210565b8314611c9b57505f90506001611e5d565b5f611cf2866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290525f90605c01604051602081830303815290604052805190602001209050919050565b90505f805b60055468010000000000000000900467ffffffffffffffff16811015611e5257365f8888611d26856041614210565b90611d32866001614227565b611d3d906041614210565b92611d4a9392919061423a565b915091505f80611d8f8785858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612d7292505050565b5090925090505f816003811115611da857611da8613a51565b14611dc0575f60019850985050505050505050611e5d565b8573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611611e06575f60029850985050505050505050611e5d565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205460ff16611e45575f60039850985050505050505050611e5d565b5093505050600101611cf7565b5060015f9350935050505b935093915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611e8f81612790565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e0906020016114b1565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611f3381612790565b63ffffffff84165f908152600360205260409020611f529084846134be565b5050505050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480611fa757507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80611fd157507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b156120145730331461200f576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612064565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb05761200f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6109f58383612dbb565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561209881612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16612115576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f07b18bde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906307b18bde906044015f604051808303815f87803b158015612182575f80fd5b505af1158015612194573d5f803e3d5ffd5b5050505050505050565b5f85858386866040516020016121b8959493929190614261565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511612216576040517f0bbaf26300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3061222760408301602084016136cc565b73ffffffffffffffffffffffffffffffffffffffff161461229d5761225260408201602083016136cc565b6040517f1ce0bfcd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610ee1565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166122d1602083018361366d565b63ffffffff1614612324576122e9602082018261366d565b6040517f2697e1c200000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610ee1565b5f612335611799602084018461366d565b90505f612349826107ed6080860186613fee565b50905080612383576040517f15ecadee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526007602052604090205460ff16156123ce576040517f9d6a45a600000000000000000000000000000000000000000000000000000000815260048101839052602401610ee1565b5f828152600760205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556109f5907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217759061243890860186613fee565b81019061244591906136cc565b6128a5565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61247581612790565b8861247f81610cc4565b6124b5576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528c811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fbbc5a33b00000000000000000000000000000000000000000000000000000000815292936101009091049091169163bbc5a33b916125b4918591908d908d908d908d906004016142d2565b6020604051808303815f875af11580156125d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f49190613d63565b9b9a5050505050505050505050565b5f8761260e81610cc4565b612644576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528b811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fd358b30000000000000000000000000000000000000000000000000000000000815292936101009091049091169163d358b30091612743918591908c908c908c908c906004016142d2565b602060405180830381865afa15801561275e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127829190613d63565b9a9950505050505050505050565b6114ff8133612e80565b73ffffffffffffffffffffffffffffffffffffffff83166127c4576127bf8282612f05565b505050565b6127bf838383613007565b6127d7613075565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6128566130b4565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612824565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561290257505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15612961576001805460159061293a907501000000000000000000000000000000000000000000900467ffffffffffffffff16614397565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836130f0565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205481151560ff9091161515036129fb576040517f58c8d2a000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201528115156024820152604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260046020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001683151517905581612a6c57600554612a679060019067ffffffffffffffff166143bd565b612a84565b600554612a849067ffffffffffffffff1660016143e5565b60055490915067ffffffffffffffff680100000000000000009091048116908216811115612af2576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808416600483015282166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff84161790556040805173ffffffffffffffffffffffffffffffffffffffff8616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610c0f565b8067ffffffffffffffff165f03612bb6576040517f5f86e17700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff908116908216811015612c15576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808316600483015283166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a23249906020016114b1565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0223536e0000000000000000000000000000000000000000000000000000000014801590612d1f57507fffffffff0000000000000000000000000000000000000000000000000000000082167fab750e750000000000000000000000000000000000000000000000000000000014155b8015610a8d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f704316e500000000000000000000000000000000000000000000000000000000141592915050565b5f805f8351604103612da9576020840151604085015160608601515f1a612d9b888285856131e9565b955095509550505050612db4565b505081515f91506002905b9250925092565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015612e1757505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b15612e765760018054601590612e4f907501000000000000000000000000000000000000000000900467ffffffffffffffff16614406565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836132dc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c35576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216612f52576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612fa8576040519150601f19603f3d011682016040523d82523d5f602084013e612fad565b606091505b50509050806127bf576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216613054576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127bf73ffffffffffffffffffffffffffffffffffffffff84168383613395565b60015460ff16156130b2576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60015460ff166130b2576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556131803390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610a8d565b505f610a8d565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561322257505f915060039050826132d2565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613273573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166132c957505f9250600191508290506132d2565b92505f91508190505b9450945094915050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610a8d565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017815282516127bf93879390925f9283929183919082885af18061343e576040513d5f823e3d81fd5b50505f513d9150811561345557806001141561346f565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ee1565b828054828255905f5260205f2090601f01602090048101928215613552579160200282015f5b8382111561352457833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026134e4565b80156135505782816101000a81549060ff02191690556001016020815f01049283019260010302613524565b505b5061355e929150613562565b5090565b5b8082111561355e575f8155600101613563565b73ffffffffffffffffffffffffffffffffffffffff811681146114ff575f80fd5b5f805f606084860312156135a9575f80fd5b83356135b481613576565b925060208401356135c481613576565b929592945050506040919091013590565b5f602082840312156135e5575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114613614575f80fd5b9392505050565b80358015158114610da0575f80fd5b5f6020828403121561363a575f80fd5b6136148261361b565b5f60208284031215613653575f80fd5b5035919050565b803563ffffffff81168114610da0575f80fd5b5f6020828403121561367d575f80fd5b6136148261365a565b602080825282518282018190525f9190848201906040850190845b818110156136c057835160ff16835292840192918401916001016136a1565b50909695505050505050565b5f602082840312156136dc575f80fd5b813561361481613576565b5f80604083850312156136f8575f80fd5b82359150602083013561370a81613576565b809150509250929050565b803567ffffffffffffffff81168114610da0575f80fd5b5f8083601f84011261373c575f80fd5b50813567ffffffffffffffff811115613753575f80fd5b60208301915083602082850101111561376a575f80fd5b9250929050565b5f805f805f60808688031215613785575f80fd5b61378e8661365a565b945061379c60208701613715565b935060408601356137ac81613576565b9250606086013567ffffffffffffffff8111156137c7575f80fd5b6137d38882890161372c565b969995985093965092949392505050565b5f80604083850312156137f5575f80fd5b823561380081613576565b915061380e6020840161361b565b90509250929050565b5f8060208385031215613828575f80fd5b823567ffffffffffffffff8082111561383f575f80fd5b818501915085601f830112613852575f80fd5b813581811115613860575f80fd5b8660208260071b8501011115613874575f80fd5b60209290920196919550909350505050565b803561ffff81168114610da0575f80fd5b5f805f80608085870312156138aa575f80fd5b6138b385613886565b93506138c160208601613886565b92506138cf60408601613715565b915060608501356138df81613576565b939692955090935050565b5f602082840312156138fa575f80fd5b61361482613715565b5f60a08284031215613913575f80fd5b50919050565b5f805f6040848603121561392b575f80fd5b833567ffffffffffffffff80821115613942575f80fd5b61394e87838801613903565b94506020860135915080821115613963575f80fd5b506139708682870161372c565b9497909650939450505050565b5f8083601f84011261398d575f80fd5b50813567ffffffffffffffff8111156139a4575f80fd5b6020830191508360208260051b850101111561376a575f80fd5b5f80602083850312156139cf575f80fd5b823567ffffffffffffffff8111156139e5575f80fd5b6139f18582860161397d565b90969095509350505050565b5f60208284031215613a0d575f80fd5b61361482613886565b5f805f60408486031215613a28575f80fd5b83359250602084013567ffffffffffffffff811115613a45575f80fd5b6139708682870161372c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b82151581526040810160048310613abc577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8260208301529392505050565b5f805f60408486031215613adb575f80fd5b613ae48461365a565b9250602084013567ffffffffffffffff811115613aff575f80fd5b6139708682870161397d565b5f805f805f60808688031215613b1f575f80fd5b613b288661365a565b94506020860135613b3881613576565b9350604086013567ffffffffffffffff811115613b53575f80fd5b613b5f8882890161372c565b96999598509660600135949350505050565b5f60208284031215613b81575f80fd5b813567ffffffffffffffff811115613b97575f80fd5b613ba384828501613903565b949350505050565b5f805f805f805f6080888a031215613bc1575f80fd5b8735613bcc81613576565b9650602088013567ffffffffffffffff80821115613be8575f80fd5b613bf48b838c0161372c565b909850965060408a0135915080821115613c0c575f80fd5b613c188b838c0161372c565b909650945060608a0135915080821115613c30575f80fd5b50613c3d8a828b0161372c565b989b979a50959850939692959293505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f610140613d0e838873ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613d4f60c08401875467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8061012084015261140d8184018587613c50565b5f60208284031215613d73575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80356fffffffffffffffffffffffffffffffff81168114610da0575f80fd5b5f60208284031215613dd6575f80fd5b61361482613da7565b60208082528181018390525f90604080840186845b87811015613e6f5763ffffffff613e0a8361365a565b16835267ffffffffffffffff613e21868401613715565b168584015261ffff613e34858401613886565b168484015260606fffffffffffffffffffffffffffffffff613e57828501613da7565b16908401526080928301929190910190600101613df4565b5090979650505050505050565b5f81518084525f5b81811015613ea057602081850181015186830182015201613e84565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f610140613f54838773ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613f9560c08401865467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b80610120840152613fa881840185613e7c565b9695505050505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613fe4575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614021575f80fd5b83018035915067ffffffffffffffff82111561403b575f80fd5b60200191503681900382131561376a575f80fd5b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561408f5780818660040360031b1b83161692505b505092915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126140ca575f80fd5b830160208101925035905067ffffffffffffffff8111156140e9575f80fd5b80360382131561376a575f80fd5b6040815263ffffffff6141098461365a565b1660408201525f602084013561411e81613576565b73ffffffffffffffffffffffffffffffffffffffff1660608301526141466040850185614097565b60a0608085015261415b60e085018284613c50565b915050606085013560a08401526141756080860186614097565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08584030160c08601526141aa838284613c50565b93505050508260208301529392505050565b818382375f9101908152919050565b828152604060208201525f613ba36040830184613e7c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610a8d57610a8d6141e3565b80820180821115610a8d57610a8d6141e3565b5f8085851115614248575f80fd5b83861115614254575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008660e01b1681527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008560601b166004820152836018820152818360388301375f9101603801908152949350505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff808a511684528060208b01511660208501525067ffffffffffffffff60408a015116604084015261ffff60608a015116606084015261436160808401895467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8060e08401526143748184018789613c50565b905082810361010084015261438a818587613c50565b9998505050505050505050565b5f67ffffffffffffffff8083168181036143b3576143b36141e3565b6001019392505050565b67ffffffffffffffff8281168282160390808211156143de576143de6141e3565b5092915050565b67ffffffffffffffff8181168382160190808211156143de576143de6141e3565b5f67ffffffffffffffff82168061441f5761441f6141e3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019291505056fea26469706673582212208293bcc557e204de553c5250d4aeaa3a84335fc59a6c7b5a242fbc34745baa1464736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002470380380620024708339810160408190526200003391620000c8565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000079565b5063ffffffff90911660a052608052620000fe565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8060408385031215620000da575f80fd5b825163ffffffff81168114620000ee575f80fd5b6020939093015192949293505050565b60805160a0516123426200012e5f395f81816107ac015261082601525f81816109120152610cb901526123425ff3fe6080604052600436106100e7575f3560e01c80638da5cb5b11610087578063de0a93c311610057578063de0a93c314610322578063df2b057e14610396578063f2fde38b146103a9578063f5ff608f146103c8575f80fd5b80638da5cb5b1461029e5780639ac23d28146102d1578063bbc5a33b146102f0578063d358b30014610303575f80fd5b806339f26dfc116100c257806339f26dfc1461022c57806354fd4d501461024b578063715018a61461026b5780637bfa20a91461027f575f80fd5b806301e33667146100f257806310b65f76146101135780632565c24514610157575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5061011161010c366004611a78565b6103e7565b005b34801561011e575f80fd5b5061014461012d366004611ac2565b63ffffffff165f9081526001602052604090205490565b6040519081526020015b60405180910390f35b348015610162575f80fd5b506101ec610171366004611ac2565b60036020525f908152604090205463ffffffff8082169167ffffffffffffffff64010000000082048116926c0100000000000000000000000083049091169174010000000000000000000000000000000000000000810482169178010000000000000000000000000000000000000000000000009091041685565b6040805163ffffffff968716815267ffffffffffffffff95861660208201529390941693830193909352831660608201529116608082015260a00161014e565b348015610237575f80fd5b50610111610246366004611b13565b6103ff565b348015610256575f80fd5b5060408051600180825260208201520161014e565b348015610276575f80fd5b506101116104af565b34801561028a575f80fd5b50610144610299366004611bae565b6104c2565b3480156102a9575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b3480156102dc575f80fd5b506101116102eb366004611c15565b61068a565b6101446102fe366004611cd2565b610747565b34801561030e575f80fd5b5061014461031d366004611cd2565b610761565b34801561032d575f80fd5b50600254604080516effffffffffffffffffffffffffffff80841682526f0100000000000000000000000000000084041660208201527e0100000000000000000000000000000000000000000000000000000000000090920461ffff169082015260600161014e565b6101446103a4366004611bae565b61099c565b3480156103b4575f80fd5b506101116103c3366004611d67565b6109b2565b3480156103d3575f80fd5b506101116103e2366004611d80565b610a15565b6103ef610a8e565b6103fa838383610ae0565b505050565b610407610a8e565b6002805461ffff9092167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6effffffffffffffffffffffffffffff9485166f01000000000000000000000000000000027fffff00000000000000000000000000000000000000000000000000000000000090941694909516939093179190911792909216179055565b6104b7610a8e565b6104c05f610b10565b565b5f6104d06020850185611e04565b67ffffffffffffffff165f03610530576104f06040860160208701611ac2565b6040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b61053a8383610b84565b505f61055e61054f60a0880160808901611e04565b67ffffffffffffffff16610c25565b90505f8061056f6020890189611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61059a60408b0160208c01611ac2565b856105a860208c018c611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa158015610617573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063b9190611e3c565b93505050915061067e828860200160208101906106589190611e8e565b61066860c08c0160a08d01611e8e565b61067860608c0160408d01611ea7565b85610c32565b98975050505050505050565b610692610a8e565b8281146106cb576040517fb54ecc3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b83811015610740578282828181106106e7576106e7611ec2565b905060a0020160035f87878581811061070257610702611ec2565b90506020020160208101906107179190611ac2565b63ffffffff16815260208101919091526040015f206107368282611efb565b50506001016106cd565b5050505050565b5f610756878787878787610761565b979650505050505050565b5f61076f6020870187611e04565b67ffffffffffffffff165f036107d9576040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152602401610527565b6107e38383610b84565b505f6107f861054f60608a0160408b01611e04565b90505f8061080960208b018b611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c7f00000000000000000000000000000000000000000000000000000000000000008561085360208e018e611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa1580156108c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e69190611e3c565b9350505091505f6108f78989610d27565b90505f6fffffffffffffffffffffffffffffffff83166109377f0000000000000000000000000000000000000000000000000000000000000000846120c4565b6109419190612108565b905061098c610950828661211b565b61096060408e0160208f01611e8e565b8e60600160208101906109739190611e8e565b8e60400160208101906109869190611ea7565b87610c32565b9c9b505050505050505050505050565b5f6109a9858585856104c2565b95945050505050565b6109ba610a8e565b73ffffffffffffffffffffffffffffffffffffffff8116610a09576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610527565b610a1281610b10565b50565b610a1d610a8e565b5f5b818110156103fa57828282818110610a3957610a39611ec2565b9050604002016020013560015f015f858585818110610a5a57610a5a611ec2565b610a709260206040909202019081019150611ac2565b63ffffffff16815260208101919091526040015f2055600101610a1f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146104c0576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610527565b73ffffffffffffffffffffffffffffffffffffffff8316610b05576103fa8282610e0f565b6103fa838383610f11565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808215610bde575f80610b99868685610f7f565b6040517f7085244b00000000000000000000000000000000000000000000000000000000815260ff851660048201529096509294508593505060249091019050610527565b808314610c1a576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610527565b5f9150505b92915050565b5f610c1f82610120610fd8565b5f8061ffff861615610c445785610c46565b845b90505f612710610c5a61ffff84168a6120c4565b610c649190612108565b90506fffffffffffffffffffffffffffffffff84161580610c9557506fffffffffffffffffffffffffffffffff8516155b15610ca35791506109a99050565b5f846fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000876fffffffffffffffffffffffffffffffff16610cf591906120c4565b610cff9190612108565b610d09908a61211b565b9050818111610d185781610d1a565b805b9998505050505050505050565b5f80610d36848461103c61124b565b6002548151919250610d5f916effffffffffffffffffffffffffffff9091169061ffff1661212e565b6effffffffffffffffffffffffffffff169150806020015115610dca5760025461271090610db3907e01000000000000000000000000000000000000000000000000000000000000900461ffff16846120c4565b610dbd9190612108565b610dc7908361211b565b91505b806040015115610e0857600254610e05906f0100000000000000000000000000000090046effffffffffffffffffffffffffffff168361211b565b91505b5092915050565b73ffffffffffffffffffffffffffffffffffffffff8216610e5c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610eb2576040519150601f19603f3d011682016040523d82523d5f602084013e610eb7565b606091505b50509050806103fa576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610527565b73ffffffffffffffffffffffffffffffffffffffff8216610f5e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103fa73ffffffffffffffffffffffffffffffffffffffff8416838361185d565b5f36816001840181610f928888846118ea565b6002830192909150610faa9089908990600301611910565b94506002820161ffff82168301610fc381838b8d612161565b979b909a50969850505061ffff160193505050565b5f80610fe56041856120c4565b9050610ff2602082612188565b1561101a57611002602082612188565b61100c908261219b565b61101790602061211b565b90505b806110278461010461211b565b611031919061211b565b610e0590602061211b565b61104860018583611934565b6110556001856002611975565b156112455763ffffffff8085165f90815260036020908152604091829020825160a0810184529054808516825267ffffffffffffffff64010000000082048116938301939093526c01000000000000000000000000810490921692810192909252740100000000000000000000000000000000000000008104831660608301527801000000000000000000000000000000000000000000000000900490911660808201528284156111a957816020015167ffffffffffffffff168467ffffffffffffffff16111561116657815160208301516103e89163ffffffff169061113c90876121ae565b61114691906121cf565b61115091906121f3565b826040015161115f9190612219565b90506111a9565b6103e8825f015163ffffffff1685846020015161118391906121ae565b61118d91906121cf565b61119791906121f3565b82604001516111a691906121ae565b90505b42826060015163ffffffff16826111c09190612219565b67ffffffffffffffff1610806111f3575060808201516111e69063ffffffff164261211b565b8167ffffffffffffffff16115b15611242576040517f0c5a8d2300000000000000000000000000000000000000000000000000000000815263ffffffff8716600482015267ffffffffffffffff82166024820152604401610527565b50505b50505050565b604080516060810182525f80825260208201819052918101829052908085818661127682600261211b565b9261128393929190612161565b61128c9161223a565b60f01c905061129c60028361211b565b915061ffff81166001146112dc576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112e760028361211b565b91505f8683876112f882600261211b565b9261130593929190612161565b61130e9161223a565b60f01c905061131e60028461211b565b92508061ffff165f0361135d576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff168352505f5b825f015161ffff168161ffff1610156115c6575f86868481811061138c5761138c611ec2565b919091013560f81c91506113a3905060018461211b565b925060ff81166001146113e2576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113ed60028461211b565b92505f8784886113fe82600261211b565b9261140b93929190612161565b6114149161223a565b60f01c905061142460028561211b565b93507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff82160161158a575f88858961146082600261211b565b9261146d93929190612161565b6114769161223a565b60f01c905061148660028661211b565b9450845f8a828b61149882600461211b565b926114a593929190612161565b6114ae91612280565b60e01c90506114be60048361211b565b91505f8b8b848181106114d3576114d3611ec2565b600192013560f81c821492506114eb9190508461211b565b92505f8c848d6114fc82600861211b565b9261150993929190612161565b611512916122c6565b60c01c90506115278383835f8f63ffffffff16565b508a925061153c91505061ffff83168761211b565b1115611574576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158261ffff82168661211b565b9450506115bc565b6040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600101611366565b508381101561181c575f8585838181106115e2576115e2611ec2565b919091013560f81c91506115f9905060018361211b565b915060ff8116600114611638576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86838761164782600261211b565b9261165493929190612161565b61165d9161223a565b60f01c905061166d60028461211b565b925061ffff81166001146116ad576040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787858181106116c0576116c0611ec2565b919091013560f81c91506116d7905060018561211b565b935060ff81166116ed576001602086015261175c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff821601611723576001604086015261175c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff82160161158a5760016020860181905260408601525b5f88858961176b82600461211b565b9261177893929190612161565b61178191612280565b60e01c905061179160048661211b565b94505f8989878181106117a6576117a6611ec2565b600192013560f81c821492506117be9190508761211b565b95505f8a878b6117cf82600861211b565b926117dc93929190612161565b6117e5916122c6565b60c01c90506117f560088861211b565b965061180883838360018d63ffffffff16565b61181360168861211b565b96505050505050505b808414611855576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526103fa9084906119a2565b5f600282016118fb81848688612161565b6119049161223a565b60f01c95945050505050565b5f83838381811061192357611923611ec2565b919091013560f81c95945050505050565b61193f838383611975565b6103fa576040517f50fae9eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8083165f90815260208590526040812054909161199a91908490611a4116565b949350505050565b5f8060205f8451602086015f885af1806119c1576040513d5f823e3d81fd5b50505f513d915081156119d85780600114156119f2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611245576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610527565b600160ff919091161b16151590565b803573ffffffffffffffffffffffffffffffffffffffff81168114611a73575f80fd5b919050565b5f805f60608486031215611a8a575f80fd5b611a9384611a50565b9250611aa160208501611a50565b9150604084013590509250925092565b63ffffffff81168114610a12575f80fd5b5f60208284031215611ad2575f80fd5b8135611add81611ab1565b9392505050565b80356effffffffffffffffffffffffffffff81168114611a73575f80fd5b803561ffff81168114611a73575f80fd5b5f805f60608486031215611b25575f80fd5b611b2e84611ae4565b9250611b3c60208501611ae4565b9150611b4a60408501611b02565b90509250925092565b5f60608284031215611b63575f80fd5b50919050565b5f8083601f840112611b79575f80fd5b50813567ffffffffffffffff811115611b90575f80fd5b602083019150836020828501011115611ba7575f80fd5b9250929050565b5f805f80848603610140811215611bc3575f80fd5b60c0811215611bd0575f80fd5b50849350611be18660c08701611b53565b925061012085013567ffffffffffffffff811115611bfd575f80fd5b611c0987828801611b69565b95989497509550505050565b5f805f8060408587031215611c28575f80fd5b843567ffffffffffffffff80821115611c3f575f80fd5b818701915087601f830112611c52575f80fd5b813581811115611c60575f80fd5b8860208260051b8501011115611c74575f80fd5b602092830196509450908601359080821115611c8e575f80fd5b818701915087601f830112611ca1575f80fd5b813581811115611caf575f80fd5b88602060a083028501011115611cc3575f80fd5b95989497505060200194505050565b5f805f805f80868803610120811215611ce9575f80fd5b6080811215611cf6575f80fd5b50869550611d078860808901611b53565b945060e087013567ffffffffffffffff80821115611d23575f80fd5b611d2f8a838b01611b69565b9096509450610100890135915080821115611d48575f80fd5b50611d5589828a01611b69565b979a9699509497509295939492505050565b5f60208284031215611d77575f80fd5b611add82611a50565b5f8060208385031215611d91575f80fd5b823567ffffffffffffffff80821115611da8575f80fd5b818501915085601f830112611dbb575f80fd5b813581811115611dc9575f80fd5b8660208260061b8501011115611ddd575f80fd5b60209290920196919550909350505050565b67ffffffffffffffff81168114610a12575f80fd5b5f60208284031215611e14575f80fd5b8135611add81611def565b6fffffffffffffffffffffffffffffffff81168114610a12575f80fd5b5f805f8060808587031215611e4f575f80fd5b845193506020850151611e6181611e1f565b6040860151909350611e7281611e1f565b6060860151909250611e8381611e1f565b939692955090935050565b5f60208284031215611e9e575f80fd5b611add82611b02565b5f60208284031215611eb7575f80fd5b8135611add81611e1f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8135610c1f81611ab1565b8135611f0681611ab1565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135611f4681611def565b6bffffffffffffffff000000008160201b16905080837fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008416171784556040850135611f9181611def565b73ffffffffffffffff0000000000000000000000008160601b169050837fffffffffffffffffffffffff000000000000000000000000000000000000000084161793508084831717855560608601359250611feb83611ab1565b77ffffffff00000000000000000000000000000000000000008360a01b167fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff8516831782171785555050505061209361204660808401611eef565b82547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1660c09190911b7bffffffff00000000000000000000000000000000000000000000000016178255565b5050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610c1f57610c1f612097565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612116576121166120db565b500490565b80820180821115610c1f57610c1f612097565b6effffffffffffffffffffffffffffff81811683821602808216919082811461215957612159612097565b505092915050565b5f808585111561216f575f80fd5b8386111561217b575f80fd5b5050820193919092039150565b5f82612196576121966120db565b500690565b81810381811115610c1f57610c1f612097565b67ffffffffffffffff828116828216039080821115610e0857610e08612097565b67ffffffffffffffff81811683821602808216919082811461215957612159612097565b5f67ffffffffffffffff8084168061220d5761220d6120db565b92169190910492915050565b67ffffffffffffffff818116838216019080821115610e0857610e08612097565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156121595760029490940360031b84901b1690921692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156121595760049490940360031b84901b1690921692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156121595760089490940360031b84901b169092169291505056fea2646970667358221220cccc97c15d4a10960156cf1d97eac992ad00f3710384385711595e0370e0871a64736f6c6343000816003360e060405234801562000010575f80fd5b5060405162001e1538038062001e15833981016040819052620000339162000172565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b62000064816200010b565b50600180546001600160a01b0319166001600160a01b0384811691909117909155811660808190525f60a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620000ca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000f09190620001af565b63ffffffff1660c052505060636003556064600455620001db565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016f575f80fd5b50565b5f806040838503121562000184575f80fd5b825162000191816200015a565b6020840151909250620001a4816200015a565b809150509250929050565b5f60208284031215620001c0575f80fd5b815163ffffffff81168114620001d4575f80fd5b9392505050565b60805160a05160c051611bf3620002225f395f6103fc01525f61036f01525f818161033c015281816106e90152818161081201528181610a5c0152610cc30152611bf35ff3fe60806040526004361061018e575f3560e01c8063715018a6116100d5578063996f79c01161007e578063dabca06311610058578063dabca0631461051f578063f2fde38b1461053e578063fd9be5221461055d57610195565b8063996f79c0146104bf578063aec336e6146104d4578063d80e9bd9146104f357610195565b80638da5cb5b116100af5780638da5cb5b146104545780638f58aa7a1461047d578063909532381461049c57610195565b8063715018a6146103d757806372607537146103eb57806372d713221461043357610195565b80634389e58f1161013757806361d027b31161011157806361d027b31461035e5780636251b637146103915780636750cd4c146103b757610195565b80634389e58f146102d357806354fd4d50146103015780635e280f111461032b57610195565b80631881d94d116101685780631881d94d1461026d5780631c7c294e14610288578063334993ff146102b457610195565b806301ffc9a7146101c75780630e97289b146101fb57806312cc947f1461024c57610195565b3661019557005b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156101d2575f80fd5b506101e66101e136600461127f565b61057c565b60405190151581526020015b60405180910390f35b348015610206575f80fd5b506001546102279073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f2565b348015610257575f80fd5b5061026b6102663660046112fc565b610614565b005b348015610278575f80fd5b5060026040516101f2919061133b565b348015610293575f80fd5b506002546102279073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102bf575f80fd5b5061026b6102ce36600461137a565b6107e7565b3480156102de575f80fd5b506102f26102ed3660046114c1565b6107fa565b6040516101f29392919061159b565b34801561030c575f80fd5b50604080515f80825260208201526002918101919091526060016101f2565b348015610336575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b348015610369575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b34801561039c575f80fd5b506103a5600181565b60405160ff90911681526020016101f2565b3480156103c2575f80fd5b506101e66103d13660046115ed565b50600190565b3480156103e2575f80fd5b5061026b610965565b3480156103f6575f80fd5b5061041e7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101f2565b34801561043e575f80fd5b50610447610978565b6040516101f29190611606565b34801561045f575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610227565b348015610488575f80fd5b5061026b610497366004611644565b610a04565b3480156104a7575f80fd5b506104b160035481565b6040519081526020016101f2565b3480156104ca575f80fd5b506104b160045481565b3480156104df575f80fd5b5061026b6104ee36600461166e565b610b5c565b3480156104fe575f80fd5b5061051261050d366004611689565b610bab565b6040516101f291906116ff565b34801561052a575f80fd5b5061026b610539366004611716565b610beb565b348015610549575f80fd5b5061026b61055836600461166e565b610c03565b348015610568575f80fd5b5061026b610577366004611644565b610c6b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061060e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff1615801590610653575060025473ffffffffffffffffffffffffffffffffffffffff163314155b1561068a576040517f70b216ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60405180606001604052806106a08585610d5b565b63ffffffff1681526020016106b58585610d7d565b81526020016106c48585610d9c565b67ffffffffffffffff169052905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a825d747826107198686610dbe565b6107238787610dcf565b604051610731929190611750565b6040805191829003822060e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168352845163ffffffff1660048401526020850151602484015293015167ffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091166064820152608481019190915260a4015f604051808303815f87803b1580156107cc575f80fd5b505af11580156107de573d5f803e3d5ffd5b50505050505050565b6107ef610dea565b600491909155600355565b604080518082019091525f80825260208201526060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461087f576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61089061088b87611776565b610e3c565b915084515f146108a0578461092a565b600580546108ad90611811565b80601f01602080910402602001604051908101604052809291908181526020018280546108d990611811565b80156109245780601f106108fb57610100808354040283529160200191610924565b820191905f5260205f20905b81548152906001019060200180831161090757829003601f168201915b50505050505b90506109368282610ea1565b6040518060400160405280600454815260200185610954575f610958565b6003545b9052969195509350915050565b61096d610dea565b6109765f610f2a565b565b6005805461098590611811565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190611811565b80156109fc5780601f106109d3576101008083540402835291602001916109fc565b820191905f5260205f20905b8154815290600101906020018083116109df57829003601f168201915b505050505081565b610a0c610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610a59576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae7919061185c565b905073ffffffffffffffffffffffffffffffffffffffff8116610b36576040517f54c1781b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff82168484610f9e565b505050565b610b64610dea565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b604080518082019091525f80825260208201526040518060400160405280600454815260200183610bdc575f610be0565b6003545b905295945050505050565b610bf3610dea565b6005610bff82826118c2565b5050565b610c0b610dea565b73ffffffffffffffffffffffffffffffffffffffff8116610c5f576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610c6881610f2a565b50565b610c73610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610cc0576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4e919061185c565b9050610b5781848461102b565b5f610d6a600d600984866119da565b610d7391611a01565b60e01c9392505050565b5f610d8c602d600d84866119da565b610d9591611a49565b9392505050565b5f610dab6009600184866119da565b610db491611a85565b60c01c9392505050565b5f610d95610dcc848461105b565b90565b365f610dde83605181876119da565b915091505b9250929050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610976576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c56565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610e8b986001989197919673ffffffffffffffffffffffffffffffffffffffff169501611acb565b6040516020818303038152906040529050919050565b6001546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063faed6c5890610ef99085908590600401611b90565b5f604051808303815f87803b158015610f10575f80fd5b505af1158015610f22573d5f803e3d5ffd5b505050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b5790849061106a565b73ffffffffffffffffffffffffffffffffffffffff831661105057610b57828261110f565b610b57838383611211565b5f610d8c6051603184866119da565b5f8060205f8451602086015f885af180611089576040513d5f823e3d81fd5b50505f513d915081156110a05780600114156110ba565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611109576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c56565b50505050565b73ffffffffffffffffffffffffffffffffffffffff821661115c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146111b2576040519150601f19603f3d011682016040523d82523d5f602084013e6111b7565b606091505b5050905080610b57576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c56565b73ffffffffffffffffffffffffffffffffffffffff821661125e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff84168383610f9e565b5f6020828403121561128f575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d95575f80fd5b5f8083601f8401126112ce575f80fd5b50813567ffffffffffffffff8111156112e5575f80fd5b602083019150836020828501011115610de3575f80fd5b5f806020838503121561130d575f80fd5b823567ffffffffffffffff811115611323575f80fd5b61132f858286016112be565b90969095509350505050565b6020810160038310611374577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f806040838503121561138b575f80fd5b50508035926020909101359150565b5f60e082840312156113aa575f80fd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff81118282101715611400576114006113b0565b60405290565b5f82601f830112611415575f80fd5b813567ffffffffffffffff80821115611430576114306113b0565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611476576114766113b0565b8160405283815286602085880101111561148e575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803580151581146114bc575f80fd5b919050565b5f805f606084860312156114d3575f80fd5b833567ffffffffffffffff808211156114ea575f80fd5b6114f68783880161139a565b9450602086013591508082111561150b575f80fd5b5061151886828701611406565b925050611527604085016114ad565b90509250925092565b5f5b8381101561154a578181015183820152602001611532565b50505f910152565b5f8151808452611569816020860160208601611530565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8351815260208085015190820152608060408201525f6115be6080830185611552565b82810360608401526115d08185611552565b9695505050505050565b803563ffffffff811681146114bc575f80fd5b5f602082840312156115fd575f80fd5b610d95826115da565b602081525f610d956020830184611552565b73ffffffffffffffffffffffffffffffffffffffff81168114610c68575f80fd5b80356114bc81611618565b5f8060408385031215611655575f80fd5b823561166081611618565b946020939093013593505050565b5f6020828403121561167e575f80fd5b8135610d9581611618565b5f805f806060858703121561169c575f80fd5b843567ffffffffffffffff808211156116b3575f80fd5b6116bf8883890161139a565b955060208701359150808211156116d4575f80fd5b506116e1878288016112be565b90945092506116f49050604086016114ad565b905092959194509250565b81518152602080830151908201526040810161060e565b5f60208284031215611726575f80fd5b813567ffffffffffffffff81111561173c575f80fd5b61174884828501611406565b949350505050565b818382375f9101908152919050565b803567ffffffffffffffff811681146114bc575f80fd5b5f60e08236031215611786575f80fd5b61178e6113dd565b6117978361175f565b81526117a5602084016115da565b60208201526117b660408401611639565b60408201526117c7606084016115da565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156117f9575f80fd5b61180536828601611406565b60c08301525092915050565b600181811c9082168061182557607f821691505b6020821081036113aa577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6020828403121561186c575f80fd5b8151610d9581611618565b601f821115610b5757805f5260205f20601f840160051c8101602085101561189c5750805b601f840160051c820191505b818110156118bb575f81556001016118a8565b5050505050565b815167ffffffffffffffff8111156118dc576118dc6113b0565b6118f0816118ea8454611811565b84611877565b602080601f831160018114611942575f841561190c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610f22565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561198e5788860151825594840194600190910190840161196f565b50858210156119ca57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b5f80858511156119e8575f80fd5b838611156119f4575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611a415780818660040360031b1b83161692505b505092915050565b8035602083101561060e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015611a415760089490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611b7c816071850160208701611530565b919091016071019998505050505050505050565b604081525f611ba26040830185611552565b8281036020840152611bb48185611552565b9594505050505056fea2646970667358221220153f6a8e912d5720c2f1c4bf884b915b03d8f933123bf4fbba154ab615acb52564736f6c6343000816003360c060405234801562000010575f80fd5b5060405162003f7b38038062003f7b8339810160408190526200003391620002c2565b83838383838360128484818181818d6001600160a01b0381166200007057604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200007b8162000191565b506001600160a01b038083166080528116620000aa57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b158015620000ef575f80fd5b505af115801562000102573d5f803e3d5ffd5b50505050505050506200011a620001e060201b60201c565b60ff168360ff16101562000141576040516301e9714b60e41b815260040160405180910390fd5b6200014e60068462000360565b6200015b90600a6200047b565b60a052506008915062000171905083826200051c565b5060096200018082826200051c565b5050505050505050505050620005e8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000209575f80fd5b81516001600160401b0380821115620002265762000226620001e5565b604051601f8301601f19908116603f01168101908282118183101715620002515762000251620001e5565b81604052838152602092508660208588010111156200026e575f80fd5b5f91505b8382101562000291578582018301518183018401529082019062000272565b5f602085830101528094505050505092915050565b80516001600160a01b0381168114620002bd575f80fd5b919050565b5f805f8060808587031215620002d6575f80fd5b84516001600160401b0380821115620002ed575f80fd5b620002fb88838901620001f9565b9550602087015191508082111562000311575f80fd5b506200032087828801620001f9565b9350506200033160408601620002a6565b91506200034160608601620002a6565b905092959194509250565b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156200037c576200037c6200034c565b92915050565b600181815b80851115620003c257815f1904821115620003a657620003a66200034c565b80851615620003b457918102915b93841c939080029062000387565b509250929050565b5f82620003da575060016200037c565b81620003e857505f6200037c565b81600181146200040157600281146200040c576200042c565b60019150506200037c565b60ff8411156200042057620004206200034c565b50506001821b6200037c565b5060208310610133831016604e8410600b841016171562000451575081810a6200037c565b6200045d838362000382565b805f19048211156200047357620004736200034c565b029392505050565b5f6200048b60ff841683620003ca565b9392505050565b600181811c90821680620004a757607f821691505b602082108103620004c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200051757805f5260205f20601f840160051c81016020851015620004f35750805b601f840160051c820191505b8181101562000514575f8155600101620004ff565b50505b505050565b81516001600160401b03811115620005385762000538620001e5565b620005508162000549845462000492565b84620004cc565b602080601f83116001811462000586575f84156200056e5750858301515b5f19600386901b1c1916600185901b178555620005e0565b5f85815260208120601f198616915b82811015620005b65788860151825594840194600190910190840162000595565b5085821015620005d457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60805160a05161392b620006505f395f81816106f301528181611f9b0152818161200d015261229a01525f81816105a301528181610b5901528181611296015281816115bc01528181611a17015281816123ee0152818161251301526125fb015261392b5ff3fe6080604052600436106102d7575f3560e01c80637d25a05e1161017b578063bb0b6a53116100d1578063d045a0dc11610087578063f2fde38b11610062578063f2fde38b146108d0578063fc0c546a1461052c578063ff7bd03d146108ef575f80fd5b8063d045a0dc1461084d578063d424388514610860578063dd62ed3e1461087f575f80fd5b8063bd815db0116100b7578063bd815db0146107fa578063c7c7f5b31461080d578063ca5eb5e11461082e575f80fd5b8063bb0b6a53146107b0578063bc70b354146107db575f80fd5b8063963efcaa11610131578063a9059cbb1161010c578063a9059cbb14610746578063b731ea0a14610765578063b98bd07014610791575f80fd5b8063963efcaa146106e25780639dc29fac146107155780639f68b96414610734575f80fd5b8063857749b011610161578063857749b0146106925780638da5cb5b146106a557806395d89b41146106ce575f80fd5b80637d25a05e1461063957806382413eac14610673575f80fd5b8063313ce567116102305780635535d461116101e65780636fc1b31e116101c15780636fc1b31e146105c557806370a08231146105e4578063715018a614610625575f80fd5b80635535d4611461053e5780635a0dfe4d1461055d5780635e280f1114610592575f80fd5b80633b6f743b116102165780633b6f743b146104e157806340c10f191461050d57806352ae28791461052c575f80fd5b8063313ce567146104a15780633400288b146104c2575f80fd5b8063134d4f251161029057806318160ddd1161026b57806318160ddd146104505780631f5e13341461046e57806323b872dd14610482575f80fd5b8063134d4f25146103c8578063156a0d0f146103ef57806317442b701461042f575f80fd5b80630d35b415116102c05780630d35b41514610334578063111ecdad1461036257806313137d65146103b3575f80fd5b806306fdde03146102db578063095ea7b314610305575b5f80fd5b3480156102e6575f80fd5b506102ef61090e565b6040516102fc91906127f6565b60405180910390f35b348015610310575f80fd5b5061032461031f366004612829565b61099e565b60405190151581526020016102fc565b34801561033f575f80fd5b5061035361034e366004612869565b6109b7565b6040516102fc9392919061289b565b34801561036d575f80fd5b5060045461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102fc565b6103c66103c13660046129a5565b610b57565b005b3480156103d3575f80fd5b506103dc600281565b60405161ffff90911681526020016102fc565b3480156103fa575f80fd5b50604080517f02e49c2c00000000000000000000000000000000000000000000000000000000815260016020820152016102fc565b34801561043a575f80fd5b50604080516001815260026020820152016102fc565b34801561045b575f80fd5b506007545b6040519081526020016102fc565b348015610479575f80fd5b506103dc600181565b34801561048d575f80fd5b5061032461049c366004612a3e565b610c56565b3480156104ac575f80fd5b5060125b60405160ff90911681526020016102fc565b3480156104cd575f80fd5b506103c66104dc366004612a94565b610c7b565b3480156104ec575f80fd5b506105006104fb366004612abb565b610c91565b6040516102fc9190612b0a565b348015610518575f80fd5b506103c6610527366004612829565b610cf5565b348015610537575f80fd5b503061038e565b348015610549575f80fd5b506102ef610558366004612b32565b610cff565b348015610568575f80fd5b50610324610577366004612a94565b63ffffffff919091165f908152600160205260409020541490565b34801561059d575f80fd5b5061038e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d0575f80fd5b506103c66105df366004612b63565b610da1565b3480156105ef575f80fd5b506104606105fe366004612b63565b73ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604090205490565b348015610630575f80fd5b506103c6610e23565b348015610644575f80fd5b5061065a610653366004612a94565b5f92915050565b60405167ffffffffffffffff90911681526020016102fc565b34801561067e575f80fd5b5061032461068d366004612b7e565b610e36565b34801561069d575f80fd5b5060066104b0565b3480156106b0575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661038e565b3480156106d9575f80fd5b506102ef610e58565b3480156106ed575f80fd5b506104607f000000000000000000000000000000000000000000000000000000000000000081565b348015610720575f80fd5b506103c661072f366004612829565b610e67565b34801561073f575f80fd5b505f610324565b348015610751575f80fd5b50610324610760366004612829565b610e71565b348015610770575f80fd5b5060025461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561079c575f80fd5b506103c66107ab366004612c22565b610e7e565b3480156107bb575f80fd5b506104606107ca366004612c61565b60016020525f908152604090205481565b3480156107e6575f80fd5b506102ef6107f5366004612c7a565b610e98565b6103c6610808366004612c22565b611052565b61082061081b366004612cd7565b611216565b6040516102fc929190612d5e565b348015610839575f80fd5b506103c6610848366004612b63565b611249565b6103c661085b3660046129a5565b6112f0565b34801561086b575f80fd5b506103c661087a366004612b63565b611338565b34801561088a575f80fd5b50610460610899366004612db0565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260066020908152604080832093909416825291909152205490565b3480156108db575f80fd5b506103c66108ea366004612b63565b6113b3565b3480156108fa575f80fd5b50610324610909366004612ddc565b611416565b60606008805461091d90612df6565b80601f016020809104026020016040519081016040528092919081815260200182805461094990612df6565b80156109945780601f1061096b57610100808354040283529160200191610994565b820191905f5260205f20905b81548152906001019060200180831161097757829003601f168201915b5050505050905090565b5f336109ab81858561144a565b60019150505b92915050565b604080518082019091525f808252602082015260606109e760405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a569190612e41565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac29190612e5c565b604080518082018252848152602080820184905282515f80825291810190935290975091925090610b15565b604080518082019091525f815260606020820152815260200190600190039081610aee5790505b5093505f80610b39604089013560608a0135610b3460208c018c612c61565b61145c565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610bcd576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b60208701803590610be790610be2908a612c61565b6114b0565b14610c3e57610bf96020880188612c61565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610bc4565b610c4d87878787878787611504565b50505050505050565b5f33610c63858285611695565b610c6e858585611762565b60019150505b9392505050565b610c8361180b565b610c8d828261185d565b5050565b604080518082019091525f80825260208201525f610cbf60408501356060860135610b346020880188612c61565b9150505f80610cce86846118b1565b9092509050610ceb610ce36020880188612c61565b838388611a02565b9695505050505050565b610c8d8282611aed565b600360209081525f928352604080842090915290825290208054610d2290612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4e90612df6565b8015610d995780601f10610d7057610100808354040283529160200191610d99565b820191905f5260205f20905b815481529060010190602001808311610d7c57829003601f168201915b505050505081565b610da961180b565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610e2b61180b565b610e345f611b47565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b60606009805461091d90612df6565b610c8d8282611bbb565b5f336109ab818585611762565b610e8661180b565b610c8d610e938284612f80565b611c15565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ecb90612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef790612df6565b8015610f425780601f10610f1957610100808354040283529160200191610f42565b820191905f5260205f20905b815481529060010190602001808311610f2557829003601f168201915b5050505050905080515f03610f905783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610e509350505050565b5f839003610f9f579050610e50565b6002831061101c57610fe584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611d1692505050565b80610ff38460028188613089565b604051602001611005939291906130b0565b604051602081830303815290604052915050610e50565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc492919061311d565b5f5b81811015611155573683838381811061106f5761106f613130565b9050602002810190611081919061315d565b90506110b36110936020830183612c61565b602083013563ffffffff919091165f908152600160205260409020541490565b6110bd575061114d565b3063d045a0dc60c08301358360a08101356110dc610100830183613199565b6110ed610100890160e08a01612b63565b6110fb6101208a018a613199565b6040518963ffffffff1660e01b815260040161111d979695949392919061320f565b5f604051808303818588803b158015611134575f80fd5b505af1158015611146573d5f803e3d5ffd5b5050505050505b600101611054565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa15801561119e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111e391908101906132a2565b6040517f8351eea7000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b61121e612747565b604080518082019091525f808252602082015261123c858585611d5b565b915091505b935093915050565b61125161180b565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b1580156112d7575f80fd5b505af11580156112e9573d5f803e3d5ffd5b5050505050565b333014611329576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c4d87878787878787610c3e565b61134061180b565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610e18565b6113bb61180b565b73ffffffffffffffffffffffffffffffffffffffff811661140a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b61141381611b47565b50565b5f60208201803590600190839061142d9086612c61565b63ffffffff16815260208101919091526040015f20541492915050565b6114578383836001611e53565b505050565b5f8061146785611f98565b915081905083811015611241576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610bc4565b63ffffffff81165f90815260016020526040812054806109b1576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610bc4565b5f6115156115128787611fce565b90565b90505f6115408261152e6115298a8a611fe5565b612007565b61153b60208d018d612c61565b61203c565b90506028861115611626575f61157c61155f60608c0160408d0161330b565b61156c60208d018d612c61565b846115778c8c612070565b6120ba565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906115f79086908d905f908790600401613326565b5f604051808303815f87803b15801561160e575f80fd5b505af1158015611620573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61166c60208d018d612c61565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600660209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461175c578181101561174e576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610bc4565b61175c84848484035f611e53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166117b1576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8216611800576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b6114578383836120ec565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610e34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610bc4565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61190c85602001356118c686612293565b6118d360a0890189613199565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061230692505050565b90935090505f8161191e576001611921565b60025b90506119416119336020880188612c61565b826107f560808a018a613199565b60045490935073ffffffffffffffffffffffffffffffffffffffff1680156119f8576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906119b79088908890600401613364565b602060405180830381865afa1580156119d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f69190613388565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff168152602001611a71896114b0565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611aa69291906133a3565b6040805180830381865afa158015611ac0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae49190613474565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611b3c576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d5f83836120ec565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611c0a576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d825f836120ec565b5f5b8151811015611ce657611c46828281518110611c3557611c35613130565b602002602001015160400151611d16565b818181518110611c5857611c58613130565b60200260200101516040015160035f848481518110611c7957611c79613130565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611cb057611cb0613130565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611cdd91906134d2565b50600101611c17565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610e1891906135ee565b600281015161ffff8116600314610c8d57816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b611d63612747565b604080518082019091525f80825260208201525f80611d9833604089013560608a0135611d9360208c018c612c61565b612398565b915091505f80611da889846118b1565b9092509050611dd4611dbd60208b018b612c61565b8383611dce368d90038d018d613695565b8b6123bd565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611e22908d018d612c61565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff8416611ea2576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8316611ef1576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600660209081526040808320938716835292905220829055801561175c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611f8a91815260200190565b60405180910390a350505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000611fc481846136f2565b6109b1919061372a565b5f611fdc6020828486613089565b610c7491613741565b5f611ff4602860208486613089565b611ffd9161377d565b60c01c9392505050565b5f6109b17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff841661372a565b5f73ffffffffffffffffffffffffffffffffffffffff841661205e5761dead93505b6120688484611aed565b509092915050565b606061207f8260288186613089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b6060848484846040516020016120d394939291906137c5565b6040516020818303038152906040529050949350505050565b73ffffffffffffffffffffffffffffffffffffffff8316612123578060075f8282546121189190613842565b909155506121d39050565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260056020526040902054818110156121a8576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610bc4565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526005602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166121fc57600780548290039055612227565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526005602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161228691815260200190565b60405180910390a3505050565b5f806122bf7f0000000000000000000000000000000000000000000000000000000000000000846136f2565b905067ffffffffffffffff8111156109b1576040517fe2ce941300000000000000000000000000000000000000000000000000000000815260048101829052602401610bc4565b805160609015158061236757848460405160200161235392919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b60405160208183030381529060405261238e565b8484338560405160200161237e9493929190613855565b6040516020818303038152906040525b9150935093915050565b5f806123a585858561145c565b90925090506123b48683611bbb565b94509492505050565b6123c5612747565b5f6123d2845f01516124d0565b6020850151909150156123ec576123ec8460200151612510565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff1681526020016124498c6114b0565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b81526004016124849291906133a3565b60806040518083038185885af11580156124a0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906124c591906138ad565b979650505050505050565b5f81341461250c576040517f9f704120000000000000000000000000000000000000000000000000000000008152346004820152602401610bc4565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259e9190612e41565b905073ffffffffffffffffffffffffffffffffffffffff81166125ed576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805133602482018190527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff81811660448501526064808501889052855180860390910181526084909401909452602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001781528451610c8d96881695899361175c9388935f9283929091839182885af1806126c7576040513d5f823e3d81fd5b50505f513d915081156126de5780600114156126f8565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561175c576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610bc4565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161278660405180604001604052805f81526020015f81525090565b905290565b5f5b838110156127a557818101518382015260200161278d565b50505f910152565b5f81518084526127c481602086016020860161278b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610c7460208301846127ad565b73ffffffffffffffffffffffffffffffffffffffff81168114611413575f80fd5b5f806040838503121561283a575f80fd5b823561284581612808565b946020939093013593505050565b5f60e08284031215612863575f80fd5b50919050565b5f60208284031215612879575f80fd5b813567ffffffffffffffff81111561288f575f80fd5b610e5084828501612853565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612932578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261291f878901826127ad565b97505093820193908201906001016128d5565b50508751606088015250505060208501516080850152509050610e50565b5f60608284031215612863575f80fd5b5f8083601f840112612970575f80fd5b50813567ffffffffffffffff811115612987575f80fd5b60208301915083602082850101111561299e575f80fd5b9250929050565b5f805f805f805f60e0888a0312156129bb575f80fd5b6129c58989612950565b965060608801359550608088013567ffffffffffffffff808211156129e8575f80fd5b6129f48b838c01612960565b909750955060a08a01359150612a0982612808565b90935060c08901359080821115612a1e575f80fd5b50612a2b8a828b01612960565b989b979a50959850939692959293505050565b5f805f60608486031215612a50575f80fd5b8335612a5b81612808565b92506020840135612a6b81612808565b929592945050506040919091013590565b803563ffffffff81168114612a8f575f80fd5b919050565b5f8060408385031215612aa5575f80fd5b61284583612a7c565b8015158114611413575f80fd5b5f8060408385031215612acc575f80fd5b823567ffffffffffffffff811115612ae2575f80fd5b612aee85828601612853565b9250506020830135612aff81612aae565b809150509250929050565b8151815260208083015190820152604081016109b1565b803561ffff81168114612a8f575f80fd5b5f8060408385031215612b43575f80fd5b612b4c83612a7c565b9150612b5a60208401612b21565b90509250929050565b5f60208284031215612b73575f80fd5b8135610c7481612808565b5f805f8060a08587031215612b91575f80fd5b612b9b8686612950565b9350606085013567ffffffffffffffff811115612bb6575f80fd5b612bc287828801612960565b9094509250506080850135612bd681612808565b939692955090935050565b5f8083601f840112612bf1575f80fd5b50813567ffffffffffffffff811115612c08575f80fd5b6020830191508360208260051b850101111561299e575f80fd5b5f8060208385031215612c33575f80fd5b823567ffffffffffffffff811115612c49575f80fd5b612c5585828601612be1565b90969095509350505050565b5f60208284031215612c71575f80fd5b610c7482612a7c565b5f805f8060608587031215612c8d575f80fd5b612c9685612a7c565b9350612ca460208601612b21565b9250604085013567ffffffffffffffff811115612cbf575f80fd5b612ccb87828801612960565b95989497509550505050565b5f805f8385036080811215612cea575f80fd5b843567ffffffffffffffff811115612d00575f80fd5b612d0c87828801612853565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612d3e575f80fd5b506020840191506060840135612d5381612808565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff60208501511660208301526040840151612d99604084018280518252602090810151910152565b5082516080830152602083015160a0830152610c74565b5f8060408385031215612dc1575f80fd5b8235612dcc81612808565b91506020830135612aff81612808565b5f60608284031215612dec575f80fd5b610c748383612950565b600181811c90821680612e0a57607f821691505b602082108103612863577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208284031215612e51575f80fd5b8151610c7481612808565b5f60208284031215612e6c575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715612ec357612ec3612e73565b60405290565b6040805190810167ffffffffffffffff81118282101715612ec357612ec3612e73565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f3357612f33612e73565b604052919050565b5f67ffffffffffffffff821115612f5457612f54612e73565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612f9a57612f9a612e73565b8360051b6020612fab818301612eec565b868152918501918181019036841115612fc2575f80fd5b865b8481101561307d57803586811115612fda575f80fd5b88016060368290031215612fec575f80fd5b612ff4612ea0565b612ffd82612a7c565b815261300a868301612b21565b8682015260408083013589811115613020575f80fd5b929092019136601f840112613033575f80fd5b823561304661304182612f3b565b612eec565b8181523689838701011115613059575f80fd5b818986018a8301375f91810189019190915290820152845250918301918301612fc4565b50979650505050505050565b5f8085851115613097575f80fd5b838611156130a3575f80fd5b5050820193919092039150565b5f84516130c181846020890161278b565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610e506020830184866130d6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261318f575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126131cc575f80fd5b83018035915067ffffffffffffffff8211156131e6575f80fd5b60200191503681900382131561299e575f80fd5b67ffffffffffffffff81168114611413575f80fd5b63ffffffff61321d89612a7c565b168152602088013560208201525f6040890135613239816131fa565b67ffffffffffffffff811660408401525087606083015260e0608083015261326560e0830187896130d6565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c08401526132948185876130d6565b9a9950505050505050505050565b5f602082840312156132b2575f80fd5b815167ffffffffffffffff8111156132c8575f80fd5b8201601f810184136132d8575f80fd5b80516132e661304182612f3b565b8181528560208385010111156132fa575f80fd5b611ae482602083016020860161278b565b5f6020828403121561331b575f80fd5b8135610c74816131fa565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f610ceb60808301846127ad565b604081525f61337660408301856127ad565b8281036020840152611ae481856127ad565b5f60208284031215613398575f80fd5b8151610c7481612aae565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a060808401526133d860e08401826127ad565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a085015261341382826127ad565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215613456575f80fd5b61345e612ec9565b9050815181526020820151602082015292915050565b5f60408284031215613484575f80fd5b610c748383613446565b601f82111561145757805f5260205f20601f840160051c810160208510156134b35750805b601f840160051c820191505b818110156112e9575f81556001016134bf565b815167ffffffffffffffff8111156134ec576134ec612e73565b613500816134fa8454612df6565b8461348e565b602080601f831160018114613552575f841561351c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556135e6565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561359e5788860151825594840194600190910190840161357f565b50858210156135da57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015613687578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052613673818601836127ad565b968901969450505090860190600101613615565b509098975050505050505050565b5f604082840312156136a5575f80fd5b6136ad612ec9565b82358152602083013560208201528091505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f82613725577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109b1576109b16136c5565b803560208310156109b1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156137bd5780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161383281602c85016020870161278b565b91909101602c0195945050505050565b808201808211156109b1576109b16136c5565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f825161389d81604885016020870161278b565b9190910160480195945050505050565b5f608082840312156138bd575f80fd5b6138c5612ea0565b8251815260208301516138d7816131fa565b60208201526138e98460408501613446565b6040820152939250505056fea2646970667358221220a7e78c28d4976391911497373c3bfff426de060fa72d1fbc537e431a0fece95964736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b1c38038062001b1c833981016040819052620000339162000240565b808383600362000044838262000351565b50600462000053828262000351565b5050505f8062000069836200009b60201b60201c565b91509150816200007b5760126200007d565b805b60ff1660a05250506001600160a01b03166080525062000452915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691620000e3916200041d565b5f60405180830381855afa9150503d805f81146200011d576040519150601f19603f3d011682016040523d82523d5f602084013e62000122565b606091505b50915091508180156200013757506020815110155b156200016e575f818060200190518101906200015491906200043a565b905060ff81116200016c576001969095509350505050565b505b505f9485945092505050565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015620001aa57818101518382015260200162000190565b50505f910152565b5f82601f830112620001c2575f80fd5b81516001600160401b0380821115620001df57620001df6200017a565b604051601f8301601f19908116603f011681019082821181831017156200020a576200020a6200017a565b8160405283815286602085880101111562000223575f80fd5b620002368460208301602089016200018e565b9695505050505050565b5f805f6060848603121562000253575f80fd5b83516001600160401b03808211156200026a575f80fd5b6200027887838801620001b2565b945060208601519150808211156200028e575f80fd5b506200029d86828701620001b2565b604086015190935090506001600160a01b0381168114620002bc575f80fd5b809150509250925092565b600181811c90821680620002dc57607f821691505b602082108103620002fb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200034c57805f5260205f20601f840160051c81016020851015620003285750805b601f840160051c820191505b8181101562000349575f815560010162000334565b50505b505050565b81516001600160401b038111156200036d576200036d6200017a565b62000385816200037e8454620002c7565b8462000301565b602080601f831160018114620003bb575f8415620003a35750858301515b5f19600386901b1c1916600185901b17855562000415565b5f85815260208120601f198616915b82811015620003eb57888601518255948401946001909101908401620003ca565b50858210156200040957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251620004308184602087016200018e565b9190910192915050565b5f602082840312156200044b575f80fd5b5051919050565b60805160a051611693620004895f395f6105d301525f818161027c0152818161043101528181610a880152610bd601526116935ff3fe608060405234801561000f575f80fd5b50600436106101b0575f3560e01c806370a08231116100f3578063ba08765211610093578063ce96cb771161006e578063ce96cb77146103c3578063d905777e146103d6578063dd62ed3e146103e9578063ef8b30f7146103b0575f80fd5b8063ba0876521461039d578063c63d75b6146102a6578063c6e6f592146103b0575f80fd5b80639dc29fac116100ce5780639dc29fac14610351578063a9059cbb14610364578063b3d7f6b914610377578063b460af941461038a575f80fd5b806370a082311461030157806394bf804d1461033657806395d89b4114610349575f80fd5b806323b872dd1161015e578063402d267d11610139578063402d267d146102a657806340c10f19146102d95780634cdad506146101e45780636e553f65146102ee575f80fd5b806323b872dd14610235578063313ce5671461024857806338d52e0f14610262575f80fd5b8063095ea7b31161018e578063095ea7b3146101f75780630a28a4771461021a57806318160ddd1461022d575f80fd5b806301e1d114146101b457806306fdde03146101cf57806307a2d13a146101e4575b5f80fd5b6101bc61042e565b6040519081526020015b60405180910390f35b6101d76104e3565b6040516101c69190611222565b6101bc6101f236600461128c565b610573565b61020a6102053660046112cb565b610584565b60405190151581526020016101c6565b6101bc61022836600461128c565b61059b565b6002546101bc565b61020a6102433660046112f3565b6105a7565b6102506105cc565b60405160ff90911681526020016101c6565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c6565b6101bc6102b436600461132c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b6102ec6102e73660046112cb565b6105f7565b005b6101bc6102fc366004611345565b610605565b6101bc61030f36600461132c565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b6101bc610344366004611345565b610655565b6101d761068f565b6102ec61035f3660046112cb565b61069e565b61020a6103723660046112cb565b6106a8565b6101bc61038536600461128c565b6106b5565b6101bc61039836600461136f565b6106c1565b6101bc6103ab36600461136f565b610750565b6101bc6103be36600461128c565b6107d6565b6101bc6103d136600461132c565b6107e1565b6101bc6103e436600461132c565b610810565b6101bc6103f73660046113a8565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b5f7f00000000000000000000000000000000000000000000000000000000000000006040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa1580156104ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104de91906113d0565b905090565b6060600380546104f2906113e7565b80601f016020809104026020016040519081016040528092919081815260200182805461051e906113e7565b80156105695780601f1061054057610100808354040283529160200191610569565b820191905f5260205f20905b81548152906001019060200180831161054c57829003601f168201915b5050505050905090565b5f61057e825f61083a565b92915050565b5f33610591818585610872565b5060019392505050565b5f61057e826001610884565b5f336105b48582856108b3565b6105bf858585610980565b60019150505b9392505050565b5f6104de817f0000000000000000000000000000000000000000000000000000000000000000611465565b6106018282610a29565b5050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610635565b60405180910390fd5b5f61063f856107d6565b905061064d33858784610a83565b949350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f610681856106b5565b905061064d33858388610a83565b6060600480546104f2906113e7565b6106018282610b2f565b5f33610591818585610980565b5f61057e82600161083a565b5f806106cc836107e1565b90508085111561072e576040517ffe9cceec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107388661059b565b90506107473386868985610b89565b95945050505050565b5f8061075b83610810565b9050808511156107bd576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107c786610573565b9050610747338686848a610b89565b5f61057e825f610884565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e905f61083a565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e565b5f6105c561084661042e565b61085190600161147e565b61085c5f600a6115af565b600254610869919061147e565b85919085610c8a565b61087f8383836001610ccc565b505050565b5f6105c561089382600a6115af565b6002546108a0919061147e565b6108a861042e565b61086990600161147e565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461097a578181101561096c576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018290526044810183905260640161062c565b61097a84848484035f610ccc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109cf576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8216610a1e576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b61087f838383610e03565b73ffffffffffffffffffffffffffffffffffffffff8216610a78576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b6106015f8383610e03565b610aaf7f0000000000000000000000000000000000000000000000000000000000000000853085610faa565b610ab98382610a29565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051610b21929190918252602082015260400190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b7e576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b610601825f83610e03565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610bc757610bc78386836108b3565b610bd18382610b2f565b610bfc7f00000000000000000000000000000000000000000000000000000000000000008584611033565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051610c7b929190918252602082015260400190565b60405180910390a45050505050565b5f610cb7610c9783611071565b8015610cb257505f8480610cad57610cad6115bd565b868809115b151590565b610cc286868661109d565b610747919061147e565b73ffffffffffffffffffffffffffffffffffffffff8416610d1b576040517fe602df050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8316610d6a576040517f94280d620000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600160209081526040808320938716835292905220829055801561097a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b2191815260200190565b73ffffffffffffffffffffffffffffffffffffffff8316610e3a578060025f828254610e2f919061147e565b90915550610eea9050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020819052604090205481811015610ebf576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602481018290526044810183905260640161062c565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610f1357600280548290039055610f3e565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f9d91815260200190565b60405180910390a3505050565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283811660448301526064820183905261097a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611172565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261087f91859182169063a9059cbb90606401610fec565b5f6002826003811115611086576110866115ea565b6110909190611617565b60ff166001149050919050565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f036110f0578382816110e6576110e66115bd565b04925050506105c5565b808411611107576111076003851502601118611211565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f8060205f8451602086015f885af180611191576040513d5f823e3d81fd5b50505f513d915081156111a85780600114156111c2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561097a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161062c565b634e487b715f52806020526024601cfd5b5f602080835283518060208501525f5b8181101561124e57858101830151858201604001528201611232565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f6020828403121561129c575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112c6575f80fd5b919050565b5f80604083850312156112dc575f80fd5b6112e5836112a3565b946020939093013593505050565b5f805f60608486031215611305575f80fd5b61130e846112a3565b925061131c602085016112a3565b9150604084013590509250925092565b5f6020828403121561133c575f80fd5b6105c5826112a3565b5f8060408385031215611356575f80fd5b82359150611366602084016112a3565b90509250929050565b5f805f60608486031215611381575f80fd5b83359250611391602085016112a3565b915061139f604085016112a3565b90509250925092565b5f80604083850312156113b9575f80fd5b6113c2836112a3565b9150611366602084016112a3565b5f602082840312156113e0575f80fd5b5051919050565b600181811c908216806113fb57607f821691505b602082108103611432577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff818116838216019081111561057e5761057e611438565b8082018082111561057e5761057e611438565b600181815b808511156114ea57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156114d0576114d0611438565b808516156114dd57918102915b93841c9390800290611496565b509250929050565b5f826115005750600161057e565b8161150c57505f61057e565b8160018114611522576002811461152c57611548565b600191505061057e565b60ff84111561153d5761153d611438565b50506001821b61057e565b5060208310610133831016604e8410600b841016171561156b575081810a61057e565b6115758383611491565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156115a7576115a7611438565b029392505050565b5f6105c560ff8416836114f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff83168061164e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff8416069150509291505056fea2646970667358221220e4c7204716e83cc6436d4c089c98eaebf1301b2ac725b313f068e28e347d110264736f6c6343000816003360e060405234801562000010575f80fd5b506040516200355f3803806200355f833981016040819052620000339162000240565b828282826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000099919062000287565b8282818181813380620000c557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000d081620001d0565b506001600160a01b038083166080528116620000ff57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b15801562000144575f80fd5b505af115801562000157573d5f803e3d5ffd5b50505050505050506200016f6200021f60201b60201c565b60ff168360ff16101562000196576040516301e9714b60e41b815260040160405180910390fd5b620001a3600684620002c4565b620001b090600a620003df565b60a0525050506001600160a01b0390921660c05250620003ef9350505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b80516001600160a01b03811681146200023b575f80fd5b919050565b5f805f6060848603121562000253575f80fd5b6200025e8462000224565b92506200026e6020850162000224565b91506200027e6040850162000224565b90509250925092565b5f6020828403121562000298575f80fd5b815160ff81168114620002a9575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b60ff8281168282160390811115620002e057620002e0620002b0565b92915050565b600181815b808511156200032657815f19048211156200030a576200030a620002b0565b808516156200031857918102915b93841c9390800290620002eb565b509250929050565b5f826200033e57506001620002e0565b816200034c57505f620002e0565b8160018114620003655760028114620003705762000390565b6001915050620002e0565b60ff841115620003845762000384620002b0565b50506001821b620002e0565b5060208310610133831016604e8410600b8410161715620003b5575081810a620002e0565b620003c18383620002e6565b805f1904821115620003d757620003d7620002b0565b029392505050565b5f620002a960ff8416836200032e565b60805160a05160c0516130f16200046e5f395f818161069e015281816119b40152611b9001525f8181610514015281816118f10152818161196a0152611a6601525f81816104110152818161088301528181610f6d015281816112810152818161156601528181611bf201528181611de90152611ee001526130f15ff3fe6080604052600436106101f5575f3560e01c806382413eac11610117578063bc70b354116100ac578063d045a0dc1161007c578063f2fde38b11610062578063f2fde38b14610671578063fc0c546a14610690578063ff7bd03d146106c2575f80fd5b8063d045a0dc1461063f578063d424388514610652575f80fd5b8063bc70b354146105cd578063bd815db0146105ec578063c7c7f5b3146105ff578063ca5eb5e114610620575f80fd5b80639f68b964116100e75780639f68b96414610544578063b731ea0a14610557578063b98bd07014610583578063bb0b6a53146105a2575f80fd5b806382413eac146104a0578063857749b0146104bf5780638da5cb5b146104da578063963efcaa14610503575f80fd5b80633b6f743b1161018d5780635e280f111161015d5780635e280f11146104005780636fc1b31e14610433578063715018a6146104525780637d25a05e14610466575f80fd5b80633b6f743b1461035157806352ae28791461037d5780635535d4611461038f5780635a0dfe4d146103bb575f80fd5b8063156a0d0f116101c8578063156a0d0f146102bd57806317442b70146102fd5780631f5e13341461031e5780633400288b14610332575f80fd5b80630d35b415146101f9578063111ecdad1461023057806313137d6514610281578063134d4f2514610296575b5f80fd5b348015610204575f80fd5b50610218610213366004611ffe565b6106e1565b6040516102279392919061209b565b60405180910390f35b34801561023b575f80fd5b5060045461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610227565b61029461028f3660046121c6565b610881565b005b3480156102a1575f80fd5b506102aa600281565b60405161ffff9091168152602001610227565b3480156102c8575f80fd5b50604080517f02e49c2c0000000000000000000000000000000000000000000000000000000081526001602082015201610227565b348015610308575f80fd5b5060408051600181526002602082015201610227565b348015610329575f80fd5b506102aa600181565b34801561033d575f80fd5b5061029461034c366004612277565b610980565b34801561035c575f80fd5b5061037061036b3660046122ac565b610996565b60405161022791906122fb565b348015610388575f80fd5b503061025c565b34801561039a575f80fd5b506103ae6103a9366004612323565b6109fc565b6040516102279190612354565b3480156103c6575f80fd5b506103f06103d5366004612277565b63ffffffff919091165f908152600160205260409020541490565b6040519015158152602001610227565b34801561040b575f80fd5b5061025c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043e575f80fd5b5061029461044d366004612366565b610a9e565b34801561045d575f80fd5b50610294610b20565b348015610471575f80fd5b50610487610480366004612277565b5f92915050565b60405167ffffffffffffffff9091168152602001610227565b3480156104ab575f80fd5b506103f06104ba366004612381565b610b33565b3480156104ca575f80fd5b5060405160068152602001610227565b3480156104e5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661025c565b34801561050e575f80fd5b506105367f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610227565b34801561054f575f80fd5b5060016103f0565b348015610562575f80fd5b5060025461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561058e575f80fd5b5061029461059d366004612425565b610b55565b3480156105ad575f80fd5b506105366105bc366004612464565b60016020525f908152604090205481565b3480156105d8575f80fd5b506103ae6105e736600461247d565b610b6f565b6102946105fa366004612425565b610d29565b61061261060d3660046124da565b610eed565b604051610227929190612561565b34801561062b575f80fd5b5061029461063a366004612366565b610f20565b61029461064d3660046121c6565b610fc7565b34801561065d575f80fd5b5061029461066c366004612366565b61100f565b34801561067c575f80fd5b5061029461068b366004612366565b61108a565b34801561069b575f80fd5b507f000000000000000000000000000000000000000000000000000000000000000061025c565b3480156106cd575f80fd5b506103f06106dc3660046125b3565b6110ed565b604080518082019091525f8082526020820152606061071160405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078091906125cd565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ec91906125e8565b604080518082018252848152602080820184905282515f8082529181019093529097509192509061083f565b604080518082019091525f8152606060208201528152602001906001900390816108185790505b5093505f80610863604089013560608a013561085e60208c018c612464565b611121565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146108f7576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b602087018035906109119061090c908a612464565b611175565b14610968576109236020880188612464565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602088013560248201526044016108ee565b610977878787878787876111c9565b50505050505050565b61098861135a565b61099282826113ac565b5050565b604080518082019091525f80825260208201525f6109c46040850135606086013561085e6020880188612464565b9150505f806109d38684611400565b90925090506109f06109e86020880188612464565b838388611551565b93505050505b92915050565b600360209081525f928352604080842090915290825290208054610a1f9061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4b9061262c565b8015610a965780601f10610a6d57610100808354040283529160200191610a96565b820191905f5260205f20905b815481529060010190602001808311610a7957829003601f168201915b505050505081565b610aa661135a565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610b2861135a565b610b315f61163c565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b610b5d61135a565b610992610b6a8284612757565b6116b0565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ba29061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bce9061262c565b8015610c195780601f10610bf057610100808354040283529160200191610c19565b820191905f5260205f20905b815481529060010190602001808311610bfc57829003601f168201915b5050505050905080515f03610c675783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610b4d9350505050565b5f839003610c76579050610b4d565b60028310610cf357610cbc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506117b192505050565b80610cca8460028188612860565b604051602001610cdc93929190612887565b604051602081830303815290604052915050610b4d565b83836040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9291906128f4565b5f5b81811015610e2c5736838383818110610d4657610d46612907565b9050602002810190610d589190612934565b9050610d8a610d6a6020830183612464565b602083013563ffffffff919091165f908152600160205260409020541490565b610d945750610e24565b3063d045a0dc60c08301358360a0810135610db3610100830183612970565b610dc4610100890160e08a01612366565b610dd26101208a018a612970565b6040518963ffffffff1660e01b8152600401610df497969594939291906129e6565b5f604051808303818588803b158015610e0b575f80fd5b505af1158015610e1d573d5f803e3d5ffd5b5050505050505b600101610d2b565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015610e75573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610eba9190810190612a79565b6040517f8351eea70000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b610ef5611fa4565b604080518082019091525f8082526020820152610f138585856117f6565b915091505b935093915050565b610f2861135a565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b158015610fae575f80fd5b505af1158015610fc0573d5f803e3d5ffd5b5050505050565b333014611000576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097787878787878787610968565b61101761135a565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610b15565b61109261135a565b73ffffffffffffffffffffffffffffffffffffffff81166110e1576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016108ee565b6110ea8161163c565b50565b5f6020820180359060019083906111049086612464565b63ffffffff16815260208101919091526040015f20541492915050565b5f8061112c856118ee565b915081905083811015610f18576040517f71c4efed00000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016108ee565b63ffffffff81165f90815260016020526040812054806109f6576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff841660048201526024016108ee565b5f6111da6111d78787611924565b90565b90505f611205826111f36111ee8a8a611942565b611964565b61120060208d018d612464565b611999565b905060288611156112eb575f61124161122460608c0160408d01612ae2565b61123160208d018d612464565b8461123c8c8c6119e3565b611a2d565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112bc9086908d905f908790600401612afd565b5f604051808303815f87803b1580156112d3575f80fd5b505af11580156112e5573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61133160208d018d612464565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b31576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016108ee565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61145b856020013561141586611a5f565b61142260a0890189612970565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611ad292505050565b90935090505f8161146d576001611470565b60025b90506114906114826020880188612464565b826105e760808a018a612970565b60045490935073ffffffffffffffffffffffffffffffffffffffff168015611547576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906115069088908890600401612b45565b602060405180830381865afa158015611521573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115459190612b69565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff1681526020016115c089611175565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016115f5929190612b84565b6040805180830381865afa15801561160f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116339190612c55565b95945050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b8151811015611781576116e18282815181106116d0576116d0612907565b6020026020010151604001516117b1565b8181815181106116f3576116f3612907565b60200260200101516040015160035f84848151811061171457611714612907565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f84848151811061174b5761174b612907565b60200260200101516020015161ffff1661ffff1681526020019081526020015f2090816117789190612cb3565b506001016116b2565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610b159190612dcf565b600281015161ffff811660031461099257816040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b6117fe611fa4565b604080518082019091525f80825260208201525f8061183333604089013560608a013561182e60208c018c612464565b611b64565b915091505f806118438984611400565b909250905061186f61185860208b018b612464565b8383611869368d90038d018d612e76565b8b611bc1565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118bd908d018d612464565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b5f7f000000000000000000000000000000000000000000000000000000000000000061191a8184612ea6565b6109f69190612ede565b5f6119326020828486612860565b61193b91612f1a565b9392505050565b5f611951602860208486612860565b61195a91612f56565b60c01c9392505050565b5f6109f67f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff8416612ede565b5f6119db73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585611cd4565b509092915050565b60606119f28260288186612860565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606084848484604051602001611a469493929190612f9e565b6040516020818303038152906040529050949350505050565b5f80611a8b7f000000000000000000000000000000000000000000000000000000000000000084612ea6565b905067ffffffffffffffff8111156109f6576040517fe2ce9413000000000000000000000000000000000000000000000000000000008152600481018290526024016108ee565b8051606090151580611b33578484604051602001611b1f92919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b604051602081830303815290604052611b5a565b84843385604051602001611b4a949392919061301b565b6040516020818303038152906040525b9150935093915050565b5f80611b71858585611121565b9092509050611bb873ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016873085611d5a565b94509492505050565b611bc9611fa4565b5f611bd6845f0151611da6565b602085015190915015611bf057611bf08460200151611de6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff168152602001611c4d8c611175565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b8152600401611c88929190612b84565b60806040518083038185885af1158015611ca4573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611cc99190613073565b979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052611d5591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611f05565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052611da09186918216906323b872dd90608401611d0e565b50505050565b5f813414611de2576040517f9f7041200000000000000000000000000000000000000000000000000000000081523460048201526024016108ee565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7491906125cd565b905073ffffffffffffffffffffffffffffffffffffffff8116611ec3576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61099273ffffffffffffffffffffffffffffffffffffffff8216337f000000000000000000000000000000000000000000000000000000000000000085611d5a565b5f8060205f8451602086015f885af180611f24576040513d5f823e3d81fd5b50505f513d91508115611f3b578060011415611f55565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611da0576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016108ee565b60405180606001604052805f80191681526020015f67ffffffffffffffff168152602001611fe360405180604001604052805f81526020015f81525090565b905290565b5f60e08284031215611ff8575f80fd5b50919050565b5f6020828403121561200e575f80fd5b813567ffffffffffffffff811115612024575f80fd5b610b4d84828501611fe8565b5f5b8381101561204a578181015183820152602001612032565b50505f910152565b5f8151808452612069816020860160208601612030565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612132578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261211f87890182612052565b97505093820193908201906001016120d5565b50508751606088015250505060208501516080850152509050610b4d565b5f60608284031215611ff8575f80fd5b5f8083601f840112612170575f80fd5b50813567ffffffffffffffff811115612187575f80fd5b60208301915083602082850101111561219e575f80fd5b9250929050565b73ffffffffffffffffffffffffffffffffffffffff811681146110ea575f80fd5b5f805f805f805f60e0888a0312156121dc575f80fd5b6121e68989612150565b965060608801359550608088013567ffffffffffffffff80821115612209575f80fd5b6122158b838c01612160565b909750955060a08a0135915061222a826121a5565b90935060c0890135908082111561223f575f80fd5b5061224c8a828b01612160565b989b979a50959850939692959293505050565b803563ffffffff81168114612272575f80fd5b919050565b5f8060408385031215612288575f80fd5b6122918361225f565b946020939093013593505050565b80151581146110ea575f80fd5b5f80604083850312156122bd575f80fd5b823567ffffffffffffffff8111156122d3575f80fd5b6122df85828601611fe8565b92505060208301356122f08161229f565b809150509250929050565b8151815260208083015190820152604081016109f6565b803561ffff81168114612272575f80fd5b5f8060408385031215612334575f80fd5b61233d8361225f565b915061234b60208401612312565b90509250929050565b602081525f61193b6020830184612052565b5f60208284031215612376575f80fd5b813561193b816121a5565b5f805f8060a08587031215612394575f80fd5b61239e8686612150565b9350606085013567ffffffffffffffff8111156123b9575f80fd5b6123c587828801612160565b90945092505060808501356123d9816121a5565b939692955090935050565b5f8083601f8401126123f4575f80fd5b50813567ffffffffffffffff81111561240b575f80fd5b6020830191508360208260051b850101111561219e575f80fd5b5f8060208385031215612436575f80fd5b823567ffffffffffffffff81111561244c575f80fd5b612458858286016123e4565b90969095509350505050565b5f60208284031215612474575f80fd5b61193b8261225f565b5f805f8060608587031215612490575f80fd5b6124998561225f565b93506124a760208601612312565b9250604085013567ffffffffffffffff8111156124c2575f80fd5b6124ce87828801612160565b95989497509550505050565b5f805f83850360808112156124ed575f80fd5b843567ffffffffffffffff811115612503575f80fd5b61250f87828801611fe8565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612541575f80fd5b506020840191506060840135612556816121a5565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff6020850151166020830152604084015161259c604084018280518252602090810151910152565b5082516080830152602083015160a083015261193b565b5f606082840312156125c3575f80fd5b61193b8383612150565b5f602082840312156125dd575f80fd5b815161193b816121a5565b5f602082840312156125f8575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b600181811c9082168061264057607f821691505b602082108103611ff8577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b6040516060810167ffffffffffffffff8111828210171561269a5761269a6125ff565b60405290565b6040805190810167ffffffffffffffff8111828210171561269a5761269a6125ff565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561270a5761270a6125ff565b604052919050565b5f67ffffffffffffffff82111561272b5761272b6125ff565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612771576127716125ff565b8360051b60206127828183016126c3565b868152918501918181019036841115612799575f80fd5b865b84811015612854578035868111156127b1575f80fd5b880160603682900312156127c3575f80fd5b6127cb612677565b6127d48261225f565b81526127e1868301612312565b86820152604080830135898111156127f7575f80fd5b929092019136601f84011261280a575f80fd5b823561281d61281882612712565b6126c3565b8181523689838701011115612830575f80fd5b818986018a8301375f9181018901919091529082015284525091830191830161279b565b50979650505050505050565b5f808585111561286e575f80fd5b8386111561287a575f80fd5b5050820193919092039150565b5f8451612898818460208901612030565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610b4d6020830184866128ad565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112612966575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129a3575f80fd5b83018035915067ffffffffffffffff8211156129bd575f80fd5b60200191503681900382131561219e575f80fd5b67ffffffffffffffff811681146110ea575f80fd5b63ffffffff6129f48961225f565b168152602088013560208201525f6040890135612a10816129d1565b67ffffffffffffffff811660408401525087606083015260e06080830152612a3c60e0830187896128ad565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c0840152612a6b8185876128ad565b9a9950505050505050505050565b5f60208284031215612a89575f80fd5b815167ffffffffffffffff811115612a9f575f80fd5b8201601f81018413612aaf575f80fd5b8051612abd61281882612712565b818152856020838501011115612ad1575f80fd5b611633826020830160208601612030565b5f60208284031215612af2575f80fd5b813561193b816129d1565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f612b3b6080830184612052565b9695505050505050565b604081525f612b576040830185612052565b82810360208401526116338185612052565b5f60208284031215612b79575f80fd5b815161193b8161229f565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a06080840152612bb960e0840182612052565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a0850152612bf48282612052565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215612c37575f80fd5b612c3f6126a0565b9050815181526020820151602082015292915050565b5f60408284031215612c65575f80fd5b61193b8383612c27565b601f821115611d5557805f5260205f20601f840160051c81016020851015612c945750805b601f840160051c820191505b81811015610fc0575f8155600101612ca0565b815167ffffffffffffffff811115612ccd57612ccd6125ff565b612ce181612cdb845461262c565b84612c6f565b602080601f831160018114612d33575f8415612cfd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612dc7565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612d7f57888601518255948401946001909101908401612d60565b5085821015612dbb57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015612e68578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612e5481860183612052565b968901969450505090860190600101612df6565b509098975050505050505050565b5f60408284031215612e86575f80fd5b612e8e6126a0565b82358152602083013560208201528091505092915050565b5f82612ed9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109f6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b803560208310156109f6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015612f965780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161300b81602c850160208701612030565b91909101602c0195945050505050565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f8251613063816048850160208701612030565b9190910160480195945050505050565b5f60808284031215613083575f80fd5b61308b612677565b82518152602083015161309d816129d1565b60208201526130af8460408501612c27565b6040820152939250505056fea26469706673582212201d2eeb249efab86d32800173e736d788fc450154b978b7660829bc5ead288d1364736f6c6343000816003361016060405234801562000011575f80fd5b50604051620024be380380620024be833981016040819052620000349162000608565b60015f556001600160a01b03808416608052821660a081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa15801562000087573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000659565b6001600160a01b0390811660c052811660e081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa158015620000fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000122919062000659565b6001600160a01b0316610100816001600160a01b03168152505060a0516001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a1919062000659565b6001600160a01b03166101208190526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620001ea573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200021091906200067e565b63ffffffff1661014052608051610100516001600160a01b039081169116146200026c576101005160805160405163070bc55b60e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b6080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d1919062000659565b6001600160a01b031660c0516001600160a01b031614620003815760c0516080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000354919062000659565b60405163ba9d665f60e01b81526001600160a01b0392831660048201529116602482015260440162000263565b60e0516001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e69190620006a3565b620004145760e051604051637e0a8a5760e11b81526001600160a01b03909116600482015260240162000263565b60c05160405163095ea7b360e01b81526001600160a01b0385811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af115801562000465573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200048b9190620006a3565b506101005160405163095ea7b360e01b81526001600160a01b0383811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620004de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005049190620006a3565b50816001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000542573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005689190620006a3565b15620005e75760c05160405163095ea7b360e01b81526001600160a01b0384811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620005bf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005e59190620006a3565b505b505050620006c4565b6001600160a01b038116811462000605575f80fd5b50565b5f805f606084860312156200061b575f80fd5b83516200062881620005f0565b60208501519093506200063b81620005f0565b60408501519092506200064e81620005f0565b809150509250925092565b5f602082840312156200066a575f80fd5b81516200067781620005f0565b9392505050565b5f602082840312156200068f575f80fd5b815163ffffffff8116811462000677575f80fd5b5f60208284031215620006b4575f80fd5b8151801515811462000677575f80fd5b60805160a05160c05160e051610100516101205161014051611d246200079a5f395f81816102a5015261111301525f8181610200015261096b01525f818161027201528181610375015261119101525f818161018701528181610a1d0152610d4d01525f81816101540152818161031101526111b701525f818160e2015281816103be015281816108dd015281816109c601528181610da7015261113e01525f81816101ba015281816104560152818161055701528181610627015281816107230152818161104201526113290152611d245ff3fe6080604052600436106100c6575f3560e01c80636fad06f511610071578063a99ecc541161004c578063a99ecc5414610261578063aa72fe3f14610294578063d0a10260146102dc575f80fd5b80636fad06f5146101ef5780637e6e1e10146102225780639a6b198c1461024e575f80fd5b8063369caf83116100a1578063369caf8314610176578063411557d1146101a957806353174fa4146101dc575f80fd5b80630bfec755146100d157806319197ec61461012e5780631df34fa314610143575f80fd5b366100cd57005b5f80fd5b3480156100dc575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c36600461160e565b6102ef565b005b34801561014e575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b348015610181575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b4575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b6101416101ea36600461160e565b610353565b3480156101fa575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561022d575f80fd5b5061024161023c366004611661565b6103a9565b60405161012591906116c5565b61014161025c3660046116dc565b610843565b34801561026c575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561029f575f80fd5b506102c77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610125565b6101416102ea36600461177c565b610953565b6102f7610c50565b61033973ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d20565b61034e60015f55565b505050565b61035b610c50565b61039d73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d7a565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036105e0576040517fd905777e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063d905777e90602401602060405180830381865afa15801561049d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c19190611813565b905080841115610528576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716600482015260248101859052604481018290526064015b60405180910390fd5b6040517f4cdad506000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634cdad50690602401602060405180830381865afa1580156105b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d59190611813565b6040840152506107a8565b6040517f402d267d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063402d267d90602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611813565b9050808411156106f4576040517f79012fb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602481018590526044810182905260640161051f565b6040517fef8b30f7000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef8b30f790602401602060405180830381865afa15801561077d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a19190611813565b6040840152505b6040517f3b6f743b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690633b6f743b906107fc9085905f9060040161190a565b6040805180830381865afa158015610816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a919061197a565b95945050505050565b33301461087e576040517fa19dbf0000000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b5f808380602001905181019061089491906119e9565b91509150803410156108db576040517f7cb769dc0000000000000000000000000000000000000000000000000000000081526004810182905234602482015260440161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361093f5761093a85848432610d20565b61094b565b61094b85848432610d7a565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146109c4576040517f91ac5e4f00000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015610a6c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15610abb576040517f84fb3f0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816600482015260240161051f565b5f610ac68686610dcd565b90505f610ad38787610dee565b90505f610ae08888610dfd565b6040517f9a6b198c0000000000000000000000000000000000000000000000000000000081529091503090639a6b198c903490610b27908e90889087908990600401611ad0565b5f604051808303818588803b158015610b3e575f80fd5b505af193505050508015610b50575060015b610c19573d808015610b7d576040519150601f19603f3d011682016040523d82523d5f602084013e610b82565b606091505b507f7cb769dc00000000000000000000000000000000000000000000000000000000610bad82611b15565b7fffffffff000000000000000000000000000000000000000000000000000000001603610bdc57805181602001fd5b610be98b8a8a8632610e47565b6040518a907ffe509803c09416b28ff3d8f690c8b0c61462a892c46d5430c8fb20abe472daf0905f90a250610c44565b60405189907f27b5aea9f5736c02241d8a0272e9ec988ea44cf85c4b4760329431aa19678394905f90a25b50505050505050505050565b60025f5403610c8b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052610d1a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610f6c565b50505050565b5f610d2b858561100b565b9050610d3b8184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5050505050565b5f610d8585856112eb565b9050610d958184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5f610ddc604c602c8486611b64565b610de591611b8b565b90505b92915050565b5f610ddc602c600c8486611b64565b6060610e0c82604c8186611b64565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b610e8c6040518060e001604052805f63ffffffff1681526020015f80191681526020015f81526020015f81526020016060815260200160608152602001606081525090565b610e96858561136d565b63ffffffff168152610ea88585610dcd565b602080830191909152604080830185905280518082018252348082525f9382019390935290517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89169263c7c7f5b3929091610f219186918890600401611bc7565b60c06040518083038185885af1158015610f3d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f629190611c16565b5050505050505050565b5f8060205f8451602086015f885af180610f8b576040513d5f823e3d81fd5b50505f513d91508115610fa2578060011415610fbc565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610d1a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161051f565b6040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018290523060248201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636e553f65906044015b6020604051808303815f875af115801561109e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de59190611813565b80821015611106576040517f71c4efed000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161051f565b5050565b815163ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116911603611242575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146111b5577f00000000000000000000000000000000000000000000000000000000000000006111d7565b7f00000000000000000000000000000000000000000000000000000000000000005b90503415611211576040517f7578d2bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1a61121f846020015190565b604085015173ffffffffffffffffffffffffffffffffffffffff8416919061138f565b604080518082018252348082525f602083015291517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169263c7c7f5b39290916112aa9187918790600401611bc7565b60c06040518083038185885af11580156112c6573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d739190611c16565b6040517fba08765200000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ba08765290606401611082565b5f61137c600c60088486611b64565b61138591611ca6565b60e01c9392505050565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261034e91859182169063a9059cbb90606401610cd3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff8111828210171561141d5761141d6113cd565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561146a5761146a6113cd565b604052919050565b63ffffffff81168114611483575f80fd5b50565b803561149181611472565b919050565b5f67ffffffffffffffff8211156114af576114af6113cd565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126114ea575f80fd5b81356114fd6114f882611496565b611423565b818152846020838601011115611511575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0828403121561153d575f80fd5b6115456113fa565b905061155082611486565b8152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff8082111561158a575f80fd5b611596858386016114db565b608084015260a08401359150808211156115ae575f80fd5b6115ba858386016114db565b60a084015260c08401359150808211156115d2575f80fd5b506115df848285016114db565b60c08301525092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611491575f80fd5b5f805f60608486031215611620575f80fd5b83359250602084013567ffffffffffffffff81111561163d575f80fd5b6116498682870161152d565b925050611658604085016115eb565b90509250925092565b5f805f8060808587031215611674575f80fd5b61167d856115eb565b935061168b602086016115eb565b925060408501359150606085013567ffffffffffffffff8111156116ad575f80fd5b6116b98782880161152d565b91505092959194509250565b815181526020808301519082015260408101610de8565b5f805f80608085870312156116ef575f80fd5b6116f8856115eb565b935060208501359250604085013567ffffffffffffffff81111561171a575f80fd5b611726878288016114db565b949793965093946060013593505050565b5f8083601f840112611747575f80fd5b50813567ffffffffffffffff81111561175e575f80fd5b602083019150836020828501011115611775575f80fd5b9250929050565b5f805f805f805f60a0888a031215611792575f80fd5b61179b886115eb565b965060208801359550604088013567ffffffffffffffff808211156117be575f80fd5b6117ca8b838c01611737565b90975095508591506117de60608b016115eb565b945060808a01359150808211156117f3575f80fd5b506118008a828b01611737565b989b979a50959850939692959293505050565b5f60208284031215611823575f80fd5b5051919050565b5f5b8381101561184457818101518382015260200161182c565b50505f910152565b5f815180845261186381602086016020860161182a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526118d760e085018261184c565b905060a083015184820360a08601526118f0828261184c565b91505060c083015184820360c086015261083a828261184c565b604081525f61191c6040830185611895565b905082151560208301529392505050565b5f6040828403121561193d575f80fd5b6040516040810181811067ffffffffffffffff82111715611960576119606113cd565b604052825181526020928301519281019290925250919050565b5f6040828403121561198a575f80fd5b610de5838361192d565b805161149181611472565b5f82601f8301126119ae575f80fd5b81516119bc6114f882611496565b8181528460208386010111156119d0575f80fd5b6119e182602083016020870161182a565b949350505050565b5f80604083850312156119fa575f80fd5b825167ffffffffffffffff80821115611a11575f80fd5b9084019060e08287031215611a24575f80fd5b611a2c6113fa565b611a3583611994565b8152602083015160208201526040830151604082015260608301516060820152608083015182811115611a66575f80fd5b611a728882860161199f565b60808301525060a083015182811115611a89575f80fd5b611a958882860161199f565b60a08301525060c083015182811115611aac575f80fd5b611ab88882860161199f565b60c08301525060209590950151949694955050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f611b04608083018561184c565b905082606083015295945050505050565b5f815160208301517fffffffff0000000000000000000000000000000000000000000000000000000080821693506004831015611b5c5780818460040360031b1b83161693505b505050919050565b5f8085851115611b72575f80fd5b83861115611b7e575f80fd5b5050820193919092039150565b80356020831015610de8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b608081525f611bd96080830186611895565b9050611bf2602083018580518252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff83166060830152949350505050565b5f8082840360c0811215611c28575f80fd5b6080811215611c35575f80fd5b506040516060810167ffffffffffffffff8282108183111715611c5a57611c5a6113cd565b8160405285518352602086015191508082168214611c76575f80fd5b506020820152611c89856040860161192d565b60408201529150611c9d846080850161192d565b90509250929050565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611ce65780818660040360031b1b83161692505b50509291505056fea26469706673582212203c210af0c85b10469f135dd49d1274fa8e04b8bee0c2069213c4acfe2a3036b564736f6c63430008160033608060405234801561000f575f80fd5b50610a8c8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e5c5e9a31461002d575b5f80fd5b61004061003b3660046106f8565b610057565b60405161004e9291906107cf565b60405180910390f35b606080610064848461006f565b915091509250929050565b60608060028310156100b4576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f6100c260028286886107fc565b6100cb91610823565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161029357805f5b86831015610220575f61011460018501858a8c6107fc565b61011d9161086b565b60f81c90505f81900361015e576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016100ab565b8160ff165f03610170578091506101ac565b8160ff168160ff16146101ac57365f61018b86868c8e6107fc565b9150915061019c89898685856102aa565b9099509750859450919250829150505b60018401935f906101c290600301868b8d6107fc565b6101cb91610823565b60f01c90505f81900361020d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016100ab565b8060020161ffff168501945050506100fc565b82871461025c576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016100ab565b600287111561028c57365f61027385858b8d6107fc565b9150915061028488888585856102aa565b909850965050505b50506102a1565b61029e82878761041d565b93505b50509250929050565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161034457865115610307578684846040516020016102f3939291906108b1565b60405160208183030381529060405261033d565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650610412565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016103db5785511561039e5785848460405160200161038a939291906108b1565b6040516020818303038152906040526103d4565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550610412565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016100ab565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff8516016105425760228214610484576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6104a46104966022600286886107fc565b61049f916108d7565b61069f565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050610698565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff8516016106605760428211158061057d5750606282115b156105b4576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c66104966022600286886107fc565b90505f6105da6104966042602287896107fc565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe850161060d866042818a6107fc565b610616916108d7565b60405160086020938403029190911c9250610647916001916011918391889183916031916002918b918b9101610914565b6040516020818303038152906040529350505050610698565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016100ab565b9392505050565b5f6fffffffffffffffffffffffffffffffff8211156106f4576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016100ab565b5090565b5f8060208385031215610709575f80fd5b823567ffffffffffffffff80821115610720575f80fd5b818501915085601f830112610733575f80fd5b813581811115610741575f80fd5b866020828501011115610752575f80fd5b60209290920196919550909350505050565b5f5b8381101561077e578181015183820152602001610766565b50505f910152565b5f815180845261079d816020860160208601610764565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f6107e16040830185610786565b82810360208401526107f38185610786565b95945050505050565b5f808585111561080a575f80fd5b83861115610816575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156108635780818660020360031b1b83161692505b505092915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156108635760019490940360031b84901b1690921692915050565b5f84516108c2818460208901610764565b8201838582375f930192835250909392505050565b8035602083101561090e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b165b92915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008b60f01b166001840152808a60f81b1660038401527fffffffffffffffffffffffffffffffff000000000000000000000000000000008960801b166004840152808860f81b166014840152506109dc601583018760f01b7fffff000000000000000000000000000000000000000000000000000000000000169052565b610a0d601783018660f81b7fff00000000000000000000000000000000000000000000000000000000000000169052565b610a3e601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea26469706673582212204c5336eb5e4cfed89d8f0ececad030c194802d04a3053cab299816b06066820764736f6c63430008160033a2646970667358221220ad1fffc8ff9686bca271dfbe28a94124292e3223f33b1d97a505fe3c4076c2ee64736f6c63430008160033608060405234801561000f575f80fd5b50610a8c8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e5c5e9a31461002d575b5f80fd5b61004061003b3660046106f8565b610057565b60405161004e9291906107cf565b60405180910390f35b606080610064848461006f565b915091509250929050565b60608060028310156100b4576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f6100c260028286886107fc565b6100cb91610823565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161029357805f5b86831015610220575f61011460018501858a8c6107fc565b61011d9161086b565b60f81c90505f81900361015e576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016100ab565b8160ff165f03610170578091506101ac565b8160ff168160ff16146101ac57365f61018b86868c8e6107fc565b9150915061019c89898685856102aa565b9099509750859450919250829150505b60018401935f906101c290600301868b8d6107fc565b6101cb91610823565b60f01c90505f81900361020d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016100ab565b8060020161ffff168501945050506100fc565b82871461025c576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016100ab565b600287111561028c57365f61027385858b8d6107fc565b9150915061028488888585856102aa565b909850965050505b50506102a1565b61029e82878761041d565b93505b50509250929050565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161034457865115610307578684846040516020016102f3939291906108b1565b60405160208183030381529060405261033d565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650610412565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016103db5785511561039e5785848460405160200161038a939291906108b1565b6040516020818303038152906040526103d4565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550610412565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016100ab565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff8516016105425760228214610484576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6104a46104966022600286886107fc565b61049f916108d7565b61069f565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050610698565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff8516016106605760428211158061057d5750606282115b156105b4576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c66104966022600286886107fc565b90505f6105da6104966042602287896107fc565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe850161060d866042818a6107fc565b610616916108d7565b60405160086020938403029190911c9250610647916001916011918391889183916031916002918b918b9101610914565b6040516020818303038152906040529350505050610698565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016100ab565b9392505050565b5f6fffffffffffffffffffffffffffffffff8211156106f4576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016100ab565b5090565b5f8060208385031215610709575f80fd5b823567ffffffffffffffff80821115610720575f80fd5b818501915085601f830112610733575f80fd5b813581811115610741575f80fd5b866020828501011115610752575f80fd5b60209290920196919550909350505050565b5f5b8381101561077e578181015183820152602001610766565b50505f910152565b5f815180845261079d816020860160208601610764565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f6107e16040830185610786565b82810360208401526107f38185610786565b95945050505050565b5f808585111561080a575f80fd5b83861115610816575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156108635780818660020360031b1b83161692505b505092915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156108635760019490940360031b84901b1690921692915050565b5f84516108c2818460208901610764565b8201838582375f930192835250909392505050565b8035602083101561090e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b165b92915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008b60f01b166001840152808a60f81b1660038401527fffffffffffffffffffffffffffffffff000000000000000000000000000000008960801b166004840152808860f81b166014840152506109dc601583018760f01b7fffff000000000000000000000000000000000000000000000000000000000000169052565b610a0d601783018660f81b7fff00000000000000000000000000000000000000000000000000000000000000169052565b610a3e601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea26469706673582212204c5336eb5e4cfed89d8f0ececad030c194802d04a3053cab299816b06066820764736f6c63430008160033",
+ "sourceMap": "869:5778:137:-:0;;;;;3126:44:90;;;3166:4;-1:-1:-1;;3126:44:90;;;;;;;;1065:26:101;;;;;;;;;;;738:20:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;710:48:73;;;-1:-1:-1;;;;;710:48:73;;;;;;-1:-1:-1;;;;;;710:48:73;;;;;;;;;4586:43:74;;;-1:-1:-1;;;;;;4586:43:74;4620:9;4586:43;;;987:21:135;;;-1:-1:-1;;987:21:135;1007:1;987:21;;;1493:17;;;;;;;;;;;;-1:-1:-1;;;1493:17:135;;;;;;:8;:17::i;:::-;1470:40;;;-1:-1:-1;;;;;;1470:40:135;-1:-1:-1;;;;;1470:40:135;;;;;;;;;;1539:17;;;;;;;;;;;;-1:-1:-1;;;1539:17:135;;;;;;:8;:17::i;:::-;1516:40;;;-1:-1:-1;;;;;;1516:40:135;-1:-1:-1;;;;;1516:40:135;;;;;;;;;;1624:23;;;;;;;;;;;;-1:-1:-1;;;1624:23:135;;;;;;:8;:23::i;:::-;1595:52;;;-1:-1:-1;;;;;;1595:52:135;-1:-1:-1;;;;;1595:52:135;;;;;;;;;;1691:66;1746:7;-1:-1:-1;1691:27:135;1370:24:62;;;-1:-1:-1;;;1370:24:62;;;2822:51:139;1370:24:62;;;;;;;;;2889:11:139;;;;1370:24:62;;;;1294:107;1691:27:135;:54;:66;:54;:66::i;:::-;1653:104;;;;;;:::i;:::-;;869:5778:137;;;;;;;;;;;;20760:125:91;20824:12;20858:20;20873:4;20858:14;:20::i;:::-;-1:-1:-1;20848:30:91;20760:125;-1:-1:-1;;20760:125:91:o;2092:357:62:-;2254:12;2235:8;808:1;1059:20;2235:8;1077:1;1059:17;:20::i;:::-;:30;;;1055:82;;1116:20;:8;1134:1;1116:17;:20::i;:::-;1098:39;;-1:-1:-1;;;1098:39:62;;3085:6:139;3073:19;;;1098:39:62;;;3055:38:139;3028:18;;1098:39:62;;;;;;;;1055:82;2278:19:::1;2300:51;2338:4:::0;2344:6;2300:37:::1;:51::i;:::-;2278:73:::0;-1:-1:-1;2368:74:62::1;2386:8:::0;306:1:13::1;2278:73:62::0;2368:17:::1;:74::i;:::-;2361:81:::0;2092:357;-1:-1:-1;;;;;;2092:357:62:o;20479:242:91:-;20549:12;20563:18;20641:4;20624:22;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;20624:22:91;;;;;;;20614:33;;20624:22;20614:33;;;;-1:-1:-1;;;;;;20665:19:91;;;;;3799:25:139;;;20614:33:91;-1:-1:-1;20665:7:91;;;;3772:18:139;;20665:19:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20694:20;;-1:-1:-1;;;20694:20:91;;20658:26;;-1:-1:-1;20694:8:91;;;;:20;;20658:26;;20709:4;;20694:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20479:242;;;:::o;12935:305:107:-;13013:6;13056:10;:6;13065:1;13056:10;:::i;:::-;13039:6;:13;:27;;13031:60;;;;-1:-1:-1;;;13031:60:107;;5092:2:139;13031:60:107;;;5074:21:139;5131:2;5111:18;;;5104:30;5170:22;5150:18;;;5143:50;5210:18;;13031:60:107;4890:344:139;13031:60:107;-1:-1:-1;13168:29:107;;;13184:3;13168:29;13162:36;12935:305;;;;;:::o;3460:191:13:-;3544:12;-1:-1:-1;;;;;3575:11:13;;;:69;;3614:30;;;-1:-1:-1;;;;;;5418:3:139;5455:16;;;5451:25;;3614:30:13;;;5439:38:139;5511:16;;;5507:25;5493:12;;;5486:47;5549:12;3614:30:13;;;;;;;;;;;;3575:69;;;3589:22;;-1:-1:-1;;;;;;5747:3:139;5717:16;;;5713:47;3589:22:13;;;5701:60:139;5777:12;;3589:22:13;;;;;;;;;;;;3575:69;3568:76;3460:191;-1:-1:-1;;;3460:191:13:o;6602:435:62:-;6766:12;6747:8;808:1;1059:20;6747:8;1077:1;1059:17;:20::i;:::-;:30;;;1055:82;;1116:20;:8;1134:1;1116:17;:20::i;1055:82::-;6843:8:::1;250:1:13;6912:25:62;:7;:14;:23;;;:25;;:::i;:::-;:29;::::0;6940:1:::1;6912:29;:::i;:::-;6980:11;7009:7;6809:221;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6790:240;;6602:435:::0;;;;;;:::o;16296:213:131:-;16352:6;16382:16;16374:24;;16370:103;;;16421:41;;-1:-1:-1;;;16421:41:131;;16452:2;16421:41;;;6949:36:139;7001:18;;;6994:34;;;6922:18;;16421:41:131;6768:266:139;16370:103:131;-1:-1:-1;16496:5:131;16296:213::o;869:5778:137:-;;;;;;;;:::o;14:127:139:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:380;225:1;221:12;;;;268;;;289:61;;343:4;335:6;331:17;321:27;;289:61;396:2;388:6;385:14;365:18;362:38;359:161;;442:10;437:3;433:20;430:1;423:31;477:4;474:1;467:15;505:4;502:1;495:15;359:161;;146:380;;;:::o;656:517::-;757:2;752:3;749:11;746:421;;;793:5;790:1;783:16;837:4;834:1;824:18;907:2;895:10;891:19;888:1;884:27;878:4;874:38;943:4;931:10;928:20;925:47;;;-1:-1:-1;966:4:139;925:47;1021:2;1016:3;1012:12;1009:1;1005:20;999:4;995:31;985:41;;1076:81;1094:2;1087:5;1084:13;1076:81;;;1153:1;1139:16;;1120:1;1109:13;1076:81;;;1080:3;;746:421;656:517;;;:::o;1349:1341::-;1467:10;;-1:-1:-1;;;;;1489:30:139;;1486:56;;;1522:18;;:::i;:::-;1551:96;1640:6;1600:38;1632:4;1626:11;1600:38;:::i;:::-;1594:4;1551:96;:::i;:::-;1702:4;;1759:2;1748:14;;1776:1;1771:662;;;;2477:1;2494:6;2491:89;;;-1:-1:-1;2546:19:139;;;2540:26;2491:89;-1:-1:-1;;1306:1:139;1302:11;;;1298:24;1294:29;1284:40;1330:1;1326:11;;;1281:57;2593:81;;1741:943;;1771:662;603:1;596:14;;;640:4;627:18;;-1:-1:-1;;1807:20:139;;;1924:236;1938:7;1935:1;1932:14;1924:236;;;2027:19;;;2021:26;2006:42;;2119:27;;;;2087:1;2075:14;;;;1954:19;;1924:236;;;1928:3;2188:6;2179:7;2176:19;2173:201;;;2249:19;;;2243:26;-1:-1:-1;;2332:1:139;2328:14;;;2344:3;2324:24;2320:37;2316:42;2301:58;2286:74;;2173:201;;;2420:1;2411:6;2408:1;2404:14;2400:22;2394:4;2387:36;1741:943;;;;;1349:1341;;:::o;3104:250::-;3189:1;3199:113;3213:6;3210:1;3207:13;3199:113;;;3289:11;;;3283:18;3270:11;;;3263:39;3235:2;3228:10;3199:113;;;-1:-1:-1;;3346:1:139;3328:16;;3321:27;3104:250::o;3359:289::-;3490:3;3528:6;3522:13;3544:66;3603:6;3598:3;3591:4;3583:6;3579:17;3544:66;:::i;:::-;3626:16;;;;;3359:289;-1:-1:-1;;3359:289:139:o;3835:290::-;3905:6;3958:2;3946:9;3937:7;3933:23;3929:32;3926:52;;;3974:1;3971;3964:12;3926:52;4000:16;;-1:-1:-1;;;;;4045:31:139;;4035:42;;4025:70;;4091:1;4088;4081:12;4130:493;4336:1;4332;4327:3;4323:11;4319:19;4311:6;4307:32;4296:9;4289:51;4376:2;4371;4360:9;4356:18;4349:30;4270:4;4408:6;4402:13;4451:6;4446:2;4435:9;4431:18;4424:34;4467:79;4539:6;4534:2;4523:9;4519:18;4514:2;4506:6;4502:15;4467:79;:::i;:::-;4607:2;4586:15;-1:-1:-1;;4582:29:139;4567:45;;;;4614:2;4563:54;;4130:493;-1:-1:-1;;;4130:493:139:o;4628:127::-;4689:10;4684:3;4680:20;4677:1;4670:31;4720:4;4717:1;4710:15;4744:4;4741:1;4734:15;4760:125;4825:9;;;4846:10;;;4843:36;;;4859:18;;:::i;5800:168::-;5867:6;5893:10;;;5905;;;5889:27;;5928:11;;;5925:37;;;5942:18;;:::i;5973:790::-;6222:3;6260:6;6254:13;6276:66;6335:6;6330:3;6323:4;6315:6;6311:17;6276:66;:::i;:::-;6399:13;6403:3;6439:16;;;6435:25;;6364:16;;;6421:40;;;-1:-1:-1;;;;;;6518:3:139;6496:16;;;6492:38;6488:1;6477:13;;6470:61;6566:16;;;6562:25;6558:1;6547:13;;6540:48;6613:13;;6635:78;6613:13;6700:1;6689:13;;6682:4;6670:17;;6635:78;:::i;:::-;6733:20;6755:1;6729:28;;5973:790;-1:-1:-1;;;;;;;5973:790:139:o;6768:266::-;869:5778:137;;;;;;",
+ "linkReferences": {}
+ },
+ "deployedBytecode": {
+ "object": "0x6080604052600436106200051e575f3560e01c8063699cbade116200029e578063ae6ce4001162000172578063cb1a295f11620000e2578063ec53eaa01162000092578063f93e1d611162000076578063f93e1d611462000ede578063fa7626d41462000f2c578063faed6c581462000f47575f80fd5b8063ec53eaa01462000eae578063f5e4efb51462000ec5575f80fd5b8063deb22e9a11620000c6578063deb22e9a1462000e15578063defd9da61462000e36578063e20c9f711462000e97575f80fd5b8063cb1a295f1462000dd0578063d6d624971462000df1575f80fd5b8063b752b72a116200013e578063b954fdf61162000122578063b954fdf61462000d52578063ba414fa61462000d9f578063baead19c1462000db6575f80fd5b8063b752b72a1462000d18578063b76bada51462000d3c575f80fd5b8063ae6ce4001462000cc6578063b0464fdc1462000cea578063b1dcf5c81462000905578063b5508aa91462000d01575f80fd5b806385226c81116200020e5780639751ca8611620001da5780639c24cb3011620001be5780639c24cb301462000c815780639ea6d64e1462000c98578063a29c89841462000caf575f80fd5b80639751ca861462000c00578063997cff1b1462000c5d575f80fd5b806385226c811462000b765780638c5e9f741462000b9c57806390a606f51462000bb9578063916a17c61462000bda575f80fd5b80637982cf42116200026a5780637f2e5936116200024e5780637f2e59361462000b3157806382411c77146200067d578063834bd1591462000b52575f80fd5b80637982cf421462000aec5780637a8b5d981462000b10575f80fd5b8063699cbade1462000a5d5780636e1775e31462000a7b578063703ca2541462000ab15780637388e2721462000ad5575f80fd5b8063375591d711620003f25780635d0e96e2116200036257806362c54cbe116200031257806366d9a9a011620002f657806366d9a9a014620009f5578063677d41751462000a1b57806367d53a001462000a3c575f80fd5b806362c54cbe14620009ba57806365449eb014620009d1575f80fd5b80635ea0fefe11620003465780635ea0fefe146200094a57806360197889146200097f57806360416f0c14620009a3575f80fd5b80635d0e96e2146200091d5780635e42c9b21462000934575f80fd5b80633f7286f411620003be57806351aa318b11620003a257806351aa318b14620008cc578063536e8d3a14620008e4578063556257df1462000905575f80fd5b80633f7286f4146200085d578063518e8ab01462000874575f80fd5b8063375591d714620007ed5780633bbd6a94146200080e5780633cae7b8a14620008255780633e5e3c231462000846575f80fd5b80631766f5a4116200048e5780631f3280c5116200045a57806325996dae116200043e57806325996dae146200078d5780632a35d25014620007a35780632ade388014620007c7575f80fd5b80631f3280c5146200072b5780632113ce621462000741575f80fd5b80631766f5a4146200067d578063178928d314620006bb5780631cc4652514620006e15780631ed7831c1462000705575f80fd5b80630a9254e411620004ea5780630c003ff711620004ce5780630c003ff714620005fe5780630fcaecfe146200062457806314525bce1462000650575f80fd5b80630a9254e414620005bc5780630afba86814620005d3575f80fd5b8063034d9421146200052a578063090852b6146200054357806309c885c914620005675780630a69faa914620005a5575f80fd5b366200052657005b5f80fd5b34801562000536575f80fd5b506200054162000f6b565b005b3480156200054f575f80fd5b5062000541620005613660046200ab70565b620016b7565b34801562000573575f80fd5b50603d5462000588906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b62000541620005b63660046200acfc565b620016df565b348015620005c8575f80fd5b506200054162001836565b348015620005df575f80fd5b50620005ea61271081565b60405161ffff90911681526020016200059c565b3480156200060a575f80fd5b50603354620005889061010090046001600160a01b031681565b34801562000630575f80fd5b506200063a606581565b60405163ffffffff90911681526020016200059c565b3480156200065c575f80fd5b506200066e68056bc75e2d6310000081565b6040519081526020016200059c565b34801562000689575f80fd5b506200069a670de0b6b3a764000081565b6040516effffffffffffffffffffffffffffff90911681526020016200059c565b348015620006c7575f80fd5b50620006d2620018d8565b6040516200059c91906200addf565b348015620006ed575f80fd5b5062000541620006ff3660046200ae16565b6200196c565b34801562000711575f80fd5b506200071c620019c2565b6040516200059c91906200ae8a565b34801562000737575f80fd5b506200063a600381565b3480156200074d575f80fd5b506024546200076b906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020016200059c565b34801562000799575f80fd5b506200063a600181565b348015620007af575f80fd5b506200071c620007c13660046200ae9e565b62001a24565b348015620007d3575f80fd5b50620007de62001b3d565b6040516200059c91906200af62565b348015620007f9575f80fd5b5060345462000588906001600160a01b031681565b620005416200081f3660046200b001565b62001c85565b34801562000831575f80fd5b5060385462000588906001600160a01b031681565b34801562000852575f80fd5b506200071c62001d40565b34801562000869575f80fd5b506200071c62001da0565b34801562000880575f80fd5b5062000898620008923660046200b0b5565b62001e00565b6040805161ffff90941684526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016200059c565b348015620008d8575f80fd5b506200063a6201117181565b348015620008f0575f80fd5b5060355462000588906001600160a01b031681565b34801562000911575f80fd5b506200066e620186a081565b34801562000929575f80fd5b506200054162001e1c565b34801562000940575f80fd5b506200063a600281565b34801562000956575f80fd5b506200096e620009683660046200b108565b6200240e565b60405190151581526020016200059c565b3480156200098b575f80fd5b50620005416200099d3660046200b135565b6200246e565b348015620009af575f80fd5b50620005416200321d565b348015620009c6575f80fd5b506200054162003611565b348015620009dd575f80fd5b5062000541620009ef3660046200b23f565b62003c03565b34801562000a01575f80fd5b5062000a0c62003cf9565b6040516200059c91906200b35e565b34801562000a27575f80fd5b50603e5462000588906001600160a01b031681565b34801562000a48575f80fd5b5060375462000588906001600160a01b031681565b34801562000a69575f80fd5b506200076b68056bc75e2d6310000081565b34801562000a87575f80fd5b5062000a9f62000a993660046200b3f9565b62003e7e565b6040516200059c94939291906200b46e565b34801562000abd575f80fd5b506200054162000acf3660046200b49d565b62003ea0565b34801562000ae1575f80fd5b506200054162004071565b34801562000af8575f80fd5b50620006d262000b0a3660046200b108565b620044a6565b34801562000b1c575f80fd5b5060395462000588906001600160a01b031681565b34801562000b3d575f80fd5b5060365462000588906001600160a01b031681565b34801562000b5e575f80fd5b506200054162000b703660046200b4db565b620045bb565b34801562000b82575f80fd5b5062000b8d62004bcc565b6040516200059c91906200b554565b34801562000ba8575f80fd5b506200066e670de0b6b3a764000081565b34801562000bc5575f80fd5b50603a5462000588906001600160a01b031681565b34801562000be6575f80fd5b5062000bf162004ca1565b6040516200059c91906200b568565b34801562000c0c575f80fd5b5062000c2462000c1e3660046200b0b5565b62004d9b565b604080516fffffffffffffffffffffffffffffffff948516815263ffffffff90931660208401529216918101919091526060016200059c565b34801562000c69575f80fd5b506200054162000c7b3660046200b3f9565b62004daa565b34801562000c8d575f80fd5b506200054162004e24565b34801562000ca4575f80fd5b5062000541620051d6565b6200054162000cc03660046200b5f9565b620055ff565b34801562000cd2575f80fd5b506200054162000ce43660046200b684565b62005686565b34801562000cf6575f80fd5b5062000bf16200573b565b34801562000d0d575f80fd5b5062000b8d62005835565b34801562000d24575f80fd5b506200054162000d363660046200b6a2565b6200590a565b34801562000d48575f80fd5b506200066e600381565b34801562000d5e575f80fd5b5062000d7662000d703660046200b0b5565b62005927565b604080516fffffffffffffffffffffffffffffffff90931683526020830191909152016200059c565b34801562000dab575f80fd5b506200096e62005941565b34801562000dc2575f80fd5b506200066e64e8d4a5100081565b34801562000ddc575f80fd5b50603c5462000588906001600160a01b031681565b34801562000dfd575f80fd5b506200054162000e0f3660046200b6c1565b62005a15565b34801562000e21575f80fd5b50603b5462000588906001600160a01b031681565b34801562000e42575f80fd5b506200054162000e543660046200b739565b602480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b34801562000ea3575f80fd5b506200071c62007ca4565b6200054162000ebf3660046200b135565b62007d04565b34801562000ed1575f80fd5b506200066e630ee6b28081565b34801562000eea575f80fd5b5062000f0262000efc3660046200b0b5565b62007e37565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016200059c565b34801562000f38575f80fd5b50601f546200096e9060ff1681565b34801562000f53575f80fd5b506200054162000f653660046200b757565b62007e45565b6040805160e0810190915260018152603b545f919060208201906001600160a01b03168152670de0b6b3a764000060208083018290525f60408085018290528051808401825282815260608601528051808401825282815260808601528051928301815290825260a09093015260335460395492517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039384166004820152602481019290925292935061010090920416906340c10f19906044015f604051808303815f87803b15801562001047575f80fd5b505af11580156200105a573d5f803e3d5ffd5b5050603954603b546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a76400006024820152911692506340c10f1991506044015f604051808303815f87803b158015620010cc575f80fd5b505af1158015620010df573d5f803e3d5ffd5b5050603a54603b546033546040517f7e6e1e100000000000000000000000000000000000000000000000000000000081525f95506001600160a01b039384169450637e6e1e10936200114a9381169261010090041690670de0b6b3a76400009088906004016200b840565b6040805180830381865afa15801562001165573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200118b91906200b87d565b603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b158015620011fe575f80fd5b505af115801562001211573d5f803e3d5ffd5b5050603954603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a764000060248201529116925063095ea7b391506044016020604051808303815f875af115801562001288573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620012ae91906200b8de565b50603a548151603b546040517f53174fa40000000000000000000000000000000000000000000000000000000081526001600160a01b03938416936353174fa493926200130c92670de0b6b3a764000092899216906004016200b8fa565b5f604051808303818588803b15801562001324575f80fd5b505af115801562001337573d5f803e3d5ffd5b5050505050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562001389575f80fd5b505af11580156200139c573d5f803e3d5ffd5b505050506200145860395f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620013f5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200141b91906200b92d565b5f6040518060400160405280601d81526020017f72656465656d206275726e732074686520736861726520746f6b656e7300000081525062007ed0565b603354603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620014f5926101009004909116906370a08231906024015b602060405180830381865afa158015620014c8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620014ee91906200b92d565b5f62007f59565b603554603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526200154a9291909116906370a0823190602401620014ac565b60355462001564906001906001600160a01b0316620016b7565b603554603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620016059291909116906370a08231906024015b602060405180830381865afa158015620015d0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620015f691906200b92d565b670de0b6b3a764000062007f59565b603354603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526200165e926101009004909116906370a0823190602401620014ac565b603954603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620016b39291909116906370a0823190602401620014ac565b5050565b620016b382826001600160a01b03165f1b5f8060405180602001604052805f815250620045bb565b5f60235f620016ef878762007fde565b63ffffffff16815260208101919091526040015f908120546001600160a01b03169150806200171e8562008004565b92505091505f60405180606001604052806200173b8a8a62008138565b63ffffffff168152602001620017528a8a62008149565b8152602001620017638a8a62008165565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e6fffffffffffffffffffffffffffffffff85811690851684620017a48d8d6200818b565b620017b08e8e6200819f565b604080516020810182525f815290517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b168152620017fb949392918e916004016200b945565b5f604051808303818589803b15801562001813575f80fd5b5088f115801562001826573d5f803e3d5ffd5b5050505050505050505050505050565b62001840620081b0565b603b546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015268056bc75e2d631000006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015f604051808303815f87803b158015620018bf575f80fd5b505af1158015620018d2573d5f803e3d5ffd5b50505050565b603f8054620018e7906200b9b9565b80601f016020809104026020016040519081016040528092919081815260200182805462001915906200b9b9565b8015620019645780601f106200193a5761010080835404028352916020019162001964565b820191905f5260205f20905b8154815290600101906020018083116200194657829003601f168201915b505050505081565b620016b382828460ff1667ffffffffffffffff8111156200199157620019916200abed565b604051908082528060200260200182016040528015620019bb578160200160208202803683370190505b5062005a15565b6060601680548060200260200160405190810160405280929190818152602001828054801562001a1a57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311620019fb575b5050505050905090565b60608160ff1667ffffffffffffffff81111562001a455762001a456200abed565b60405190808252806020026020018201604052801562001a6f578160200160208202803683370190505b509050825b62001a8083856200ba39565b60ff168160ff16101562001b2a5760ff81165f9081526023602090815260408083205481516001600160a01b039091169281019290925230908201526001606082015262001ae290879060800160405160208183030381529060405262009559565b9050808362001af287856200ba55565b60ff168151811062001b085762001b086200ba71565b6001600160a01b03909216602092830291909101909101525060010162001a74565b5062001b368162003ea0565b9392505050565b6060601e805480602002602001604051908101604052809291908181526020015f905b8282101562001c7c575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101562001c64578382905f5260205f2001805462001bd2906200b9b9565b80601f016020809104026020016040519081016040528092919081815260200182805462001c00906200b9b9565b801562001c4f5780601f1062001c255761010080835404028352916020019162001c4f565b820191905f5260205f20905b81548152906001019060200180831162001c3157829003601f168201915b50505050508152602001906001019062001bb2565b50505050815250508152602001906001019062001b60565b50505050905090565b63ffffffff87165f908152602360205260408120546001600160a01b031690808062001cb189620095b5565b925092509250836001600160a01b03166391d20fa18284908d8b8d898d8d60405180602001604052805f8152506040518a63ffffffff1660e01b815260040162001d0297969594939291906200ba9e565b5f604051808303818589803b15801562001d1a575f80fd5b5088f115801562001d2d573d5f803e3d5ffd5b5050505050505050505050505050505050565b6060601880548060200260200160405190810160405280929190818152602001828054801562001a1a57602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311620019fb575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801562001a1a57602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311620019fb575050505050905090565b5f805f62001e0f8585620096fd565b9250925092509250925092565b6040805160e0810190915260028152603b545f919060208201906001600160a01b03168152670de0b6b3a764000060208083018290525f60408085018290528051808401825282815260608601528051808401825282815260808601528051928301815290825260a090930152603354603b5492517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039384166004820152602481019290925292935061010090920416906340c10f19906044015f604051808303815f87803b15801562001ef8575f80fd5b505af115801562001f0b573d5f803e3d5ffd5b5050603954603b546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a76400006024820152911692506340c10f1991506044015f604051808303815f87803b15801562001f7d575f80fd5b505af115801562001f90573d5f803e3d5ffd5b5050603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d5691506024015f604051808303815f87803b15801562002004575f80fd5b505af115801562002017573d5f803e3d5ffd5b5050603354603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015261010090920416925063095ea7b391506044016020604051808303815f875af115801562002093573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620020b991906200b8de565b50603954603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015291169063095ea7b3906044016020604051808303815f875af11580156200212d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200215391906200b8de565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f7578d2bd000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015f604051808303815f87803b158015620021d7575f80fd5b505af1158015620021ea573d5f803e3d5ffd5b5050603a54603b546040517f19197ec60000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506319197ec693506001926200224d92670de0b6b3a7640000928892909116906004016200b8fa565b5f604051808303818588803b15801562002265575f80fd5b505af115801562002278573d5f803e3d5ffd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f7578d2bd000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063c31eb0e0925060240190505f604051808303815f87803b15801562002301575f80fd5b505af115801562002314573d5f803e3d5ffd5b5050603a54603b546040517f53174fa40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506353174fa493506002926200237792670de0b6b3a7640000928892909116906004016200b8fa565b5f604051808303818588803b1580156200238f575f80fd5b505af1158015620023a2573d5f803e3d5ffd5b5050505050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015620023f4575f80fd5b505af115801562002407573d5f803e3d5ffd5b5050505050565b61ffff82165f908152602080805260408083208484529091528120816200246382546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b119150505b92915050565b5f6200247b848462007fde565b63ffffffff81165f908152602360205260408120549192506001600160a01b03909116908163402f8468620024b188886200818b565b620024bd898962008138565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015263ffffffff1660248201526044016040805180830381865afa15801562002522573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200254891906200bb0b565b5090505f62002558878762009791565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250604080517f54fd4d50000000000000000000000000000000000000000000000000000000008152905195965090946001600160a01b03881694506354fd4d509350600480830193506060928290030181865afa158015620025ea573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200261091906200bb5f565b505090508067ffffffffffffffff1660030362002b8d57825f6001600160a01b038216639c33abf7620026448c8c62008138565b620026508d8d6200818b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600260448201526064015f60405180830381865afa158015620026bd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052620026e691908101906200bbeb565b90505f81806020019051810190620026ff91906200bc8f565b608001515f815181106200271757620027176200ba71565b602002602001015190505f6200272e8c8c620097a2565b6040516200273e9291906200bd71565b6040518091039020905060605f630223536e60e01b888460646040516024016200276b939291906200bd80565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03851663f010cb238d8985620027ed426103e86200bdad565b6040518563ffffffff1660e01b81526004016200280e94939291906200bdc3565b602060405180830381865afa1580156200282a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200285091906200b92d565b90506200285d81620097b3565b6040805160018082528183019092529194505f9250816020015b6040805160a0810182525f808252602082018190526060928201839052828201526080810191909152815260200190600190039081620028775790505090506040518060a001604052808d63ffffffff168152602001886001600160a01b03168152602001838152602001426103e8620028f291906200bdad565b815260200184815250815f815181106200291057620029106200ba71565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b143044b90620029629084906004016200be03565b5f604051808303815f87803b1580156200297a575f80fd5b505af11580156200298d573d5f803e3d5ffd5b505050505f630894edf160e01b8a86604051602401620029af9291906200becf565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03871663f010cb238f8b8562002a31426103e86200bdad565b6040518563ffffffff1660e01b815260040162002a5294939291906200bdc3565b602060405180830381865afa15801562002a6e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002a9491906200b92d565b905062002aa181620097b3565b9450506040518060a001604052808e63ffffffff168152602001896001600160a01b03168152602001828152602001426103e862002ae091906200bdad565b815260200185815250825f8151811062002afe5762002afe6200ba71565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063b143044b9062002b509085906004016200be03565b5f604051808303815f87803b15801562002b68575f80fd5b505af115801562002b7b573d5f803e3d5ffd5b50505050505050505050505062003213565b8067ffffffffffffffff16600a036200319a57825f6001600160a01b038216639c33abf762002bbd8c8c62008138565b62002bc98d8d6200818b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600160448201526064015f60405180830381865afa15801562002c36573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405262002c5f91908101906200bbeb565b90505f8180602001905181019062002c7891906200bef2565b608001515f8151811062002c905762002c906200ba71565b602002602001015190505f62002ca78c8c620098fa565b60405162002cb79291906200bd71565b604051809103902090505f62002cce8d8d6200819f565b8b60405160200162002ce29291906200bf44565b60405160208183030381529060405280519060200120905060605f63ab750e7560e01b89858560405160240162002d1c939291906200bf6b565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562002d9e426103e86200bdad565b6040518563ffffffff1660e01b815260040162002dbf94939291906200bdc3565b602060405180830381865afa15801562002ddb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002e0191906200b92d565b905062002e0e81620097b3565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f80825260208201819052606092820183905282820152608081019190915281526020019060019003908162002e285790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862002ea391906200bdad565b815260200185815250815f8151811062002ec15762002ec16200ba71565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b9062002f139084906004016200be03565b5f604051808303815f87803b15801562002f2b575f80fd5b505af115801562002f3e573d5f803e3d5ffd5b505050505050505f63594924da60e01b89858560405160240162002f65939291906200bf6b565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562002fe7426103e86200bdad565b6040518563ffffffff1660e01b81526004016200300894939291906200bdc3565b602060405180830381865afa15801562003024573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200304a91906200b92d565b90506200305781620097b3565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f808252602082018190526060928201839052828201526080810191909152815260200190600190039081620030715790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e8620030ec91906200bdad565b815260200185815250815f815181106200310a576200310a6200ba71565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b906200315c9084906004016200be03565b5f604051808303815f87803b15801562003174575f80fd5b505af115801562003187573d5f803e3d5ffd5b5050505050505050505050505062003213565b6040517f12cc947f0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906312cc947f90620031e3908b908b906004016200bf91565b5f604051808303815f87803b158015620031fb575f80fd5b505af11580156200320e573d5f803e3d5ffd5b505050505b5050505050505050565b5f62003233670de0b6b3a764000060016200bdad565b6040805160e0810190915260028152603b549192505f9160208201906001600160a01b0316815260208082018590525f60408084018290528051808401825282815260608501528051808401825282815260808501528051928301815290825260a090920152603354603b5491517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052929350610100900416906340c10f19906044015f604051808303815f87803b15801562003306575f80fd5b505af115801562003319573d5f803e3d5ffd5b5050603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d5691506024015f604051808303815f87803b1580156200338d575f80fd5b505af1158015620033a0573d5f803e3d5ffd5b5050603354603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810187905261010090920416925063095ea7b391506044016020604051808303815f875af115801562003415573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200343b91906200b8de565b50603a54603b546040517f19197ec60000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926319197ec6926200348e928792879216906004016200b8fa565b5f604051808303815f87803b158015620034a6575f80fd5b505af1158015620034b9573d5f803e3d5ffd5b50505050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156200350a575f80fd5b505af11580156200351d573d5f803e3d5ffd5b5050603954603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620035b89450911691506370a08231906024015b602060405180830381865afa1580156200358b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620035b191906200b92d565b8362007f59565b603354603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620016b3926101009004909116906370a0823190602401620014ac565b6040805160e0810190915260038152603b545f919060208201906001600160a01b03168152670de0b6b3a764000060208083018290525f60408085018290528051808401825282815260608601528051808401825282815260808601528051928301815290825260a090930152603354603b5492517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039384166004820152602481019290925292935061010090920416906340c10f19906044015f604051808303815f87803b158015620036ed575f80fd5b505af115801562003700573d5f803e3d5ffd5b5050603a54603b546034546040517f7e6e1e100000000000000000000000000000000000000000000000000000000081525f95506001600160a01b039384169450637e6e1e109362003766938116921690670de0b6b3a76400009088906004016200b840565b6040805180830381865afa15801562003781573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620037a791906200b87d565b603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b1580156200381a575f80fd5b505af11580156200382d573d5f803e3d5ffd5b5050603354603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015261010090920416925063095ea7b391506044016020604051808303815f875af1158015620038a9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620038cf91906200b8de565b50603a548151603b546040517f19197ec60000000000000000000000000000000000000000000000000000000081526001600160a01b03938416936319197ec693926200392d92670de0b6b3a764000092899216906004016200b8fa565b5f604051808303818588803b15801562003945575f80fd5b505af115801562003958573d5f803e3d5ffd5b5050505050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015620039aa575f80fd5b505af1158015620039bd573d5f803e3d5ffd5b5050505062003adb603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003a17573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003a3d91906200b92d565b6033546039546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416906370a0823190602401602060405180830381865afa15801562003aa6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003acc91906200b92d565b670de0b6b3a76400006200990b565b603954604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905162003b3f926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015620015d0573d5f803e3d5ffd5b603854603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015262003b949291909116906370a0823190602401620014ac565b60385462003bae906003906001600160a01b0316620016b7565b603854603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526200165e9291909116906370a0823190602401620015b4565b5f5b825181101562003cf4575f83828151811062003c255762003c256200ba71565b602002602001015190505f5b835181101562003ce957816001600160a01b031663f0a9e48185838151811062003c5f5762003c5f6200ba71565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff9091166004820152600160248201526044015f604051808303815f87803b15801562003cc5575f80fd5b505af115801562003cd8573d5f803e3d5ffd5b50506001909201915062003c319050565b505060010162003c05565b505050565b6060601b805480602002602001604051908101604052809291908181526020015f905b8282101562001c7c578382905f5260205f2090600202016040518060400160405290815f8201805462003d4f906200b9b9565b80601f016020809104026020016040519081016040528092919081815260200182805462003d7d906200b9b9565b801562003dcc5780601f1062003da25761010080835404028352916020019162003dcc565b820191905f5260205f20905b81548152906001019060200180831162003dae57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801562003e6557602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162003e115790505b5050505050815250508152602001906001019062003d1c565b5f365f8062003e8f8787876200998f565b935093509350935093509350935093565b80515f5b8181101562003cf4575f83828151811062003ec35762003ec36200ba71565b602002602001015190505f5b8381101562004066578281146200405d575f85828151811062003ef65762003ef66200ba71565b602002602001015190505f816001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003f3e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003f6491906200bfa6565b6001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003fa0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003fc691906200bfc4565b9050836001600160a01b0316633400288b8262003fe9856001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff92909216600483015260248201526044015f604051808303815f87803b15801562004043575f80fd5b505af115801562004056573d5f803e3d5ffd5b5050505050505b60010162003ecf565b505060010162003ea4565b6040805160e0810190915260028152603b545f919060208201906001600160a01b03168152670de0b6b3a764000060208083018290525f60408085018290528051808401825282815260608601528051808401825282815260808601528051928301815290825260a09093015260335460395492517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039384166004820152602481019290925292935061010090920416906340c10f19906044015f604051808303815f87803b1580156200414d575f80fd5b505af115801562004160573d5f803e3d5ffd5b5050603954603b546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a76400006024820152911692506340c10f1991506044015f604051808303815f87803b158015620041d2575f80fd5b505af1158015620041e5573d5f803e3d5ffd5b5050603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d5691506024015f604051808303815f87803b15801562004259575f80fd5b505af11580156200426c573d5f803e3d5ffd5b5050603954603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a764000060248201529116925063095ea7b391506044016020604051808303815f875af1158015620042e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200430991906200b8de565b50603a54603b546040517f53174fa40000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926353174fa4926200436492670de0b6b3a764000092879216906004016200b8fa565b5f604051808303815f87803b1580156200437c575f80fd5b505af11580156200438f573d5f803e3d5ffd5b50505050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015620043e0575f80fd5b505af1158015620043f3573d5f803e3d5ffd5b5050603954603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526200444a9450911691506370a0823190602401620014ac565b603354603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620044a3926101009004909116906370a0823190602401620015b4565b50565b61ffff82165f908152602080805260408083208484529091528120606091620044fd82546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b1115620045b4575f6200451082620099ea565b5f8181526021602052604090208054919250906200452e906200b9b9565b80601f01602080910402602001604051908101604052809291908181526020018280546200455c906200b9b9565b8015620045ab5780601f106200458157610100808354040283529160200191620045ab565b820191905f5260205f20905b8154815290600101906020018083116200458d57829003601f168201915b50505050509250505b5092915050565b63ffffffff85165f908152602360205260409020546001600160a01b031662004645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f656e64706f696e74206e6f74207965742072656769737465726564000000000060448201526064015b60405180910390fd5b63ffffffff85165f908152602080805260408083208784529091528120906200469c82546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b90505f855f03620046e0575081546fffffffffffffffffffffffffffffffff80821670010000000000000000000000000000000090920481169190910316620046f4565b858211620046ef5781620046f1565b855b90505b801562003213578062004707816200bfe2565b9150505f620047168462009a93565b5f8181526021602052604081208054929350909162004735906200b9b9565b80601f016020809104026020016040519081016040528092919081815260200182805462004763906200b9b9565b8015620047b25780601f106200478857610100808354040283529160200191620047b2565b820191905f5260205f20905b8154815290600101906020018083116200479457829003601f168201915b50506040517f997cff1b000000000000000000000000000000000000000000000000000000008152939450309363997cff1b9350620047fa925085915086906004016200becf565b5f6040518083038186803b15801562004811575f80fd5b505afa15801562004824573d5f803e3d5ffd5b50506040517f6019788900000000000000000000000000000000000000000000000000000000815230925063601978899150620048689084908a906004016200c019565b5f604051808303815f87803b15801562004880575f80fd5b505af115801562004893573d5f803e3d5ffd5b5050505f838152602260205260408120805491925090620048b4906200b9b9565b80601f0160208091040260200160405190810160405280929190818152602001828054620048e2906200b9b9565b8015620049315780601f10620049075761010080835404028352916020019162004931565b820191905f5260205f20905b8154815290600101906020018083116200491357829003601f168201915b505050505090506200494581600262009b3f565b1562004a20575f80620049588362009b54565b604051919350915081905f906001600160a01b0383169085908381818185875af1925050503d805f8114620049a9576040519150601f19603f3d011682016040523d82523d5f602084013e620049ae565b606091505b505090508062004a1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4661696c656420746f2073656e6420457468657200000000000000000000000060448201526064016200463c565b505050505b62004a2d81600162009b3f565b1562004aa3576040517fec53eaa0000000000000000000000000000000000000000000000000000000008152309063ec53eaa09062004a7390859085906004016200c019565b5f604051808303815f87803b15801562004a8b575f80fd5b505af115801562004a9e573d5f803e3d5ffd5b505050505b62004ab081600562009b3f565b1562004b28576040517f0a69faa90000000000000000000000000000000000000000000000000000000081523090630a69faa99062004af890859085908c906004016200c041565b5f604051808303815f87803b15801562004b10575f80fd5b505af115801562004b23573d5f803e3d5ffd5b505050505b6001600160a01b0388161580159062004b49575062004b4981600362009b3f565b1562004bc3576040517fa29c8984000000000000000000000000000000000000000000000000000000008152309063a29c89849062004b93908590859088908e906004016200c07f565b5f604051808303815f87803b15801562004bab575f80fd5b505af115801562004bbe573d5f803e3d5ffd5b505050505b505050620046f4565b6060601a805480602002602001604051908101604052809291908181526020015f905b8282101562001c7c578382905f5260205f2001805462004c0f906200b9b9565b80601f016020809104026020016040519081016040528092919081815260200182805462004c3d906200b9b9565b801562004c8c5780601f1062004c625761010080835404028352916020019162004c8c565b820191905f5260205f20905b81548152906001019060200180831162004c6e57829003601f168201915b50505050508152602001906001019062004bef565b6060601d805480602002602001604051908101604052809291908181526020015f905b8282101562001c7c575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801562004d8257602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162004d2e5790505b5050505050815250508152602001906001019062004cc4565b5f805f62001e0f858562009c96565b5f62004db784846200819f565b9050818114620018d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f67756964206e6f74206d6174636800000000000000000000000000000000000060448201526064016200463c565b6040805160e0810190915260028152603b545f919060208201906001600160a01b03168152670de0b6b3a764000060208083018290525f60408085018290528051808401825282815260608601528051808401825282815260808601528051928301815290825260a090930152603354603b5492517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039384166004820152602481019290925292935061010090920416906340c10f19906044015f604051808303815f87803b15801562004f00575f80fd5b505af115801562004f13573d5f803e3d5ffd5b5050603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d5691506024015f604051808303815f87803b15801562004f87575f80fd5b505af115801562004f9a573d5f803e3d5ffd5b5050603354603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015261010090920416925063095ea7b391506044016020604051808303815f875af115801562005016573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200503c91906200b8de565b50603a54603b546040517f19197ec60000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926319197ec6926200509792670de0b6b3a764000092879216906004016200b8fa565b5f604051808303815f87803b158015620050af575f80fd5b505af1158015620050c2573d5f803e3d5ffd5b50505050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801562005113575f80fd5b505af115801562005126573d5f803e3d5ffd5b5050603954603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526200517d9450911691506370a0823190602401620015b4565b603354603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620044a3926101009004909116906370a0823190602401620014ac565b5f620051ec670de0b6b3a764000060016200bdad565b6040805160e0810190915260028152603b549192505f9160208201906001600160a01b0316815260208082018590525f60408084018290528051808401825282815260608501528051808401825282815260808501528051928301815290825260a09092015260335460395491517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052929350610100900416906340c10f19906044015f604051808303815f87803b158015620052bf575f80fd5b505af1158015620052d2573d5f803e3d5ffd5b5050603954603b546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052911692506340c10f1991506044015f604051808303815f87803b1580156200533d575f80fd5b505af115801562005350573d5f803e3d5ffd5b5050603b546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d5691506024015f604051808303815f87803b158015620053c4575f80fd5b505af1158015620053d7573d5f803e3d5ffd5b5050603954603a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018790529116925063095ea7b391506044016020604051808303815f875af115801562005447573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200546d91906200b8de565b50603a54603b546040517f53174fa40000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926353174fa492620054c0928792879216906004016200b8fa565b5f604051808303815f87803b158015620054d8575f80fd5b505af1158015620054eb573d5f803e3d5ffd5b50505050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b03166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156200553c575f80fd5b505af11580156200554f573d5f803e3d5ffd5b5050603954603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620055a69450911691506370a0823190602401620014ac565b603354603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620016b3926101009004909116906370a08231906024016200356f565b30633bbd6a9462005611878762007fde565b6200561d88886200818b565b8686866200562c8c8c620098fa565b6040518863ffffffff1660e01b81526004016200565097969594939291906200c0c8565b5f604051808303815f87803b15801562005668575f80fd5b505af11580156200567b573d5f803e3d5ffd5b505050505050505050565b8060235f836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620056c7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620056ed91906200bfc4565b63ffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060601c805480602002602001604051908101604052809291908181526020015f905b8282101562001c7c575f8481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200581c57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620057c85790505b505050505081525050815260200190600101906200575e565b60606019805480602002602001604051908101604052809291908181526020015f905b8282101562001c7c578382905f5260205f2001805462005878906200b9b9565b80601f0160208091040260200160405190810160405280929190818152602001828054620058a6906200b9b9565b8015620058f55780601f10620058cb57610100808354040283529160200191620058f5565b820191905f5260205f20905b815481529060010190602001808311620058d757829003601f168201915b50505050508152602001906001019062005858565b620016b382825f8060405180602001604052805f815250620045bb565b5f8062005935848462009d21565b915091505b9250929050565b6008545f9060ff161562005959575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa158015620059e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062005a0e91906200b92d565b1415905090565b8260ff1667ffffffffffffffff81111562005a345762005a346200abed565b60405190808252806020026020018201604052801562005a5e578160200160208202803683370190505b50805162005a75916025916020909101906200a81f565b508260ff1667ffffffffffffffff81111562005a955762005a956200abed565b60405190808252806020026020018201604052801562005abf578160200160208202803683370190505b50805162005ad6916026916020909101906200a89f565b508260ff1667ffffffffffffffff81111562005af65762005af66200abed565b60405190808252806020026020018201604052801562005b20578160200160208202803683370190505b50805162005b37916027916020909101906200a81f565b508260ff1667ffffffffffffffff81111562005b575762005b576200abed565b60405190808252806020026020018201604052801562005b81578160200160208202803683370190505b50805162005b98916028916020909101906200a81f565b508260ff1667ffffffffffffffff81111562005bb85762005bb86200abed565b60405190808252806020026020018201604052801562005be2578160200160208202803683370190505b50805162005bf9916029916020909101906200a81f565b5060408051600180825281830190925290602080830190803683375050815162005c2b92602a9250602001906200a81f565b506040517fffa1864900000000000000000000000000000000000000000000000000000000815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa15801562005c94573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062005cba91906200bfa6565b602a80545f9062005ccf5762005ccf6200ba71565b5f918252602082200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0393909316929092179091555b8360ff168160ff16101562005f27575f62005d2d8260016200ba39565b60ff1690505f838360ff168151811062005d4b5762005d4b6200ba71565b602002602001015190508160256001018460ff168154811062005d725762005d726200ba71565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055505f6001600160a01b0316816001600160a01b03160362005e4e57813060405162005dcd906200a94d565b63ffffffff90921682526001600160a01b03166020820152604001604051809103905ff08015801562005e02573d5f803e3d5ffd5b506025805460ff861690811062005e1d5762005e1d6200ba71565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555062005ee3565b81308260405162005e5f906200a95b565b63ffffffff90931683526001600160a01b039182166020840152166040820152606001604051809103905ff08015801562005e9c573d5f803e3d5ffd5b506025805460ff861690811062005eb75762005eb76200ba71565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b62005f1c60255f018460ff168154811062005f025762005f026200ba71565b5f918252602090912001546001600160a01b031662005686565b505060010162005d10565b503060405162005f37906200a969565b6001600160a01b039091168152602001604051809103905ff08015801562005f61573d5f803e3d5ffd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790555f5b8360ff168160ff16101562007932575f83600181111562005fc15762005fc16200c12a565b0362007704575f60255f018260ff168154811062005fe35762005fe36200ba71565b905f5260205f20015f9054906101000a90046001600160a01b03169050308164e8d4a51000620186a06040516200601a906200a977565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff08015801562006057573d5f803e3d5ffd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040518190620060a0906200a985565b6001600160a01b039091168152602001604051809103905ff080158015620060ca573d5f803e3d5ffd5b50602c6001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550308164e8d4a51000620186a06040516200610d906200a993565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff0801580156200614a573d5f803e3d5ffd5b50602e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556025805460ff84169081106200619d576200619d6200ba71565b5f91825260209091200154602c546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b15801562006205575f80fd5b505af115801562006218573d5f803e3d5ffd5b5050505060255f018260ff16815481106200623757620062376200ba71565b5f91825260209091200154602d546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b1580156200629f575f80fd5b505af1158015620062b2573d5f803e3d5ffd5b5050505060255f018260ff1681548110620062d157620062d16200ba71565b5f91825260209091200154602e546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b15801562006339575f80fd5b505af11580156200634c573d5f803e3d5ffd5b5050602c54602780546001600160a01b039092169350915060ff85169081106200637a576200637a6200ba71565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602d546028805491909216919060ff8516908110620063d957620063d96200ba71565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602e546029805491909216919060ff85169081106200643857620064386200ba71565b5f918252602082200180546001600160a01b03939093167fffffffffffffffffffffffff0000000000000000000000000000000000000000909316929092179091556040805160018082528183019092529081602001602082028036833701905050905030815f81518110620064b257620064b26200ba71565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092525f9290919082016060803683375050602c5482519293506001600160a01b0316918391505f906200650f576200650f6200ba71565b6001600160a01b039283166020918202929092010152602d548251911690829060019081106200654357620065436200ba71565b6001600160a01b039283166020918202929092010152602e548251911690829060029081106200657757620065776200ba71565b6001600160a01b039283166020918202929092010152602b5460405185925f92859291169030908790620065ab906200a9a1565b620065bc969594939291906200c157565b604051809103905ff080158015620065d6573d5f803e3d5ffd5b50602f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff86169081106200662957620066296200ba71565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff166040516200665b906200a9af565b63ffffffff9091168152602001604051809103905ff08015801562006682573d5f803e3d5ffd5b50603180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602f546040517fc7b2370b00000000000000000000000000000000000000000000000000000000815260048101929092529091169063c7b2370b906024015f604051808303815f87803b15801562006710575f80fd5b505af115801562006723573d5f803e3d5ffd5b5050505060256001018460ff16815481106200674357620067436200ba71565b5f918252602090912060088204015460079091166004026101000a900463ffffffff16620067738560016200ba39565b602b5460405184916001600160a01b031690602a90600190889062006798906200a9bd565b620067aa97969594939291906200c1a7565b604051809103905ff080158015620067c4573d5f803e3d5ffd5b50603080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff86169081106200681757620068176200ba71565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16670de0b6b3a764000060405162006852906200a9cb565b63ffffffff90921682526020820152604001604051809103905ff0801580156200687e573d5f803e3d5ffd5b50603280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f39f26dfc000000000000000000000000000000000000000000000000000000008152670de0b6b3a764000060048201819052602482015261271060448201526339f26dfc906064015f604051808303815f87803b1580156200691a575f80fd5b505af11580156200692d573d5f803e3d5ffd5b50506030546032546040517fc7b2370b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063c7b2370b91506024015f604051808303815f87803b15801562006991575f80fd5b505af1158015620069a4573d5f803e3d5ffd5b505050505050620069cf60405180606001604052806060815260200160608152602001606081525090565b620069dc8660016200ba39565b60ff1667ffffffffffffffff811115620069fa57620069fa6200abed565b60405190808252806020026020018201604052801562006a7957816020015b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018162006a195790505b50815262006a898660016200ba39565b60ff1667ffffffffffffffff81111562006aa75762006aa76200abed565b60405190808252806020026020018201604052801562006b1857816020015b604080516080810182525f8082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018162006ac65790505b50602082015262006b2b8660016200ba39565b60ff1667ffffffffffffffff81111562006b495762006b496200abed565b60405190808252806020026020018201604052801562006b8f57816020015b604080518082019091525f808252602082015281526020019060019003908162006b685790505b50604082810191909152805160018082528183019092525f91602080830190803683375050604080515f80825260208201909252603054845194955090936001600160a01b03909116925084919062006bec5762006bec6200ba71565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5b8860ff168160ff1610156200729e578060ff168660ff16031562007295575f62006c3a8260016200ba39565b60408051600180825281830190925260ff9290921692505f9190816020015b62006c636200a9d9565b81526020019060019003908162006c595790505090505f6040518060c00160405280606467ffffffffffffffff168152602001875160ff168152602001865160ff1681526020015f60ff16815260200187815260200186815250905060405180604001604052808463ffffffff16815260200182815250825f8151811062006cef5762006cef6200ba71565b6020908102919091010152602c546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906329460b0b9062006d459085906004016200c254565b5f604051808303815f87803b15801562006d5d575f80fd5b505af115801562006d70573d5f803e3d5ffd5b5050602d546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329460b0b915062006dbf9085906004016200c254565b5f604051808303815f87803b15801562006dd7575f80fd5b505af115801562006dea573d5f803e3d5ffd5b505f92506001915062006dfa9050565b60405190808252806020026020018201604052801562006e3757816020015b62006e236200aa3e565b81526020019060019003908162006e195790505b506040805180820182526127108152602f546001600160a01b0316602080830191909152825180840190935263ffffffff88168352820181905282519293509183905f9062006e8a5762006e8a6200ba71565b6020908102919091010152602c546040517fc14c43490000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c14c43499062006ee09085906004016200c34f565b5f604051808303815f87803b15801562006ef8575f80fd5b505af115801562006f0b573d5f803e3d5ffd5b50506040805160c08101825263ffffffff89168152611388602082018190529181019190915261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a08201528b518051919550935060ff891692508210905062006f805762006f806200ba71565b602002602001018190525060405180608001604052808463ffffffff16815260200161138867ffffffffffffffff16815260200161271061ffff1681526020016402540be4006fffffffffffffffffffffffffffffffff1681525087602001518560ff168151811062006ff75762006ff76200ba71565b602002602001018190525060405180604001604052808463ffffffff168152602001600381525087604001518560ff16815181106200703a576200703a6200ba71565b60200260200101819052505f60256006015f9054906101000a90046001600160a01b03166001600160a01b031663c18403276040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200709a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620070c091906200c3bf565b6040805160018082528183019092529192505f9190816020015b6200710d6040805180820182525f8082528251606081018452818152602081810183905293810191909152909182015290565b815260200190600190039081620070da57905050905060405180604001604052808663ffffffff16815260200160405180606001604052808560016200715491906200c3dd565b6fffffffffffffffffffffffffffffffff1681526001602082018190526040909101529052815182905f906200718e576200718e6200ba71565b6020908102919091010152602b546040517f3161b7f60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690633161b7f690620071e49084906004016200c414565b5f604051808303815f87803b158015620071fc575f80fd5b505af11580156200720f573d5f803e3d5ffd5b5050602b546040517f5d6d7ccb00000000000000000000000000000000000000000000000000000000815268056bc75e2d6310000060048201526001600160a01b039091169250635d6d7ccb91506024015f604051808303815f87803b15801562007278575f80fd5b505af11580156200728b573d5f803e3d5ffd5b5050505050505050505b60010162006c0e565b506040805160018082528183019092525f91816020015b620072bf6200aa80565b815260200190600190039081620072b55750506040805160c081018252602f546001600160a01b03168152855160ff9081166020808401919091528651909116828401525f606083018190526080830188905260a083018790528351808501909452620111718452908301829052835193945090928491906200734657620073466200ba71565b6020908102919091010152602e546040517fc85f4b4e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c85f4b4e906200739c9085906004016200c491565b5f604051808303815f87803b158015620073b4575f80fd5b505af1158015620073c7573d5f803e3d5ffd5b5050505050506040518060c0016040528060256001018760ff1681548110620073f457620073f46200ba71565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff168252611388908201819052604082015261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a0909101528351805160ff8b169081106200747057620074706200ba71565b6020026020010181905250604051806080016040528060256001018760ff1681548110620074a257620074a26200ba71565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff1682526113888282015261271060408301526402540be400606090920191909152840151805160ff8b169081106200750157620075016200ba71565b6020026020010181905250604051806040016040528060256001018760ff16815481106200753357620075336200ba71565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff16825260039101526040840151805160ff8b169081106200757b576200757b6200ba71565b6020908102919091010152602f5483516040517f3d85ac330000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691633d85ac3391620075d1916004016200c58b565b5f604051808303815f87803b158015620075e9575f80fd5b505af1158015620075fc573d5f803e3d5ffd5b505060305460208601516040517f52d3b8710000000000000000000000000000000000000000000000000000000081526001600160a01b0390921693506352d3b87192506200764e916004016200c626565b5f604051808303815f87803b15801562007666575f80fd5b505af115801562007679573d5f803e3d5ffd5b505060325460408087015190517ff5ff608f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909216935063f5ff608f9250620076cb916004016200c6a4565b5f604051808303815f87803b158015620076e3575f80fd5b505af1158015620076f6573d5f803e3d5ffd5b505050505050505062007929565b60018360018111156200771b576200771b6200c12a565b03620078c6575f3060255f018360ff16815481106200773e576200773e6200ba71565b5f918252602090912001546040516001600160a01b039091169062007763906200aadf565b6001600160a01b03928316815291166020820152604001604051809103905ff08015801562007794573d5f803e3d5ffd5b50905060255f018260ff1681548110620077b257620077b26200ba71565b5f918252602090912001546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063e8964e81906024015f604051808303815f87803b15801562007818575f80fd5b505af11580156200782b573d5f803e3d5ffd5b505050508060256002018360ff16815481106200784c576200784c6200ba71565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060256003018360ff16815481106200789457620078946200ba71565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505062007929565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206c696272617279207479706500000000000000000000000060448201526064016200463c565b60010162005f9c565b505f5b8360ff168160ff161015620018d2575f60255f018260ff16815481106200796057620079606200ba71565b5f9182526020822001546001600160a01b031691508460018111156200798a576200798a6200c12a565b0362007afb57806001600160a01b031663aafea3126201117160256004018560ff1681548110620079bf57620079bf6200ba71565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b15801562007a2c575f80fd5b505af115801562007a3f573d5f803e3d5ffd5b50505050806001600160a01b031663a718531b6201117160256004018560ff168154811062007a725762007a726200ba71565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b15801562007ae3575f80fd5b505af115801562007af6573d5f803e3d5ffd5b505050505b5f5b8560ff168160ff16101562007c99578060ff168360ff16031562007c90576001600160a01b03821663aafea31262007b378360016200ba39565b6027805460ff881690811062007b515762007b516200ba71565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b15801562007bbb575f80fd5b505af115801562007bce573d5f803e3d5ffd5b50505050816001600160a01b031663a718531b82600162007bf091906200ba39565b6028805460ff881690811062007c0a5762007c0a6200ba71565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b15801562007c78575f80fd5b505af115801562007c8b573d5f803e3d5ffd5b505050505b60010162007afd565b505060010162007935565b6060601580548060200260200160405190810160405280929190818152602001828054801562001a1a57602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311620019fb575050505050905090565b5f60235f62007d14868662007fde565b63ffffffff16815260208101919091526040015f908120546001600160a01b031691508062007d438462009d84565b915091505f604051806060016040528062007d5f898962008138565b63ffffffff16815260200162007d76898962008149565b815260200162007d87898962008165565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e84848462007db38c8c6200818b565b62007dbf8d8d6200819f565b62007dcb8e8e620098fa565b60405180602001604052805f8152506040518963ffffffff1660e01b815260040162007dfd969594939291906200c6ed565b5f604051808303818589803b15801562007e15575f80fd5b5088f115801562007e28573d5f803e3d5ffd5b50505050505050505050505050565b5f8062005935848462009ec7565b5f62007e52858562007fde565b90505f62007e61868662009f41565b63ffffffff83165f90815260208080526040808320848452909152812091925062007e8d88886200819f565b905062007e9b828262009f52565b5f81815260216020526040902062007eb5888a836200c7ab565b505f8181526022602052604090206200567b8688836200c7ab565b6040517f88b44c85000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906388b44c859062007f26908690869086906004016200c8b0565b5f6040518083038186803b15801562007f3d575f80fd5b505afa15801562007f50573d5f803e3d5ffd5b50505050505050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015f6040518083038186803b15801562007fc3575f80fd5b505afa15801562007fd6573d5f803e3d5ffd5b505050505050565b5f62007fef6031602d84866200c8d0565b62007ffa916200c8f9565b60e01c9392505050565b5f805f805f620080168660056200a004565b9150915081620080a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f7074696f6e7348656c7065723a206c7a52656164206f7074696f6e206e6f7460448201527f20666f756e64000000000000000000000000000000000000000000000000000060648201526084016200463c565b6040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca8690620080e79084906004016200addf565b606060405180830381865afa15801562008103573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200812991906200c940565b94509450945050509193909250565b5f62007fef600d600984866200c8d0565b5f6200815a602d600d84866200c8d0565b62001b36916200c986565b5f620081766009600184866200c8d0565b62008181916200c9c3565b60c01c9392505050565b5f62001b366200819c848462009f41565b90565b5f6200815a6071605184866200c8d0565b620081ba6200a65f565b603354620081cc9060ff165f6200196c565b60025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c0954603d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909216918217905560405130906200823d906200aaed565b6200824a9291906200ca0a565b604051809103905ff08015801562008264573d5f803e3d5ffd5b50603380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384160217905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e047546040519116903090620082db906200aaed565b620082e89291906200caa7565b604051809103905ff08015801562008302573d5f803e3d5ffd5b50603580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e54604051911690309062008375906200aaed565b620083829291906200cb21565b604051809103905ff0801580156200839c573d5f803e3d5ffd5b50603780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff811115620083f857620083f86200abed565b60405190808252806020026020018201604052801562008422578160200160208202803683370190505b5060355481519192506001600160a01b03169082905f906200844857620084486200ba71565b6001600160a01b039283166020918202929092010152603354825161010090910490911690829060019081106200848357620084836200ba71565b6001600160a01b039283166020918202929092010152603754825191169082906002908110620084b757620084b76200ba71565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca254906200850d9084906004016200ae8a565b5f604051808303815f87803b15801562008525575f80fd5b505af115801562008538573d5f803e3d5ffd5b50505050603360019054906101000a90046001600160a01b031660405162008560906200aafb565b6200856c91906200cb9b565b604051809103905ff08015801562008586573d5f803e3d5ffd5b50603980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c0954604051919216903090620085fd906200ab09565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff08015801562008637573d5f803e3d5ffd5b50603480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556039546033546040519184169361010090910416919062008690906200ab17565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff080158015620086ca573d5f803e3d5ffd5b50603a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e0475460405191169030906200873d906200aaed565b6200874a9291906200cc2d565b604051809103905ff08015801562008764573d5f803e3d5ffd5b50603680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e546040519116903090620087d7906200aaed565b620087e49291906200cca7565b604051809103905ff080158015620087fe573d5f803e3d5ffd5b50603880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff8111156200885a576200885a6200abed565b60405190808252806020026020018201604052801562008884578160200160208202803683370190505b5060365481519192506001600160a01b03169082905f90620088aa57620088aa6200ba71565b6001600160a01b039283166020918202929092010152603454825191169082906001908110620088de57620088de6200ba71565b6001600160a01b0392831660209182029290920101526038548251911690829060029081106200891257620089126200ba71565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca25490620089689084906004016200ae8a565b5f604051808303815f87803b15801562008980575f80fd5b505af115801562008993573d5f803e3d5ffd5b5050603354604080517fc657c7180000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b031660048301526024820152600d60448201527f41737365744f46543a3a617262000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008a3e575f80fd5b505af115801562008a51573d5f803e3d5ffd5b5050603554604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008af8575f80fd5b505af115801562008b0b573d5f803e3d5ffd5b5050603754604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008bb2575f80fd5b505af115801562008bc5573d5f803e3d5ffd5b5050603454604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601460448201527f53686172654f4654416461707465723a3a6172620000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008c6c575f80fd5b505af115801562008c7f573d5f803e3d5ffd5b5050603654604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008d26575f80fd5b505af115801562008d39573d5f803e3d5ffd5b5050603854604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008de0575f80fd5b505af115801562008df3573d5f803e3d5ffd5b5050603954604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600a60448201527f5661756c743a3a617262000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008e9a575f80fd5b505af115801562008ead573d5f803e3d5ffd5b5050603a54604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601660448201527f5661756c74436f6d706f73657253796e633a3a617262000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562008f54575f80fd5b505af115801562008f67573d5f803e3d5ffd5b5050603e5462008f8d92506001600160a01b0316905068056bc75e2d631000006200a66b565b603d5462008fae906001600160a01b031668056bc75e2d631000006200a66b565b604080516003808252608082019092525f91816020015b60408051606080820183525f80835260208301529181019190915281526020019060019003908162008fc55790505090506040518060600160405280600363ffffffff168152602001600161ffff168152602001603f805462009028906200b9b9565b80601f016020809104026020016040519081016040528092919081815260200182805462009056906200b9b9565b8015620090a55780601f106200907b57610100808354040283529160200191620090a5565b820191905f5260205f20905b8154815290600101906020018083116200908757829003601f168201915b5050505050815250815f81518110620090c257620090c26200ba71565b60200260200101819052506040518060600160405280600263ffffffff168152602001600161ffff168152602001603f8054620090ff906200b9b9565b80601f01602080910402602001604051908101604052809291908181526020018280546200912d906200b9b9565b80156200917c5780601f1062009152576101008083540402835291602001916200917c565b820191905f5260205f20905b8154815290600101906020018083116200915e57829003601f168201915b5050505050815250816001815181106200919a576200919a6200ba71565b60200260200101819052506040518060600160405280600163ffffffff168152602001600161ffff168152602001603f8054620091d7906200b9b9565b80601f016020809104026020016040519081016040528092919081815260200182805462009205906200b9b9565b8015620092545780601f106200922a5761010080835404028352916020019162009254565b820191905f5260205f20905b8154815290600101906020018083116200923657829003601f168201915b5050505050815250816002815181106200927257620092726200ba71565b60209081029190910101526033546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063b98bd07090620092cc9084906004016200cd21565b5f604051808303815f87803b158015620092e4575f80fd5b505af1158015620092f7573d5f803e3d5ffd5b50506035546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd0709150620093469084906004016200cd21565b5f604051808303815f87803b1580156200935e575f80fd5b505af115801562009371573d5f803e3d5ffd5b50506037546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd0709150620093c09084906004016200cd21565b5f604051808303815f87803b158015620093d8575f80fd5b505af1158015620093eb573d5f803e3d5ffd5b50506034546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200943a9084906004016200cd21565b5f604051808303815f87803b15801562009452575f80fd5b505af115801562009465573d5f803e3d5ffd5b50506036546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd0709150620094b49084906004016200cd21565b5f604051808303815f87803b158015620094cc575f80fd5b505af1158015620094df573d5f803e3d5ffd5b50506038546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd07091506200952e9084906004016200cd21565b5f604051808303815f87803b15801562009546575f80fd5b505af115801562007f50573d5f803e3d5ffd5b5f80836040516020016200956e91906200cdbe565b60408051601f19818403018152908290526200958f9185906020016200cddb565b60405160208183030381529060405290508051602082015ff09150813b620045b4575f80fd5b5f805f805f620095c78660036200a004565b91509150816200965a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a436f6d706f7365206f7074696f6e2060448201527f6e6f7420666f756e64000000000000000000000000000000000000000000000060648201526084016200463c565b6040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab090620096989084906004016200addf565b606060405180830381865afa158015620096b4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620096da91906200ce0d565b91986fffffffffffffffffffffffffffffffff9182169850911695509350505050565b5f80806012841480159062009713575060228414155b156200974b576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200975885855f6200a6f1565b925062009768858560026200a71b565b9150602284146200977a575f62009788565b62009788858560126200a71b565b90509250925092565b365f6200593560518285876200c8d0565b365f6200593583605181876200c8d0565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290526060905f90605c0160408051601f198184030181529082905280516020909101207fe341eaa4000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291505f9081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e341eaa490604401606060405180830381865afa15801562009878573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200989e91906200ce40565b6040805160208101939093528281019190915260f89290921b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260619091019091529695505050505050565b365f6200593583607181876200c8d0565b6200994d83836040518060400160405280600e81526020017f7465726d3120213d207465726d3200000000000000000000000000000000000081525062007ed0565b62003cf483826040518060400160405280600e81526020017f7465726d3120213d207465726d3300000000000000000000000000000000000081525062007ed0565b5f36816001840181620099a48888846200a6f1565b600292909201919050620099ba8888846200a745565b94506001820161ffff82168301620099d581838b8d6200c8d0565b979b909a50969850505061ffff160193505050565b5f62009a1f825470010000000000000000000000000000000081046fffffffffffffffffffffffffffffffff90811691161490565b1562009a315762009a3160326200a76c565b5080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909204821601165f9081526001909101602052604090205490565b80545f906fffffffffffffffffffffffffffffffff700100000000000000000000000000000000820481169116810362009ad35762009ad360316200a76c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016fffffffffffffffffffffffffffffffff9081165f818152600185016020526040812080549190558454909216700100000000000000000000000000000000909102179092555090565b5f62009b4c83836200a004565b509392505050565b5f805f8062009b658560026200a004565b915091508162009bf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696f6e7348656c7065723a206e617469766544726f70206f7074696f6e60448201527f206e6f7420666f756e640000000000000000000000000000000000000000000060648201526084016200463c565b6040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf69062009c369084906004016200addf565b6040805180830381865afa15801562009c51573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062009c7791906200ce77565b6fffffffffffffffffffffffffffffffff909116969095509350505050565b5f80806014841480159062009cac575060248414155b1562009ce4576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62009cf185855f6200a71b565b925062009d01858560106200a77d565b91506024841462009d13575f62009788565b62009788858560146200a71b565b5f806030831462009d5e576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62009d6b84845f6200a71b565b915062009d7b848460106200a7a7565b90509250929050565b5f805f8062009d958560016200a004565b915091508162009e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a52656365697665206f7074696f6e2060448201527f6e6f7420666f756e64000000000000000000000000000000000000000000000060648201526084016200463c565b6040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d619062009e669084906004016200addf565b6040805180830381865afa15801562009e81573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062009ea791906200cea6565b6fffffffffffffffffffffffffffffffff91821697911695509350505050565b5f806010831480159062009edc575060208314155b1562009f14576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62009f2184845f6200a71b565b91506020831462009f33575f62009d7b565b62009d7b848460106200a71b565b5f6200815a6051603184866200c8d0565b81546fffffffffffffffffffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0191700100000000000000000000000000000000900481169082160362009fb65762009fb660416200a76c565b6fffffffffffffffffffffffffffffffff165f81815260018401602052604090209190915581547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016179055565b601f546040517fe5c5e9a30000000000000000000000000000000000000000000000000000000081525f91606091839161010090046001600160a01b03169063e5c5e9a3906200a0599088906004016200addf565b5f60405180830381865afa1580156200a074573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200a09d91908101906200ced8565b50604080515f80825260208201909252919250908190819081905b85518510156200a634576040517f6e1775e30000000000000000000000000000000000000000000000000000000081525f90819081903090636e1775e3906200a108908c908c906004016200becf565b5f60405180830381865afa1580156200a123573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200a14c91908101906200cf3f565b9250925092508b60ff168360ff16036200a629575f808080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8916016200a291576040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d61906200a1ce908a906004016200addf565b6040805180830381865afa1580156200a1e9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a20f91906200cea6565b90955093506200a220858d6200cf9b565b9b506200a22e848c6200cf9b565b9a508b8b6040516020016200a27a929190608092831b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000090811682529190921b16601082015260200190565b60405160208183030381529060405298506200a623565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8916016200a38e576040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf6906200a2fa908a906004016200addf565b6040805180830381865afa1580156200a315573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a33b91906200ce77565b90945092506200a34c848c6200cf9b565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b16602082015260308101859052909b506050016200a27a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff8916016200a4cb576040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab0906200a3f7908a906004016200addf565b606060405180830381865afa1580156200a413573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a43991906200ce0d565b909650945091506200a44c858d6200cf9b565b9b506200a45a848c6200cf9b565b6040517fffff00000000000000000000000000000000000000000000000000000000000060f085901b1660208201527fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b8216602284015283901b166032820152909b506042016200a27a565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff8916016200a623576040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca86906200a534908a906004016200addf565b606060405180830381865afa1580156200a550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a57691906200c940565b91965090945090506200a58a848c6200cf9b565b9a506200a598858d6200cf9b565b9b506200a5a6818b6200cfc7565b6040517fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b821660208401527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1660308401528e901b166034820152909a5060440160405160208183030381529060405298505b50505050505b96506200a0b8915050565b80515f036200a64e575f975095506200593a945050505050565b60019a909950975050505050505050565b6200a6696200a7ce565b565b6040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015f604051808303815f87803b1580156200a6de575f80fd5b505af115801562007fd6573d5f803e3d5ffd5b5f600282016200a704818486886200c8d0565b6200a70f916200cfe7565b60f01c95945050505050565b5f601082016200a72e818486886200c8d0565b6200a739916200d02e565b60801c95945050505050565b5f8383838181106200a75b576200a75b6200ba71565b919091013560f81c95945050505050565b634e487b715f52806020526024601cfd5b5f600482016200a790818486886200c8d0565b6200a79b916200c8f9565b60e01c95945050505050565b5f602082016200a7ba818486886200c8d0565b6200a7c5916200c986565b95945050505050565b6040516200a7dc906200ab25565b604051809103905ff0801580156200a7f6573d5f803e3d5ffd5b50601f60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550565b828054828255905f5260205f209081019282156200a88d579160200282015b828111156200a88d57825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039091161782556020909201916001909101906200a83e565b506200a89b9291506200ab33565b5090565b828054828255905f5260205f20906007016008900481019282156200a88d579160200282015f5b838211156200a90c57835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026200a8c6565b80156200a93e5782816101000a81549063ffffffff02191690556004016020816003010492830192600103026200a90c565b50506200a89b9291506200ab33565b615fc2806200d07683390190565b616193806201303883390190565b61196d80620191cb83390190565b615881806201ab3883390190565b612b7c80620203b983390190565b615cb28062022f3583390190565b613af98062028be783390190565b611b50806202c6e083390190565b614aae806202e23083390190565b6124708062032cde83390190565b60405180604001604052805f63ffffffff1681526020016200aa396040518060c001604052805f67ffffffffffffffff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b905290565b60405180604001604052805f63ffffffff1681526020016200aa3960405180604001604052805f63ffffffff1681526020015f6001600160a01b031681525090565b60405180604001604052805f63ffffffff1681526020016200aa396040518060c001604052805f6001600160a01b031681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b611e15806203514e83390190565b613f7b8062036f6383390190565b611b1c806203aede83390190565b61355f806203c9fa83390190565b6124be806203ff5983390190565b610aa9806204241783390190565b5b808211156200a89b575f81556001016200ab34565b63ffffffff81168114620044a3575f80fd5b6001600160a01b0381168114620044a3575f80fd5b5f80604083850312156200ab82575f80fd5b82356200ab8f816200ab49565b915060208301356200aba1816200ab5b565b809150509250929050565b5f8083601f8401126200abbd575f80fd5b50813567ffffffffffffffff8111156200abd5575f80fd5b6020830191508360208285010111156200593a575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156200ac40576200ac406200abed565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156200ac72576200ac726200abed565b604052919050565b5f67ffffffffffffffff8211156200ac96576200ac966200abed565b50601f01601f191660200190565b5f82601f8301126200acb4575f80fd5b81356200accb6200acc5826200ac7a565b6200ac46565b8181528460208386010111156200ace0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80606085870312156200ad10575f80fd5b843567ffffffffffffffff808211156200ad28575f80fd5b6200ad36888389016200abac565b909650945060208701359150808211156200ad4f575f80fd5b6200ad5d888389016200aca4565b935060408701359150808211156200ad73575f80fd5b506200ad82878288016200aca4565b91505092959194509250565b5f5b838110156200adaa5781810151838201526020016200ad90565b50505f910152565b5f81518084526200adcb8160208601602086016200ad8e565b601f01601f19169290920160200192915050565b602081525f62001b3660208301846200adb2565b60ff81168114620044a3575f80fd5b8035600281106200ae11575f80fd5b919050565b5f80604083850312156200ae28575f80fd5b82356200ae35816200adf3565b915062009d7b602084016200ae02565b5f815180845260208085019450602084015f5b838110156200ae7f5781516001600160a01b0316875295820195908201906001016200ae58565b509495945050505050565b602081525f62001b3660208301846200ae45565b5f805f606084860312156200aeb1575f80fd5b833567ffffffffffffffff8111156200aec8575f80fd5b6200aed6868287016200aca4565b93505060208401356200aee9816200adf3565b915060408401356200aefb816200adf3565b809150509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b848110156200af5557601f198684030189526200af428383516200adb2565b988401989250908301906001016200af23565b5090979650505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200aff3578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b031684528701518784018790526200afdf878501826200af06565b95880195935050908601906001016200af89565b509098975050505050505050565b5f805f805f805f60c0888a0312156200b018575f80fd5b87356200b025816200ab49565b965060208801356200b037816200ab5b565b9550604088013567ffffffffffffffff808211156200b054575f80fd5b6200b0628b838c016200aca4565b965060608a0135955060808a013591506200b07d826200ab5b565b90935060a089013590808211156200b093575f80fd5b506200b0a28a828b016200abac565b989b979a50959850939692959293505050565b5f80602083850312156200b0c7575f80fd5b823567ffffffffffffffff8111156200b0de575f80fd5b6200b0ec858286016200abac565b90969095509350505050565b61ffff81168114620044a3575f80fd5b5f80604083850312156200b11a575f80fd5b82356200b127816200b0f8565b946020939093013593505050565b5f805f604084860312156200b148575f80fd5b833567ffffffffffffffff808211156200b160575f80fd5b6200b16e878388016200abac565b909550935060208601359150808211156200b187575f80fd5b506200b196868287016200aca4565b9150509250925092565b5f67ffffffffffffffff8211156200b1bc576200b1bc6200abed565b5060051b60200190565b5f82601f8301126200b1d6575f80fd5b813560206200b1e96200acc5836200b1a0565b8083825260208201915060208460051b8701019350868411156200b20b575f80fd5b602086015b848110156200b2345780356200b226816200ab5b565b83529183019183016200b210565b509695505050505050565b5f80604083850312156200b251575f80fd5b823567ffffffffffffffff808211156200b269575f80fd5b6200b277868387016200b1c6565b93506020915081850135818111156200b28e575f80fd5b85019050601f810186136200b2a1575f80fd5b80356200b2b26200acc5826200b1a0565b81815260059190911b820183019083810190888311156200b2d1575f80fd5b928401925b828410156200b2fc5783356200b2ec816200ab49565b825292840192908401906200b2d6565b80955050505050509250929050565b5f815180845260208085019450602084015f5b838110156200ae7f5781517fffffffff0000000000000000000000000000000000000000000000000000000016875295820195908201906001016200b31e565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200aff3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815180518785526200b3ca888601826200adb2565b91890151858303868b01529190506200b3e481836200b30b565b9689019694505050908601906001016200b385565b5f805f604084860312156200b40c575f80fd5b833567ffffffffffffffff8111156200b423575f80fd5b6200b431868287016200abac565b909790965060209590950135949350505050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b60ff85168152606060208201525f6200b48c6060830185876200b445565b905082604083015295945050505050565b5f602082840312156200b4ae575f80fd5b813567ffffffffffffffff8111156200b4c5575f80fd5b6200b4d3848285016200b1c6565b949350505050565b5f805f805f60a086880312156200b4f0575f80fd5b85356200b4fd816200ab49565b9450602086013593506040860135925060608601356200b51d816200ab5b565b9150608086013567ffffffffffffffff8111156200b539575f80fd5b6200b547888289016200aca4565b9150509295509295909350565b602081525f62001b3660208301846200af06565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200aff3578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b031684528701518784018790526200b5e5878501826200b30b565b95880195935050908601906001016200b58f565b5f805f805f608086880312156200b60e575f80fd5b853567ffffffffffffffff808211156200b626575f80fd5b6200b63489838a016200abac565b909750955060208801359150808211156200b64d575f80fd5b506200b65c888289016200aca4565b9350506040860135915060608601356200b676816200ab5b565b809150509295509295909350565b5f602082840312156200b695575f80fd5b813562001b36816200ab5b565b5f80604083850312156200b6b4575f80fd5b82356200b127816200ab49565b5f805f606084860312156200b6d4575f80fd5b83356200b6e1816200adf3565b92506200b6f1602085016200ae02565b9150604084013567ffffffffffffffff8111156200b70d575f80fd5b6200b196868287016200b1c6565b6fffffffffffffffffffffffffffffffff81168114620044a3575f80fd5b5f602082840312156200b74a575f80fd5b813562001b36816200b71b565b5f805f80604085870312156200b76b575f80fd5b843567ffffffffffffffff808211156200b783575f80fd5b6200b791888389016200abac565b909650945060208701359150808211156200b7aa575f80fd5b506200b7b9878288016200abac565b95989497509550505050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526200b80960e08501826200adb2565b905060a083015184820360a08601526200b82482826200adb2565b91505060c083015184820360c08601526200a7c582826200adb2565b5f6001600160a01b038087168352808616602084015250836040830152608060608301526200b87360808301846200b7c5565b9695505050505050565b5f604082840312156200b88e575f80fd5b6040516040810181811067ffffffffffffffff821117156200b8b4576200b8b46200abed565b604052825181526020928301519281019290925250919050565b805180151581146200ae11575f80fd5b5f602082840312156200b8ef575f80fd5b62001b36826200b8ce565b838152606060208201525f6200b91460608301856200b7c5565b90506001600160a01b0383166040830152949350505050565b5f602082840312156200b93e575f80fd5b5051919050565b855163ffffffff1681526020808701519082015260408087015167ffffffffffffffff16908201526001600160a01b038516606082015283608082015260e060a08201525f6200b99960e08301856200adb2565b82810360c08401526200b9ad81856200adb2565b98975050505050505050565b600181811c908216806200b9ce57607f821691505b6020821081036200ba06577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff81811683821601908111156200246857620024686200ba0c565b60ff82811682821603908111156200246857620024686200ba0c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6001600160a01b03808a16835280891660208401525086604083015261ffff8616606083015260c060808301526200badc60c0830185876200b445565b82810360a08401526200baf081856200adb2565b9a9950505050505050505050565b80516200ae11816200ab5b565b5f80604083850312156200bb1d575f80fd5b82516200bb2a816200ab5b565b915062009d7b602084016200b8ce565b805167ffffffffffffffff811681146200ae11575f80fd5b80516200ae11816200adf3565b5f805f606084860312156200bb72575f80fd5b6200bb7d846200bb3a565b925060208401516200bb8f816200adf3565b60408501519092506200aefb816200adf3565b5f82601f8301126200bbb2575f80fd5b81516200bbc36200acc5826200ac7a565b8181528460208386010111156200bbd8575f80fd5b6200b4d38260208301602087016200ad8e565b5f602082840312156200bbfc575f80fd5b815167ffffffffffffffff8111156200bc13575f80fd5b6200b4d3848285016200bba2565b5f82601f8301126200bc31575f80fd5b815160206200bc446200acc5836200b1a0565b8083825260208201915060208460051b8701019350868411156200bc66575f80fd5b602086015b848110156200b2345780516200bc81816200ab5b565b83529183019183016200bc6b565b5f602082840312156200bca0575f80fd5b815167ffffffffffffffff808211156200bcb8575f80fd5b9083019060c082860312156200bccc575f80fd5b6200bcd66200ac1a565b6200bce1836200bb3a565b81526200bcf1602084016200bb52565b60208201526200bd04604084016200bb52565b60408201526200bd17606084016200bb52565b60608201526080830151828111156200bd2e575f80fd5b6200bd3c878286016200bc21565b60808301525060a0830151828111156200bd54575f80fd5b6200bd62878286016200bc21565b60a08301525095945050505050565b818382375f9101908152919050565b606081525f6200bd9460608301866200adb2565b905083602083015260ff83166040830152949350505050565b808201808211156200246857620024686200ba0c565b63ffffffff851681526001600160a01b0384166020820152608060408201525f6200bdf260808301856200adb2565b905082606083015295945050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200aff3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160a063ffffffff82511685526001600160a01b038983015116898601528782015181898701526200be90828701826200adb2565b9150506060808301518187015250608080830151925085820381870152506200beba81836200adb2565b9689019694505050908601906001016200be2a565b604081525f6200bee360408301856200adb2565b90508260208301529392505050565b5f602082840312156200bf03575f80fd5b815167ffffffffffffffff808211156200bf1b575f80fd5b9083019060c082860312156200bf2f575f80fd5b6200bf396200ac1a565b6200bce1836200bafe565b8281525f82516200bf5d8160208501602087016200ad8e565b919091016020019392505050565b606081525f6200bf7f60608301866200adb2565b60208301949094525060400152919050565b602081525f6200b4d36020830184866200b445565b5f602082840312156200bfb7575f80fd5b815162001b36816200ab5b565b5f602082840312156200bfd5575f80fd5b815162001b36816200ab49565b5f816200bff3576200bff36200ba0c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b604081525f6200c02d60408301856200adb2565b82810360208401526200a7c581856200adb2565b606081525f6200c05560608301866200adb2565b82810360208401526200c06981866200adb2565b905082810360408401526200b87381856200adb2565b608081525f6200c09360808301876200adb2565b82810360208401526200c0a781876200adb2565b9150508360408301526001600160a01b038316606083015295945050505050565b63ffffffff881681525f6001600160a01b03808916602084015260c060408401526200c0f860c08401896200adb2565b876060850152818716608085015283810360a08501526200c11b8186886200b445565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f6001600160a01b038089168352808816602084015260c060408401526200c18360c08401886200ae45565b8187166060850152818616608085015283810360a08501526200baf081866200ae45565b63ffffffff881681525f602060ff8916602084015260e060408401526200c1d260e08401896200ae45565b6001600160a01b038881166060860152848203608086015287548083525f8981526020808220940191905b818110156200c21d5784548416835260019485019492860192016200c1fd565b505067ffffffffffffffff881660a087015285810360c08701526200c24381886200ae45565b9d9c50505050505050505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200aff3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff168552880151888501889052805167ffffffffffffffff16888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200c31d6101008801836200ae45565b920151868303840160e08801529190506200c33981836200ae45565b978a01979550505091870191506001016200c27b565b602080825282518282018190525f919060409081850190868401855b828110156200c3b2578151805163ffffffff9081168652908701518051909116878601528601516001600160a01b031685850152606090930192908501906001016200c36b565b5091979650505050505050565b5f602082840312156200c3d0575f80fd5b815162001b36816200b71b565b6fffffffffffffffffffffffffffffffff8181168382160280821691908281146200c40c576200c40c6200ba0c565b505092915050565b602080825282518282018190525f919060409081850190868401855b828110156200c3b2578151805163ffffffff90811686529087015180516fffffffffffffffffffffffffffffffff16888701528088015167ffffffffffffffff1687870152860151166060850152608090930192908501906001016200c430565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200aff3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff16855288015188850188905280516001600160a01b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200c5596101008801836200ae45565b920151868303840160e08801529190506200c57581836200ae45565b978a01979550505091870191506001016200c4b8565b602080825282518282018190525f919060409081850190868401855b828110156200c3b2578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c090930192908501906001016200c5a7565b602080825282518282018190525f919060409081850190868401855b828110156200c3b2578151805163ffffffff1685528681015167ffffffffffffffff16878601528581015161ffff16868601526060908101516fffffffffffffffffffffffffffffffff1690850152608090930192908501906001016200c642565b602080825282518282018190525f919060409081850190868401855b828110156200c3b2578151805163ffffffff1685528601518685015292840192908501906001016200c6c0565b865163ffffffff1681526020808801519082015260408088015167ffffffffffffffff16908201526001600160a01b038616606082015284608082015260e060a08201525f6200c74260e0830185876200b445565b82810360c08401526200c75681856200adb2565b9998505050505050505050565b601f82111562003cf457805f5260205f20601f840160051c810160208510156200c78a5750805b601f840160051c820191505b8181101562002407575f81556001016200c796565b67ffffffffffffffff8311156200c7c6576200c7c66200abed565b6200c7de836200c7d783546200b9b9565b836200c763565b5f601f8411600181146200c831575f85156200c7fa5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b17835562002407565b5f83815260208120601f198716915b828110156200c86257868501358255602094850194600190920191016200c840565b50868210156200c89e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b838152826020820152606060408201525f6200a7c560608301846200adb2565b5f80858511156200c8df575f80fd5b838611156200c8ec575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156200c40c5760049490940360031b84901b1690921692915050565b5f805f606084860312156200c953575f80fd5b83516200c960816200b71b565b60208501519093506200c973816200ab49565b60408501519092506200aefb816200b71b565b8035602083101562002468577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156200c40c5760089490940360031b84901b1690921692915050565b608081525f6200ca4760808301600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200ca8481600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b0380851660408401528084166060840152509392505050565b608081525f6200cae460808301600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200ca8481600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b608081525f6200cb5e60808301600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200ca8481600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b606081525f6200cbd860608301600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200cc1581600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b038316604083015292915050565b608081525f6200cc6a60808301600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200ca8481600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b608081525f6200cce460808301600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200ca8481600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200aff3578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff168885015286015160608785018190526200cda9818601836200adb2565b9689019694505050908601906001016200cd48565b5f82516200cdd18184602087016200ad8e565b9190910192915050565b5f83516200cdee8184602088016200ad8e565b8351908301906200ce048183602088016200ad8e565b01949350505050565b5f805f606084860312156200ce20575f80fd5b83516200ce2d816200b0f8565b60208501519093506200c973816200b71b565b5f805f606084860312156200ce53575f80fd5b83516200ce60816200adf3565b602085015160409095015190969495509392505050565b5f80604083850312156200ce89575f80fd5b82516200ce96816200b71b565b6020939093015192949293505050565b5f80604083850312156200ceb8575f80fd5b82516200cec5816200b71b565b60208401519092506200aba1816200b71b565b5f80604083850312156200ceea575f80fd5b825167ffffffffffffffff808211156200cf02575f80fd5b6200cf10868387016200bba2565b935060208501519150808211156200cf26575f80fd5b506200cf35858286016200bba2565b9150509250929050565b5f805f606084860312156200cf52575f80fd5b83516200cf5f816200adf3565b602085015190935067ffffffffffffffff8111156200cf7c575f80fd5b6200cf8a868287016200bba2565b925050604084015190509250925092565b6fffffffffffffffffffffffffffffffff818116838216019080821115620045b457620045b46200ba0c565b63ffffffff818116838216019080821115620045b457620045b46200ba0c565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156200c40c5760029490940360031b84901b1690921692915050565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156200c40c5760109490940360031b84901b169092169291505056fe60c06040526001600d5534801562000015575f80fd5b5060405162005fc238038062005fc28339810160408190526200003891620002c2565b81816001600160a01b0381166200006957604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007481620000c8565b5063ffffffff166080526040516200008c90620002b4565b604051809103905ff080158015620000a6573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c09062000117565b505062000338565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200012162000284565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200016b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000191919062000310565b620001af5760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001e95760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002b25760405163118cdaa760e01b815233600482015260240162000060565b565b6102818062005d4183390190565b5f8060408385031215620002d4575f80fd5b825163ffffffff81168114620002e8575f80fd5b60208401519092506001600160a01b038116811462000305575f80fd5b809150509250929050565b5f6020828403121562000321575f80fd5b8151801515811462000331575f80fd5b9392505050565b60805160a0516159c46200037d5f395f61078601525f818161054301528181612d7701528181613782015281816137e801528181613f570152613fbd01526159c45ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b73578063ef667aa114610b92578063f2fde38b14610bdb578063f64be4c714610bfa575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b54575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614886565b610c2e565b005b348015610374575f80fd5b5061037d610d41565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c036600461492e565b610d71565b6103d86103d3366004614976565b6110f2565b60405161039d91906149c5565b3480156103f0575f80fd5b506103676103ff366004614a07565b611258565b34801561040f575f80fd5b5061042361041e366004614a72565b611315565b60405161039d9190614b2e565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614b57565b61142b565b34801561049b575f80fd5b506104636104aa366004614bb9565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614bf8565b6115ff565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614b57565b611694565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614c20565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614c39565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614c72565b611841565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614c8b565b61188f565b34801561067e575f80fd5b5061036761068d36600461492e565b611904565b34801561069d575f80fd5b506103676106ac366004614d7f565b611df9565b3480156106bc575f80fd5b506103676106cb366004614e59565b611e63565b3480156106db575f80fd5b5061070e6106ea366004614c72565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614c72565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f31565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004614ee3565b611f44565b3480156107ea575f80fd5b506106446107f9366004614f30565b612047565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120b2565b60405161039d9190614f59565b610367610849366004614fa5565b612112565b348015610859575f80fd5b50610367610868366004615049565b6122ce565b348015610878575f80fd5b5061060c610887366004614c39565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd366004615049565b6125c0565b3480156108dd575f80fd5b5061060c6108ec366004614c39565b612694565b3480156108fc575f80fd5b5061036761090b366004615089565b61272b565b34801561091b575f80fd5b5061036761092a3660046150b2565b612b2a565b34801561093a575f80fd5b506103676109493660046150cd565b612b42565b348015610959575f80fd5b50610463610968366004614c39565b612cd8565b348015610978575f80fd5b50610367610987366004615107565b612de6565b348015610997575f80fd5b506105ae6109a6366004614bf8565b61309d565b3480156109b6575f80fd5b506103676109c5366004614c20565b613123565b3480156109d5575f80fd5b506106446109e4366004614f30565b613198565b3480156109f4575f80fd5b50610463610a03366004615121565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614c20565b6131fc565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a366004615089565b613273565b348015610a8a575f80fd5b50610367610a99366004615121565b61356e565b348015610aa9575f80fd5b50610644610ab8366004614c20565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614bf8565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614976565b613690565b60405161039d9190615160565b348015610b4d575f80fd5b505f6105ae565b348015610b5f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b7e575f80fd5b50610367610b8d366004614c20565b6139b1565b348015610b9d575f80fd5b5061070e610bac366004614bf8565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610be6575f80fd5b50610367610bf5366004614c20565b613bab565b348015610c05575f80fd5b506105ae610c14366004614c72565b60096020525f90815260409020546001600160a01b031681565b610c7d86610c3f60208a018a614c72565b60208a0135610c5460608c0160408d01615177565b898989604051602001610c6993929190615190565b604051602081830303815290604052613c01565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cd1908b908a908a908a9033908b908b9060040161522a565b5f604051808303818588803b158015610ce8575f80fd5b505af1158015610cfa573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d30929190615280565b60405180910390a150505050505050565b5f80610d50600d546001141590565b610d5b575f80610d69565b610d69600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610dc4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e7d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3591906152d1565b6002811115610e4657610e466152a4565b03610e7d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f49576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610eef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1391906152fc565b610f49576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f5288613e3f565b5f610f5d89896115ff565b9150508015610f98576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03610ff6576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001015561108c565b43861161102f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b6110fa6147d8565b6111076020840184614c72565b336001600d5414611144576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d5561118390860160808701615317565b80156111985750600e546001600160a01b0316155b156111cf576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111db3388613ea8565b915091505f6111e73490565b90505f6112026111fd60a08b0160808c01615317565b614180565b90506112138460400151838361424a565b600e54604085015160200151611235916001600160a01b03169083868c6142b1565b6040840151516112479083858b6142de565b50506001600d555095945050505050565b61126185613e3f565b5f83838360405160200161127793929190615190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112d3866112b86020880188614c72565b60208801356112cd60608a0160408b01615177565b85613c01565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611305929190615280565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661136b576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113dc573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261142191908101906153f8565b9695505050505050565b61143485613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114bf576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061150b575080155b1561154e576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611305565b6001600160a01b038083165f90815260076020908152604080832063ffffffff86168452909152812054909116908161168d5763ffffffff83165f908152600a60205260409020546001600160a01b0316915081611689576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b61169d85613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611723576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114b6565b80158061176d57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117b0576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611305565b63ffffffff81165f908152600960205260408120546001600160a01b031615801590611889575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516118ee9a9998979695949392919061542a565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561193657506001600160a01b03811615155b1561196d576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a26575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119de91906152d1565b60028111156119ef576119ef6152a4565b03611a26576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611af2576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611a98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611abc91906152fc565b611af2576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611afb88613e3f565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b62576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d4f576001600160a01b0381161580611c1c57506001600160a01b038716155b15611c53576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c7a91906154bf565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d41918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611dee565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110df565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e4e9a999897969594939291906154d2565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611eb6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ebf85613e3f565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f0890889087908790600401615530565b5f604051808303815f87803b158015611f1f575f80fd5b505af1158015611dee573d5f803e3d5ffd5b611f39614308565b611f425f61434d565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fb2576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fc292919061567b565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161203891908890889088908890889061568a565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120ab9185918591859061207690850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166143b4565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561210857602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116120ea575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161215c908790879061567b565b604051809103902090508082146121a9576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114b6565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612230908e908d908c908c9033908d908d906004016156d2565b5f604051808303818588803b158015612247575f80fd5b505af1158015612259573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122ba94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561230057506001600160a01b03811615155b15612337576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b038116156123f1576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612385573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a991906152d1565b60028111156123ba576123ba6152a4565b036123f1576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124bd576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248791906152fc565b6124bd576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c687613e3f565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361252c576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d30565b5f805f6125cd86866115ff565b91509150816001600160a01b0316846001600160a01b0316036125f5576001925050506120ab565b5f81612628576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061263d565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126775750438160200151115b1561268857600193505050506120ab565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612723576001016126d0565b949350505050565b612733614308565b6001600160a01b0382165f90815260056020526040902054829060ff16612786576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561283f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f791906152d1565b6002811115612808576128086152a4565b0361283f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561290b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d591906152fc565b61290b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612966576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612a965763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a3b87436154bf565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b20565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b32614308565b612b3d83838361444c565b505050565b612b5982612b536020860186614c72565b336125c0565b612b8f576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bb790870187614c72565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612bf48484836143b4565b612c2a576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c3584848361446f565b612c6b576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c9783612c7c6020870187614c72565b6020870135612c916060890160408a01615177565b86614528565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612cca93929190615725565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d209067ffffffffffffffff16600161574d565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612dee614308565b6001600160a01b0381165f90815260056020526040902054819060ff16612e41576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612efb576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb391906152d1565b6002811115612ec457612ec46152a4565b03612efb576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fc7576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906152fc565b612fc7576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613020576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611305565b6001600160a01b038083165f90815260066020908152604080832063ffffffff861684529091529020541680611889575063ffffffff81165f908152600960205260409020546001600160a01b031680611889576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61312b614308565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b0381165f90815260016020908152604082206120ab918591859185906131c790850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff1661446f565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981910161318d565b6001600160a01b0382165f90815260056020526040902054829060ff166132c6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561337f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613313573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333791906152d1565b6002811115613348576133486152a4565b0361337f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561344b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156133f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061341591906152fc565b61344b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613453614308565b845f0361349d5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613522565b4385116134d6576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d30565b61357784613e3f565b613582848484612694565b61358d90600161574d565b67ffffffffffffffff168167ffffffffffffffff16146135e5576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612cca565b604080518082019091525f80825260208201526136b360a0840160808501615317565b80156136c85750600e546001600160a01b0316155b156136ff576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061372790870187614c72565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137629067ffffffffffffffff16600161574d565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137cd9190614c72565b63ffffffff168152602001866020013581526020016138c7847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061381a9190614c72565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b81526020016138d9604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139259050856109a66020890189614c72565b90506001600160a01b03811663d80e9bd98361394460608a018a61576e565b61395460a08c0160808d01615317565b6040518563ffffffff1660e01b815260040161397394939291906157cf565b6040805180830381865afa15801561398d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142191906158c3565b6139b9614308565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5891906152fc565b613a8e576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613ae0576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161318d565b613bb3614308565b6001600160a01b038116613bf5576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114b6565b613bfe8161434d565b50565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d5957600181015b8467ffffffffffffffff168167ffffffffffffffff1611613cf5576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613ced576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b600101613c4d565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613dec576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114b6565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613e7157506001600160a01b038181165f908152600f6020526040902054163314155b15613bfe576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613eb06147d8565b5f80613f3785613ec36020870187614c72565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fa29190614c72565b63ffffffff16815260200186602001358152602001613fef847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061381a9190614c72565b8152602001614001604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061404d9050876109a66020890189614c72565b90505f806001600160a01b038316634389e58f8561406e60608c018c61576e565b61407e60a08e0160808f01615317565b6040518563ffffffff1660e01b815260040161409d94939291906157cf565b5f604051808303815f875af11580156140b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526140fd91908101906158dd565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161413160608b018b61576e565b866040516141429493929190615929565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b5f811561424557600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156141e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061420a9190615969565b9050805f03614245576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b825182108061425c5750808360200151115b15612b3d57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114b6565b83156142c2576142c28583866145a7565b828410156142d7576142d785828686036145a7565b5050505050565b83156142ee576142ee82856145fb565b8284101561430257614302818585036145fb565b50505050565b5f546001600160a01b03163314611f42576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114b6565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061272357506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d9061440d908790600401615980565b602060405180830381865afa158015614428573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272391906152fc565b6001600160a01b03831661446457612b3d82826145fb565b612b3d8383836145a7565b5f67ffffffffffffffff821661448b6060860160408701615177565b67ffffffffffffffff16118061272357506001600160a01b0383165f90815260026020908152604082209082906144c490880188614c72565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f8660400160208101906145049190615177565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b8061455f576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6001600160a01b0382166145e7576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b3d6001600160a01b03841683836146d6565b6001600160a01b03821661463b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614684576040519150601f19603f3d011682016040523d82523d5f602084013e614689565b606091505b5050905080612b3d576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114b6565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b3d93879390925f9283929183919082885af180614772576040513d5f823e3d81fd5b50505f513d91508115614789578060011415614796565b6001600160a01b0384163b155b15614302576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114b6565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161481760405180604001604052805f81526020015f81525090565b905290565b5f6060828403121561482c575f80fd5b50919050565b80356001600160a01b0381168114614245575f80fd5b5f8083601f840112614858575f80fd5b50813567ffffffffffffffff81111561486f575f80fd5b60208301915083602082850101111561168d575f80fd5b5f805f805f805f60e0888a03121561489c575f80fd5b6148a6898961481c565b96506148b460608901614832565b95506080880135945060a088013567ffffffffffffffff808211156148d7575f80fd5b6148e38b838c01614848565b909650945060c08a01359150808211156148fb575f80fd5b506149088a828b01614848565b989b979a50959850939692959293505050565b803563ffffffff81168114614245575f80fd5b5f805f8060808587031215614941575f80fd5b61494a85614832565b93506149586020860161491b565b925061496660408601614832565b9396929550929360600135925050565b5f8060408385031215614987575f80fd5b823567ffffffffffffffff81111561499d575f80fd5b830160a081860312156149ae575f80fd5b91506149bc60208401614832565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614a00604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614a1b575f80fd5b614a2486614832565b9450614a33876020880161481c565b93506080860135925060a086013567ffffffffffffffff811115614a55575f80fd5b614a6188828901614848565b969995985093965092949392505050565b5f805f8060808587031215614a85575f80fd5b614a8e85614832565b9350614a9c60208601614832565b9250614aaa6040860161491b565b9150614ab86060860161491b565b905092959194509250565b5f5b83811015614add578181015183820152602001614ac5565b50505f910152565b5f8151808452614afc816020860160208601614ac3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120ab6020830184614ae5565b803567ffffffffffffffff81168114614245575f80fd5b5f805f805f60a08688031215614b6b575f80fd5b614b7486614832565b9450614b826020870161491b565b935060408601359250614b9760608701614b40565b949793965091946080013592915050565b803561ffff81168114614245575f80fd5b5f805f8060808587031215614bcc575f80fd5b614bd585614832565b9350614be360208601614832565b925060408501359150614ab860608601614ba8565b5f8060408385031215614c09575f80fd5b614c1283614832565b91506149bc6020840161491b565b5f60208284031215614c30575f80fd5b6120ab82614832565b5f805f60608486031215614c4b575f80fd5b614c5484614832565b9250614c626020850161491b565b9150604084013590509250925092565b5f60208284031215614c82575f80fd5b6120ab8261491b565b5f805f805f805f805f805f806101208d8f031215614ca7575f80fd5b614cb08d614832565b9b50614cbe60208e01614832565b9a5060408d01359950614cd360608e01614ba8565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614cfb575f80fd5b614d0b8e60c08f01358f01614848565b909650945067ffffffffffffffff60e08e01351115614d28575f80fd5b614d388e60e08f01358f01614848565b909450925067ffffffffffffffff6101008e01351115614d56575f80fd5b614d678e6101008f01358f01614848565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614d9a575f80fd5b614da48d8d61481c565b9a50614db260608d01614832565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614de2575f80fd5b614df28e60e08f01358f01614848565b90975095506101008d0135811015614e08575f80fd5b614e198e6101008f01358f01614848565b90955093506101208d0135811015614e2f575f80fd5b50614e418d6101208e01358e01614848565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614e6c575f80fd5b614e7585614832565b9350614e8360208601614832565b9250604085013567ffffffffffffffff80821115614e9f575f80fd5b818701915087601f830112614eb2575f80fd5b813581811115614ec0575f80fd5b8860208260051b8501011115614ed4575f80fd5b95989497505060200194505050565b5f805f805f60808688031215614ef7575f80fd5b614f0086614832565b945060208601359350614f1560408701614ba8565b9250606086013567ffffffffffffffff811115614a55575f80fd5b5f8060808385031215614f41575f80fd5b614f4b848461481c565b91506149bc60608401614832565b602080825282518282018190525f9190848201906040850190845b81811015614f995783516001600160a01b031683529284019291840191600101614f74565b50909695505050505050565b5f805f805f805f8060c0898b031215614fbc575f80fd5b614fc589614832565b9750614fd360208a01614832565b965060408901359550614fe860608a01614ba8565b9450608089013567ffffffffffffffff80821115615004575f80fd5b6150108c838d01614848565b909650945060a08b0135915080821115615028575f80fd5b506150358b828c01614848565b999c989b5096995094979396929594505050565b5f805f6060848603121561505b575f80fd5b61506484614832565b92506150726020850161491b565b915061508060408501614832565b90509250925092565b5f805f6060848603121561509b575f80fd5b6150a48461491b565b9250614c6260208501614832565b5f805f606084860312156150c4575f80fd5b6150a484614832565b5f805f60a084860312156150df575f80fd5b6150e9858561481c565b92506150f760608501614832565b9150608084013590509250925092565b5f8060408385031215615118575f80fd5b6149ae8361491b565b5f805f8060808587031215615134575f80fd5b61513d85614832565b935061514b6020860161491b565b925060408501359150614ab860608601614b40565b815181526020808301519082015260408101611889565b5f60208284031215615187575f80fd5b6120ab82614b40565b838152818360208301375f910160200190815292915050565b63ffffffff6151b78261491b565b1682526020810135602083015267ffffffffffffffff6151d960408301614b40565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b61523481896151a9565b86606082015260e060808201525f61525060e0830187896151e3565b6001600160a01b03861660a084015282810360c08401526152728185876151e3565b9a9950505050505050505050565b6080810161528e82856151a9565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f602082840312156152e1575f80fd5b8151600381106120ab575f80fd5b8015158114613bfe575f80fd5b5f6020828403121561530c575f80fd5b81516120ab816152ef565b5f60208284031215615327575f80fd5b81356120ab816152ef565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011261536e575f80fd5b815167ffffffffffffffff8082111561538957615389615332565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156153cf576153cf615332565b816040528381528660208588010111156153e7575f80fd5b611421846020830160208901614ac3565b5f60208284031215615408575f80fd5b815167ffffffffffffffff81111561541e575f80fd5b6127238482850161535f565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f61545960e08301888a6151e3565b82810360a084015261546c8187896151e3565b905082810360c08401526154818185876151e3565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561188957611889615492565b5f6101206154e0838e6151a9565b8b60608401528a60808401528960a08401528060c0840152615505818401898b6151e3565b905082810360e084015261551a8187896151e3565b90508281036101008401526154818185876151e3565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b8981101561566b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c36030181126155c4575f80fd5b8b0163ffffffff806155d58361491b565b168552806155e488840161491b565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811261561d575f80fd5b01858101903567ffffffffffffffff811115615637575f80fd5b803603821315615645575f80fd5b878986015261565788860182846151e3565b958701959450505090840190600101615564565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a060808301526156c660a0830184866151e3565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a060408401526156fb60a08401888a6151e3565b818716606085015283810360808501526157168186886151e3565b9b9a5050505050505050505050565b60a0810161573382866151a9565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614a0057614a00615492565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126157a1575f80fd5b83018035915067ffffffffffffffff8211156157bb575f80fd5b60200191503681900382131561168d575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f606086015161581f60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152615850610140840182614ae5565b905082810360208401526158658186886151e3565b915050612ddd604083018415159052565b5f60408284031215615886575f80fd5b6040516040810181811067ffffffffffffffff821117156158a9576158a9615332565b604052825181526020928301519281019290925250919050565b5f604082840312156158d3575f80fd5b6120ab8383615876565b5f80606083850312156158ee575f80fd5b6158f88484615876565b9150604083015167ffffffffffffffff811115615913575f80fd5b61591f8582860161535f565b9150509250929050565b606081525f61593b6060830187614ae5565b828103602084015261594e8186886151e3565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615979575f80fd5b5051919050565b6060810161188982846151a956fea2646970667358221220938f9466c98d432f294c8fa92afa649818bd8c0b591d10b7b71b464300e2a18764736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c6343000816003360e06040526001600d5534801562000015575f80fd5b5060405162006193380380620061938339810160408190526200003891620002ef565b828281816001600160a01b0381166200006b57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007681620000d9565b5063ffffffff166080526040516200008e90620002c5565b604051809103905ff080158015620000a8573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c29062000128565b50506001600160a01b031660c05250620003679050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200013262000295565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200017c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a291906200033f565b620001c05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001fa5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002c35760405163118cdaa760e01b815233600482015260240162000062565b565b6102818062005f1283390190565b80516001600160a01b0381168114620002ea575f80fd5b919050565b5f805f6060848603121562000302575f80fd5b835163ffffffff8116811462000316575f80fd5b92506200032660208501620002d3565b91506200033660408501620002d3565b90509250925092565b5f6020828403121562000350575f80fd5b8151801515811462000360575f80fd5b9392505050565b60805160a05160c051615b48620003ca5f395f8181610b500152818161314e015281816141df01526143f001525f61078601525f818161054301528181612d98015281816137b40152818161381a01528181613f860152613fec0152615b485ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b93578063ef667aa114610bb2578063f2fde38b14610bfb578063f64be4c714610c1a575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b74575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614a0a565b610c4e565b005b348015610374575f80fd5b5061037d610d61565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c0366004614ab2565b610d91565b6103d86103d3366004614afa565b611112565b60405161039d9190614b49565b3480156103f0575f80fd5b506103676103ff366004614b8b565b611279565b34801561040f575f80fd5b5061042361041e366004614bf6565b611336565b60405161039d9190614cb2565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614cdb565b61144c565b34801561049b575f80fd5b506104636104aa366004614d3d565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614d7c565b611620565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614cdb565b6116b5565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614da4565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614dbd565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614df6565b611862565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614e0f565b6118b0565b34801561067e575f80fd5b5061036761068d366004614ab2565b611925565b34801561069d575f80fd5b506103676106ac366004614f03565b611e1a565b3480156106bc575f80fd5b506103676106cb366004614fdd565b611e84565b3480156106db575f80fd5b5061070e6106ea366004614df6565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614df6565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f52565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004615067565b611f65565b3480156107ea575f80fd5b506106446107f93660046150b4565b612068565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120d3565b60405161039d91906150dd565b610367610849366004615129565b612133565b348015610859575f80fd5b506103676108683660046151cd565b6122ef565b348015610878575f80fd5b5061060c610887366004614dbd565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd3660046151cd565b6125e1565b3480156108dd575f80fd5b5061060c6108ec366004614dbd565b6126b5565b3480156108fc575f80fd5b5061036761090b36600461520d565b61274c565b34801561091b575f80fd5b5061036761092a366004615236565b612b4b565b34801561093a575f80fd5b50610367610949366004615251565b612b63565b348015610959575f80fd5b50610463610968366004614dbd565b612cf9565b348015610978575f80fd5b5061036761098736600461528b565b612e07565b348015610997575f80fd5b506105ae6109a6366004614d7c565b6130be565b3480156109b6575f80fd5b506103676109c5366004614da4565b613144565b3480156109d5575f80fd5b506106446109e43660046150b4565b6131c3565b3480156109f4575f80fd5b50610463610a033660046152a5565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614da4565b613227565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a36600461520d565b6132a5565b348015610a8a575f80fd5b50610367610a993660046152a5565b6135a0565b348015610aa9575f80fd5b50610644610ab8366004614da4565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614d7c565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614afa565b6136c2565b60405161039d91906152e4565b348015610b4d575f80fd5b507f00000000000000000000000000000000000000000000000000000000000000006105ae565b348015610b7f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b9e575f80fd5b50610367610bad366004614da4565b6139e3565b348015610bbd575f80fd5b5061070e610bcc366004614d7c565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c06575f80fd5b50610367610c15366004614da4565b613bdd565b348015610c25575f80fd5b506105ae610c34366004614df6565b60096020525f90815260409020546001600160a01b031681565b610c9d86610c5f60208a018a614df6565b60208a0135610c7460608c0160408d016152fb565b898989604051602001610c8993929190615314565b604051602081830303815290604052613c30565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cf1908b908a908a908a9033908b908b906004016153ae565b5f604051808303818588803b158015610d08575f80fd5b505af1158015610d1a573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d50929190615404565b60405180910390a150505050505050565b5f80610d70600d546001141590565b610d7b575f80610d89565b610d89600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610de4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e9d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e559190615455565b6002811115610e6657610e66615428565b03610e9d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f69576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610f0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f339190615480565b610f69576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f7288613e6e565b5f610f7d8989611620565b9150508015610fb8576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03611016576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600101556110ac565b43861161104f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b61111a61495c565b6111276020840184614df6565b336001600d5414611164576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d556111a39086016080870161549b565b80156111b85750600e546001600160a01b0316155b156111ef576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111fb3388613ed7565b915091505f6112086141af565b90505f61122361121e60a08b0160808c0161549b565b614255565b90506112348460400151838361431f565b600e54604085015160200151611256916001600160a01b03169083868c614386565b6040840151516112689083858b6143b3565b50506001600d555095945050505050565b61128285613e6e565b5f83838360405160200161129893929190615314565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112f4866112d96020880188614df6565b60208801356112ee60608a0160408b016152fb565b85613c30565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611326929190615404565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661138c576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113fd573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611442919081019061557c565b9695505050505050565b61145585613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114e0576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061152c575080155b1561156f576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611326565b6001600160a01b038083165f90815260076020908152604080832063ffffffff8616845290915281205490911690816116ae5763ffffffff83165f908152600a60205260409020546001600160a01b03169150816116aa576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b6116be85613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611744576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114d7565b80158061178e57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117d1576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611326565b63ffffffff81165f908152600960205260408120546001600160a01b0316158015906118aa575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d60405161190f9a999897969594939291906155ae565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561195757506001600160a01b03811615155b1561198e576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a47575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ff9190615455565b6002811115611a1057611a10615428565b03611a47576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611b13576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611ab9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611add9190615480565b611b13576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b1c88613e6e565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b83576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d70576001600160a01b0381161580611c3d57506001600160a01b038716155b15611c74576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c9b9190615643565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d62918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611e0f565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110ff565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e6f9a99989796959493929190615656565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611ed7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ee085613e6e565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f29908890879087906004016156b4565b5f604051808303815f87803b158015611f40575f80fd5b505af1158015611e0f573d5f803e3d5ffd5b611f5a61441e565b611f635f614463565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fd3576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fe39291906157ff565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161205991908890889088908890889061580e565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120cc9185918591859061209790850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166144ca565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561212957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161210b575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161217d90879087906157ff565b604051809103902090508082146121ca576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114d7565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612251908e908d908c908c9033908d908d90600401615856565b5f604051808303818588803b158015612268575f80fd5b505af115801561227a573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122db94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561232157506001600160a01b03811615155b15612358576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612412576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ca9190615455565b60028111156123db576123db615428565b03612412576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124de576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612484573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124a89190615480565b6124de576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124e787613e6e565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361254d576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d50565b5f805f6125ee8686611620565b91509150816001600160a01b0316846001600160a01b031603612616576001925050506120cc565b5f81612649576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061265e565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126985750438160200151115b156126a957600193505050506120cc565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612744576001016126f1565b949350505050565b61275461441e565b6001600160a01b0382165f90815260056020526040902054829060ff166127a7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615612860575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128189190615455565b600281111561282957612829615428565b03612860576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561292c576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f69190615480565b61292c576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612987576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612ab75763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a5c8743615643565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b41565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b5361441e565b612b5e838383614562565b505050565b612b7a82612b746020860186614df6565b336125e1565b612bb0576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bd890870187614df6565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612c158484836144ca565b612c4b576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c56848483614585565b612c8c576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cb883612c9d6020870187614df6565b6020870135612cb26060890160408a016152fb565b8661463e565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612ceb939291906158a9565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d419067ffffffffffffffff1660016158d1565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612e0f61441e565b6001600160a01b0381165f90815260056020526040902054819060ff16612e62576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612f1c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed49190615455565b6002811115612ee557612ee5615428565b03612f1c576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fe8576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fb29190615480565b612fe8576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613041576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611326565b6001600160a01b038083165f90815260066020908152604080832063ffffffff8616845290915290205416806118aa575063ffffffff81165f908152600960205260409020546001600160a01b0316806118aa576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61314c61441e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036131b7576040517f10647d0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131c0816146bd565b50565b6001600160a01b0381165f90815260016020908152604082206120cc918591859185906131f290850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff16614585565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d798398191015b60405180910390a150565b6001600160a01b0382165f90815260056020526040902054829060ff166132f8576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b038116156133b1575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133699190615455565b600281111561337a5761337a615428565b036133b1576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561347d576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015613423573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134479190615480565b61347d576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61348561441e565b845f036134cf5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613554565b438511613508576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d50565b6135a984613e6e565b6135b48484846126b5565b6135bf9060016158d1565b67ffffffffffffffff168167ffffffffffffffff1614613617576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612ceb565b604080518082019091525f80825260208201526136e560a084016080850161549b565b80156136fa5750600e546001600160a01b0316155b15613731576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061375990870187614df6565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137949067ffffffffffffffff1660016158d1565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137ff9190614df6565b63ffffffff168152602001866020013581526020016138f9847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061384c9190614df6565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b815260200161390b60408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139579050856109a66020890189614df6565b90506001600160a01b03811663d80e9bd98361397660608a018a6158f2565b61398660a08c0160808d0161549b565b6040518563ffffffff1660e01b81526004016139a59493929190615953565b6040805180830381865afa1580156139bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114429190615a47565b6139eb61441e565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a8a9190615480565b613ac0576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613b12576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161329a565b613be561441e565b6001600160a01b038116613c27576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114d7565b6131c081614463565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d8857600181015b8467ffffffffffffffff168167ffffffffffffffff1611613d24576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613d1c576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b600101613c7c565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613e1b576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114d7565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613ea057506001600160a01b038181165f908152600f6020526040902054163314155b156131c0576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613edf61495c565b5f80613f6685613ef26020870187614df6565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fd19190614df6565b63ffffffff1681526020018660200135815260200161401e847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061384c9190614df6565b815260200161403060408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061407c9050876109a66020890189614df6565b90505f806001600160a01b038316634389e58f8561409d60608c018c6158f2565b6140ad60a08e0160808f0161549b565b6040518563ffffffff1660e01b81526004016140cc9493929190615953565b5f604051808303815f875af11580156140e7573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261412c9190810190615a61565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161416060608b018b6158f2565b866040516141719493929190615aad565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561422c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142509190615aed565b905090565b5f811561431a57600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156142bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142df9190615aed565b9050805f0361431a576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b82518210806143315750808360200151115b15612b5e57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114d7565b83156143975761439785838661472b565b828410156143ac576143ac858286860361472b565b5050505050565b34156143eb576040517f9a317a5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144187f000000000000000000000000000000000000000000000000000000000000000085858585614386565b50505050565b5f546001600160a01b03163314611f63576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114d7565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061274457506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d90614523908790600401615b04565b602060405180830381865afa15801561453e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127449190615480565b6001600160a01b03831661457a57612b5e828261477f565b612b5e83838361472b565b5f67ffffffffffffffff82166145a160608601604087016152fb565b67ffffffffffffffff16118061274457506001600160a01b0383165f90815260026020908152604082209082906145da90880188614df6565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f86604001602081019061461a91906152fb565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b80614675576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6146c561441e565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a623969060200161329a565b6001600160a01b03821661476b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b5e6001600160a01b038416838361485a565b6001600160a01b0382166147bf576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614808576040519150601f19603f3d011682016040523d82523d5f602084013e61480d565b606091505b5050905080612b5e576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114d7565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b5e93879390925f9283929183919082885af1806148f6576040513d5f823e3d81fd5b50505f513d9150811561490d57806001141561491a565b6001600160a01b0384163b155b15614418576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114d7565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161499b60405180604001604052805f81526020015f81525090565b905290565b5f606082840312156149b0575f80fd5b50919050565b80356001600160a01b038116811461431a575f80fd5b5f8083601f8401126149dc575f80fd5b50813567ffffffffffffffff8111156149f3575f80fd5b6020830191508360208285010111156116ae575f80fd5b5f805f805f805f60e0888a031215614a20575f80fd5b614a2a89896149a0565b9650614a38606089016149b6565b95506080880135945060a088013567ffffffffffffffff80821115614a5b575f80fd5b614a678b838c016149cc565b909650945060c08a0135915080821115614a7f575f80fd5b50614a8c8a828b016149cc565b989b979a50959850939692959293505050565b803563ffffffff8116811461431a575f80fd5b5f805f8060808587031215614ac5575f80fd5b614ace856149b6565b9350614adc60208601614a9f565b9250614aea604086016149b6565b9396929550929360600135925050565b5f8060408385031215614b0b575f80fd5b823567ffffffffffffffff811115614b21575f80fd5b830160a08186031215614b32575f80fd5b9150614b40602084016149b6565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614b84604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614b9f575f80fd5b614ba8866149b6565b9450614bb787602088016149a0565b93506080860135925060a086013567ffffffffffffffff811115614bd9575f80fd5b614be5888289016149cc565b969995985093965092949392505050565b5f805f8060808587031215614c09575f80fd5b614c12856149b6565b9350614c20602086016149b6565b9250614c2e60408601614a9f565b9150614c3c60608601614a9f565b905092959194509250565b5f5b83811015614c61578181015183820152602001614c49565b50505f910152565b5f8151808452614c80816020860160208601614c47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120cc6020830184614c69565b803567ffffffffffffffff8116811461431a575f80fd5b5f805f805f60a08688031215614cef575f80fd5b614cf8866149b6565b9450614d0660208701614a9f565b935060408601359250614d1b60608701614cc4565b949793965091946080013592915050565b803561ffff8116811461431a575f80fd5b5f805f8060808587031215614d50575f80fd5b614d59856149b6565b9350614d67602086016149b6565b925060408501359150614c3c60608601614d2c565b5f8060408385031215614d8d575f80fd5b614d96836149b6565b9150614b4060208401614a9f565b5f60208284031215614db4575f80fd5b6120cc826149b6565b5f805f60608486031215614dcf575f80fd5b614dd8846149b6565b9250614de660208501614a9f565b9150604084013590509250925092565b5f60208284031215614e06575f80fd5b6120cc82614a9f565b5f805f805f805f805f805f806101208d8f031215614e2b575f80fd5b614e348d6149b6565b9b50614e4260208e016149b6565b9a5060408d01359950614e5760608e01614d2c565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614e7f575f80fd5b614e8f8e60c08f01358f016149cc565b909650945067ffffffffffffffff60e08e01351115614eac575f80fd5b614ebc8e60e08f01358f016149cc565b909450925067ffffffffffffffff6101008e01351115614eda575f80fd5b614eeb8e6101008f01358f016149cc565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614f1e575f80fd5b614f288d8d6149a0565b9a50614f3660608d016149b6565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614f66575f80fd5b614f768e60e08f01358f016149cc565b90975095506101008d0135811015614f8c575f80fd5b614f9d8e6101008f01358f016149cc565b90955093506101208d0135811015614fb3575f80fd5b50614fc58d6101208e01358e016149cc565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614ff0575f80fd5b614ff9856149b6565b9350615007602086016149b6565b9250604085013567ffffffffffffffff80821115615023575f80fd5b818701915087601f830112615036575f80fd5b813581811115615044575f80fd5b8860208260051b8501011115615058575f80fd5b95989497505060200194505050565b5f805f805f6080868803121561507b575f80fd5b615084866149b6565b94506020860135935061509960408701614d2c565b9250606086013567ffffffffffffffff811115614bd9575f80fd5b5f80608083850312156150c5575f80fd5b6150cf84846149a0565b9150614b40606084016149b6565b602080825282518282018190525f9190848201906040850190845b8181101561511d5783516001600160a01b0316835292840192918401916001016150f8565b50909695505050505050565b5f805f805f805f8060c0898b031215615140575f80fd5b615149896149b6565b975061515760208a016149b6565b96506040890135955061516c60608a01614d2c565b9450608089013567ffffffffffffffff80821115615188575f80fd5b6151948c838d016149cc565b909650945060a08b01359150808211156151ac575f80fd5b506151b98b828c016149cc565b999c989b5096995094979396929594505050565b5f805f606084860312156151df575f80fd5b6151e8846149b6565b92506151f660208501614a9f565b9150615204604085016149b6565b90509250925092565b5f805f6060848603121561521f575f80fd5b61522884614a9f565b9250614de6602085016149b6565b5f805f60608486031215615248575f80fd5b615228846149b6565b5f805f60a08486031215615263575f80fd5b61526d85856149a0565b925061527b606085016149b6565b9150608084013590509250925092565b5f806040838503121561529c575f80fd5b614b3283614a9f565b5f805f80608085870312156152b8575f80fd5b6152c1856149b6565b93506152cf60208601614a9f565b925060408501359150614c3c60608601614cc4565b8151815260208083015190820152604081016118aa565b5f6020828403121561530b575f80fd5b6120cc82614cc4565b838152818360208301375f910160200190815292915050565b63ffffffff61533b82614a9f565b1682526020810135602083015267ffffffffffffffff61535d60408301614cc4565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6153b8818961532d565b86606082015260e060808201525f6153d460e083018789615367565b6001600160a01b03861660a084015282810360c08401526153f6818587615367565b9a9950505050505050505050565b60808101615412828561532d565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60208284031215615465575f80fd5b8151600381106120cc575f80fd5b80151581146131c0575f80fd5b5f60208284031215615490575f80fd5b81516120cc81615473565b5f602082840312156154ab575f80fd5b81356120cc81615473565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126154f2575f80fd5b815167ffffffffffffffff8082111561550d5761550d6154b6565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715615553576155536154b6565b8160405283815286602085880101111561556b575f80fd5b611442846020830160208901614c47565b5f6020828403121561558c575f80fd5b815167ffffffffffffffff8111156155a2575f80fd5b612744848285016154e3565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f6155dd60e08301888a615367565b82810360a08401526155f0818789615367565b905082810360c0840152615605818587615367565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156118aa576118aa615616565b5f610120615664838e61532d565b8b60608401528a60808401528960a08401528060c0840152615689818401898b615367565b905082810360e084015261569e818789615367565b9050828103610100840152615605818587615367565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b898110156157ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c3603018112615748575f80fd5b8b0163ffffffff8061575983614a9f565b16855280615768888401614a9f565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181126157a1575f80fd5b01858101903567ffffffffffffffff8111156157bb575f80fd5b8036038213156157c9575f80fd5b87898601526157db8886018284615367565b9587019594505050908401906001016156e8565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a0608083015261584a60a083018486615367565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a0604084015261587f60a08401888a615367565b8187166060850152838103608085015261589a818688615367565b9b9a5050505050505050505050565b60a081016158b7828661532d565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614b8457614b84615616565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615925575f80fd5b83018035915067ffffffffffffffff82111561593f575f80fd5b6020019150368190038213156116ae575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f60608601516159a360c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e06101208401526159d4610140840182614c69565b905082810360208401526159e9818688615367565b915050612dfe604083018415159052565b5f60408284031215615a0a575f80fd5b6040516040810181811067ffffffffffffffff82111715615a2d57615a2d6154b6565b604052825181526020928301519281019290925250919050565b5f60408284031215615a57575f80fd5b6120cc83836159fa565b5f8060608385031215615a72575f80fd5b615a7c84846159fa565b9150604083015167ffffffffffffffff811115615a97575f80fd5b615aa3858286016154e3565b9150509250929050565b606081525f615abf6060830187614c69565b8281036020840152615ad2818688615367565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615afd575f80fd5b5051919050565b606081016118aa828461532d56fea264697066735822122068baa86dcd9bd8142959c16f23b905a6a20b9dbc18984656c1ecce183a4b190464736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c63430008160033608060405234801561000f575f80fd5b506040516200196d3803806200196d83398101604081905261003091610108565b338061005557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005e816100b9565b506001600160a01b03165f908152600260205260409020805460ff1916600190811790915580546001600160801b03191668056bc75e2d6310000017905560058054602f60801b6001600160801b0391909116179055610135565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610118575f80fd5b81516001600160a01b038116811461012e575f80fd5b9392505050565b61182a80620001435f395ff3fe608060405260043610610178575f3560e01c80638ca2fb08116100d1578063d350ad251161007c578063e0ad121a11610057578063e0ad121a14610607578063f2fde38b146106ba578063fd9be522146106d9575f80fd5b8063d350ad25146104d4578063da26663a146104f3578063dbbb4155146105e8575f80fd5b8063c1723a1d116100ac578063c1723a1d1461045f578063c184032714610472578063cd68b79b14610498575f80fd5b80638ca2fb08146103b55780638da5cb5b146103f357806392807f581461041c575f80fd5b80635d6d7ccb116101315780637bc3c9ab1161010c5780637bc3c9ab146102fa5780637dc438a41461033f57806388a4124c1461035e575f80fd5b80635d6d7ccb146102765780635e280f1114610295578063715018a6146102e6575f80fd5b80633161b7f6116101615780633161b7f6146101d257806336a5beba146101f157806352a7251014610257575f80fd5b806311f2c3431461017c5780632f7cb0b4146101b1575b5f80fd5b348015610187575f80fd5b5061019e61019636600461145a565b5f9392505050565b6040519081526020015b60405180910390f35b3480156101bc575f80fd5b506101d06101cb3660046114a9565b6106f8565b005b3480156101dd575f80fd5b506101d06101ec3660046114c9565b610735565b3480156101fc575f80fd5b506040805180820182525f8082526020918201528151808301835260045467ffffffffffffffff811680835263ffffffff680100000000000000009092048216928401928352845190815291511691810191909152016101a8565b348015610262575f80fd5b506101d061027136600461155b565b610901565b348015610281575f80fd5b506101d06102903660046114a9565b61095e565b3480156102a0575f80fd5b506006546102c19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a8565b3480156102f1575f80fd5b506101d0610a23565b348015610305575f80fd5b506103196103143660046115a5565b610a36565b604080519283526fffffffffffffffffffffffffffffffff9091166020830152016101a8565b34801561034a575f80fd5b506101d06103593660046115c0565b610ad0565b348015610369575f80fd5b5061037d61037836600461145a565b610bd9565b604080519485526fffffffffffffffffffffffffffffffff9384166020860152918316918401919091521660608201526080016101a8565b3480156103c0575f80fd5b506103e36103cf3660046115d6565b60026020525f908152604090205460ff1681565b60405190151581526020016101a8565b3480156103fe575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166102c1565b348015610427575f80fd5b506005546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff90911681526020016101a8565b61037d61046d36600461145a565b610bf9565b34801561047d575f80fd5b506001546fffffffffffffffffffffffffffffffff1661043e565b3480156104a3575f80fd5b5060055461043e9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b3480156104df575f80fd5b506101d06104ee3660046114a9565b610c29565b3480156104fe575f80fd5b506105a461050d3660046115ef565b60408051606080820183525f808352602080840182905292840181905263ffffffff94851681526003835283902083519182018452546fffffffffffffffffffffffffffffffff81168252700100000000000000000000000000000000810467ffffffffffffffff169282019290925278010000000000000000000000000000000000000000000000009091049092169082015290565b6040805182516fffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff16908201529181015163ffffffff16908201526060016101a8565b3480156105f3575f80fd5b506101d06106023660046115d6565b610c74565b348015610612575f80fd5b506105a4610621366004611608565b60408051606080820183525f808352602080840182905292840181905261ffff949094168452600382529282902082519384018352546fffffffffffffffffffffffffffffffff8116845267ffffffffffffffff700100000000000000000000000000000000820416918401919091527801000000000000000000000000000000000000000000000000900463ffffffff169082015290565b3480156106c5575f80fd5b506101d06106d43660046115d6565b610cc3565b3480156106e4575f80fd5b506101d06106f3366004611621565b610d26565b610700610d3c565b600580546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055565b336107545f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146107b757335f9081526002602052604090205460ff166107b7576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156108fc57368383838181106107d4576107d4611649565b6080029190910191506108f390506107ef60208301836115ef565b6108013684900384016020850161168d565b805160208083015160409384015184516060810186526fffffffffffffffffffffffffffffffff948516815267ffffffffffffffff92831681850190815263ffffffff9283168288019081529783165f908152600390955295909320925183549551965194167fffffffffffffffff000000000000000000000000000000000000000000000000909516949094177001000000000000000000000000000000009590911694909402939093177fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000009190921602179055565b506001016107b9565b505050565b610909610d3c565b73ffffffffffffffffffffffffffffffffffffffff919091165f90815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b3361097d5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146109e057335f9081526002602052604090205460ff166109e0576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610a2b610d3c565b610a345f610d8e565b565b5f808461ffff16606e1480610a5057508461ffff1661279f145b80610a6057508461ffff16614eaf145b15610a7d57610a748561ffff168585610e02565b91509150610ac8565b8461ffff16606f1480610a9557508461ffff16612794145b80610aa557508461ffff16614ea4145b15610ab957610a748561ffff168585610f5c565b610a748561ffff168585611104565b935093915050565b33610aef5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610b5257335f9081526002602052604090205460ff16610b52576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b626107ef60208301836115ef565b5f610b7360a083016080840161171c565b90505f610b8660c0840160a085016115ef565b6004805463ffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090921667ffffffffffffffff90941693909317179091555050565b5f805f80610be88787876111d7565b935093509350935093509350935093565b5f80808080610c0c565b60405180910390fd5b610c178888886111d7565b94509450945094505093509350935093565b610c31610d3c565b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610c7c610d3c565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ccb610d3c565b73ffffffffffffffffffffffffffffffffffffffff8116610d1a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610c03565b610d2381610d8e565b50565b610d2e610d3c565b610d3882826112ad565b5050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610a34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c03565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b63ffffffff8381165f90815260036020526040812060045460055492938493849268010000000000000000900490911690606490610e669070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1689611762565b610e7091906117ac565b610e7a9190611762565b82549091505f90610ead907801000000000000000000000000000000000000000000000000900463ffffffff1688611762565b83546004549192505f9167ffffffffffffffff70010000000000000000000000000000000090920482169184918691610ee791168b6117bf565b610ef191906117bf565b610efb91906117bf565b610f059190611762565b60015485549192506fffffffffffffffffffffffffffffffff90811691610f2d911683611762565b610f3791906117ac565b935493996fffffffffffffffffffffffffffffffff9094169850929650505050505050565b5f805f610f68866113af565b63ffffffff8082165f9081526003602052604081208054939450929091610fac91780100000000000000000000000000000000000000000000000090041688611762565b610fb890610c746117bf565b82549091505f90610fe790700100000000000000000000000000000000900467ffffffffffffffff1683611762565b63ffffffff808b165f908152600360205260408120805493945092909161102b9178010000000000000000000000000000000000000000000000009004168b611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661105a8b846117bf565b6110649190611762565b60015487549192505f916fffffffffffffffffffffffffffffffff9182169161108e911687611762565b61109891906117ac565b60015485549192505f916fffffffffffffffffffffffffffffffff918216916110c2911685611762565b6110cc91906117ac565b90505f6110d982846117bf565b9554959f6fffffffffffffffffffffffffffffffff9096169e50949c50505050505050505050505050565b63ffffffff8084165f908152600360205260408120805491928392839161114891780100000000000000000000000000000000000000000000000090041687611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661117787846117bf565b6111819190611762565b60015484549192506fffffffffffffffffffffffffffffffff908116916111a9911683611762565b6111b391906117ac565b925492986fffffffffffffffffffffffffffffffff90931697509195505050505050565b5f808080806111e8617530896117d2565b90508063ffffffff16606e148061120657508063ffffffff1661279f145b8061121857508063ffffffff16614eaf145b1561123257611228818888610e02565b9095509350611281565b8063ffffffff16606f148061124e57508063ffffffff16612794145b8061126057508063ffffffff16614ea4145b1561127057611228818888610f5c565b61127b818888611104565b90955093505b505060015460055493979296506fffffffffffffffffffffffffffffffff908116955090921692509050565b73ffffffffffffffffffffffffffffffffffffffff82166112fa576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114611350576040519150601f19603f3d011682016040523d82523d5f602084013e611355565b606091505b50509050806108fc576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c03565b5f806113bd617530846117d2565b90508063ffffffff16606f036113d65750606592915050565b8063ffffffff16612794036113ef575061278992915050565b8063ffffffff16614ea4036114085750614e9992915050565b6040517ff42c33dc00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c03565b803563ffffffff81168114611455575f80fd5b919050565b5f805f6060848603121561146c575f80fd5b61147584611442565b95602085013595506040909401359392505050565b80356fffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f602082840312156114b9575f80fd5b6114c28261148a565b9392505050565b5f80602083850312156114da575f80fd5b823567ffffffffffffffff808211156114f1575f80fd5b818501915085601f830112611504575f80fd5b813581811115611512575f80fd5b8660208260071b8501011115611526575f80fd5b60209290920196919550909350505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f806040838503121561156c575f80fd5b61157583611538565b915060208301358015158114611589575f80fd5b809150509250929050565b803561ffff81168114611455575f80fd5b5f805f606084860312156115b7575f80fd5b61147584611594565b5f60c082840312156115d0575f80fd5b50919050565b5f602082840312156115e6575f80fd5b6114c282611538565b5f602082840312156115ff575f80fd5b6114c282611442565b5f60208284031215611618575f80fd5b6114c282611594565b5f8060408385031215611632575f80fd5b61163b83611538565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b803567ffffffffffffffff81168114611455575f80fd5b5f6060828403121561169d575f80fd5b6040516060810181811067ffffffffffffffff821117156116e5577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040526116f18361148a565b81526116ff60208401611676565b602082015261171060408401611442565b60408201529392505050565b5f6020828403121561172c575f80fd5b6114c282611676565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761177957611779611735565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826117ba576117ba61177f565b500490565b8082018082111561177957611779611735565b5f63ffffffff808416806117e8576117e861177f565b9216919091069291505056fea2646970667358221220057b4584fe743c800fee37c9f14cc5705300ed67e417991ba4a7213c92a3bfad64736f6c6343000816003360e060405234801562000010575f80fd5b506040516200588138038062005881833981016040819052620000339162000185565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001cf565b6001600160a01b03821660805263ffffffff811660a05283833380620000d957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000e4816200011e565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b03989098169790971790965550620001fb945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811462000182575f80fd5b50565b5f805f806080858703121562000199575f80fd5b8451620001a6816200016d565b6020860151909450620001b9816200016d565b6040860151606090960151949790965092505050565b5f60208284031215620001e0575f80fd5b815163ffffffff81168114620001f4575f80fd5b9392505050565b60805160a05160c0516156426200023f5f395f8181612458015261264f01525f50505f81816107f80152818161093b015281816116c30152611daa01526156425ff3fe608060405260043610610186575f3560e01c806361d027b3116100d1578063d15b0d491161007c578063f2fde38b11610057578063f2fde38b14610528578063faaebd2114610547578063fd9be52214610580575f80fd5b8063d15b0d49146104be578063d80e9bd9146104dd578063f0f4426014610509575f80fd5b80638da5cb5b116100ac5780638da5cb5b1461044a5780639c33abf714610473578063c14c43491461049f575f80fd5b806361d027b3146103eb5780636750cd4c14610417578063715018a614610436575f80fd5b806329460b0b1161013157806343ea4fa91161010c57806343ea4fa9146103145780634d9632001461033357806354fd4d50146103c0575f80fd5b806329460b0b1461029c57806339e3f938146102bb5780634389e58f146102e7575f80fd5b80631881d94d116101615780631881d94d14610242578063200175f71461025c57806320efd7221461027d575f80fd5b806301ffc9a7146101915780630e97289b146101c5578063188183f414610216575f80fd5b3661018d57005b5f80fd5b34801561019c575f80fd5b506101b06101ab3660046141f9565b61059f565b60405190151581526020015b60405180910390f35b3480156101d0575f80fd5b506006546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b348015610221575f80fd5b50610235610230366004614285565b610683565b6040516101bc91906142bc565b34801561024d575f80fd5b505f6040516101bc91906142ef565b348015610267575f80fd5b5061027b61027636600461432e565b61078e565b005b348015610288575f80fd5b5061027b6102973660046143ad565b610939565b3480156102a7575f80fd5b5061027b6102b63660046143fe565b610aec565b3480156102c6575f80fd5b506102da6102d5366004614285565b610ccf565b6040516101bc91906144fe565b3480156102f2575f80fd5b5061030661030136600461451f565b610e6a565b6040516101bc929190614631565b34801561031f575f80fd5b506102da61032e366004614285565b610f1f565b34801561033e575f80fd5b5061038f61034d366004614285565b600460209081525f928352604080842090915290825290205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101bc565b3480156103cb575f80fd5b5060408051600381525f60208201526002918101919091526060016101bc565b3480156103f6575f80fd5b506003546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b348015610422575f80fd5b506101b0610431366004614654565b6112d0565b348015610441575f80fd5b5061027b6112da565b348015610455575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166101f1565b34801561047e575f80fd5b5061049261048d36600461466f565b6112ed565b6040516101bc91906146b7565b3480156104aa575f80fd5b5061027b6104b93660046146c9565b6113d4565b3480156104c9575f80fd5b5061027b6104d8366004614738565b611547565b3480156104e8575f80fd5b506104fc6104f736600461451f565b6115d5565b6040516101bc919061474f565b348015610514575f80fd5b5061027b610523366004614766565b611643565b348015610533575f80fd5b5061027b610542366004614766565b611657565b348015610552575f80fd5b50610572610561366004614766565b60056020525f908152604090205481565b6040519081526020016101bc565b34801561058b575f80fd5b5061027b61059a366004614781565b6116b7565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061063157507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b8061067d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080518082019091525f808252602082015263ffffffff8083165f8181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845260048352818420948452939091528120805492939092169081900361071257825463ffffffff16610714565b805b63ffffffff1684528154640100000000900473ffffffffffffffffffffffffffffffffffffffff1680610766578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16610768565b805b73ffffffffffffffffffffffffffffffffffffffff166020860152509295945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146107df576040517f885762a700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061088391906147ab565b73ffffffffffffffffffffffffffffffffffffffff16036108d0576040517fe695d04400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108db8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109a8576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610ae657368383838181106109c5576109c56147c6565b90506020028101906109d791906147f3565b90506109ee6109e96020830183614654565b611821565b6001610a006040830160208401614654565b63ffffffff1603610a4057610a3b610a1b6020830183614654565b86610a29604085018561482f565b810190610a369190614958565b611868565b610add565b6002610a526040830160208401614654565b63ffffffff1603610a8d57610a3b610a6d6020830183614654565b86610a7b604085018561482f565b810190610a889190614b11565b611914565b610a9d6040820160208301614654565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b506001016109aa565b50505050565b610af461195d565b5f5b81811015610c915736838383818110610b1157610b116147c6565b9050602002810190610b239190614b43565b905060ff610b346020830183614b75565b610b45906040810190602001614ba7565b60ff1603610b7f576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff610b8e6020830183614b75565b610b9f906060810190604001614ba7565b60ff1603610bd9576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff610bef6020830183614b75565b610bfd906020810190614bc0565b67ffffffffffffffff1603610c3e576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5c610c4e6020830183614b75565b610c5790614bd9565b6119af565b610c885f610c6d6020840184614654565b610c7a6020850185614b75565b610c8390614bd9565b611a00565b50600101610af6565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610cc3929190614c90565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a01000000000000000000009091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610dec57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dc1575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610e5957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e2e575b505050505081525050905092915050565b604080518082019091525f80825260208201526060610e8b86868686611d93565b6006546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815292945090925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610ee990849089908990600401614e2d565b5f604051808303815f87803b158015610f00575f80fd5b505af1158015610f12573d5f803e3d5ffd5b5050505094509492505050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610fce57825467ffffffffffffffff168452610fed565b67ffffffffffffffff81811614610fed5767ffffffffffffffff811684525b815468010000000000000000900460ff166110a157825468010000000000000000900460ff161561109c578260010180548060200260200160405190810160405280929190818152602001828054801561107b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611050575b50505050506080850152825468010000000000000000900460ff1660208501525b61113d565b815468010000000000000000900460ff9081161461113d578160010180548060200260200160405190810160405280929190818152602001828054801561111c57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116110f1575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff1661120a5782546901000000000000000000900460ff161561120557826002018054806020026020016040519081016040528092919081815260200182805480156111cd57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111a2575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112be565b81546901000000000000000000900460ff908116146112be578160020180548060200260200160405190810160405280929190818152602001828054801561128657602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161125b575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112c7846119af565b50505092915050565b5f61067d82611e8a565b6112e261195d565b6112eb5f611ef0565b565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161134c576113268385610683565b60405160200161133691906142bc565b60405160208183030381529060405290506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601611393576113838385610f1f565b60405160200161133691906144fe565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610ad4565b9392505050565b6113dc61195d565b5f5b8181101561151557368383838181106113f9576113f96147c6565b60609081029290920192505f916114169150830160408401614766565b73ffffffffffffffffffffffffffffffffffffffff1603611463576040517f20e9d05a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114736040820160208301614654565b63ffffffff165f036114b1576040517f49cfac4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec906114eb8385614654565b63ffffffff16815260208101919091526040015f2061150a8282614e8f565b5050506001016113de565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610cc3929190614f27565b61154f61195d565b600254811115611599576002546040517f34084fb8000000000000000000000000000000000000000000000000000000008152610ad4918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f806116246115fd6060890160408a01614766565b61160d60808a0160608b01614654565b61161a60c08b018b61482f565b9050878a8a611f64565b604080518082019091529182526020820152925050505b949350505050565b61164b61195d565b61165481612062565b50565b61165f61195d565b73ffffffffffffffffffffffffffffffffffffffff81166116ae576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b61165481611ef0565b6116c0816120d5565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174e91906147ab565b905061175b81848461213d565b6040805133815273ffffffffffffffffffffffffffffffffffffffff851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a66698839060600161092c565b73ffffffffffffffffffffffffffffffffffffffff82166117fb576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61181c73ffffffffffffffffffffffffffffffffffffffff8416838361216d565b505050565b61182a81611e8a565b611654576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610ad4565b73ffffffffffffffffffffffffffffffffffffffff8083165f90815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc8059061092c90849086908590614fb3565b61191f828483611a00565b6119298284610f1f565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161092c9392919061500f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146112eb576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ad4565b602081015160ff161580156119c95750606081015160ff16155b15611654576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff9081161480611a1b5750602081015160ff16155b15611a625760808101515115611a5d576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae1565b806020015160ff16816080015151141580611a9d57506002611a86600160ff615076565b611a90919061508f565b60ff16816020015160ff16115b15611ad4576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae181608001516121fa565b604081015160ff9081161480611afc5750604081015160ff16155b15611b825760a08101515115611b3e576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611b7d576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c59565b806040015160ff168160a0015151141580611bbd57506002611ba6600160ff615076565b611bb0919061508f565b60ff16816040015160ff16115b15611bf4576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff161580611c155750806040015160ff16816060015160ff16115b15611c4c576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c598160a001516121fa565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a0100000000000000000000959091169490940293909317835560808401518051859493611d6f93908501920190614166565b5060a08201518051611d8b916002840191602090910190614166565b505050505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314611e17576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611e24888888612292565b90925090505f80611e55611e3e60608c0160408d01614766565b611e4e60808d0160608e01614654565b858a612359565b9092509050611e6482846150d5565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff161515806113cd5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f80611f7286866124e3565b915091505f611f828b8b846124fc565b90505f611f8f8c8c610683565b9050611fa48a825f015163ffffffff16612508565b806020015173ffffffffffffffffffffffffffffffffffffffff1663709eb6648c8e8d886040518563ffffffff1660e01b8152600401611fe794939291906150e8565b602060405180830381865afa158015612002573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120269190615132565b61203090836150d5565b91505f806120408e8e868e612550565b909250905061204f82856150d5565b9e909d509b505050505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016115ca565b335f9081526005602052604090205480821115612128576040517f34084fb80000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b335f9081526005602052604090209190039055565b73ffffffffffffffffffffffffffffffffffffffff83166121625761181c8282612691565b61181c8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261181c908490612793565b5f805b825181101561181c575f838281518110612219576122196147c6565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611612288576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b91506001016121fd565b60605f805f6122a186866124e3565b90925090505f6122ca6122ba60608a0160408b01614766565b61023060808b0160608c01614654565b90505f6122da60c08a018a61482f565b905090506122f181835f015163ffffffff16612508565b60208201516123219061230a60808c0160608d01614654565b61231a60608d0160408e01614766565b8488612832565b61232b90866150d5565b94505f806123398b86612966565b909250905061234882886150d5565b909b909a5098505050505050505050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526003549192505f9182916124809173ffffffffffffffffffffffffffffffffffffffff16907f000000000000000000000000000000000000000000000000000000000000000090849087612988565b9150915061249087878484612a33565b909550935084156124d75760035473ffffffffffffffffffffffffffffffffffffffff165f90815260056020526040812080548792906124d19084906150d5565b90915550505b50505094509492505050565b6060806124f08484612aaa565b915091505b9250929050565b5f61163b848484612b90565b8082111561254c576040517fc667af3e0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b5050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526003549192505f9182916126759173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086612c04565b9150915061268587878484612a33565b94509450505050611e81565b73ffffffffffffffffffffffffffffffffffffffff82166126de576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612734576040519150601f19603f3d011682016040523d82523d5f602084013e612739565b606091505b505090508061181c576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ad4565b5f8060205f8451602086015f885af1806127b2576040513d5f823e3d81fd5b50505f513d915081156127c95780600114156127e3565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610ae6576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ad4565b6040517f717e8a420000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff87169063717e8a429061288c9088908890889088906004016150e8565b6020604051808303815f875af11580156128a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128cc9190615132565b9050801561290e5773ffffffffffffffffffffffffffffffffffffffff86165f90815260056020526040812080548392906129089084906150d5565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff88168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b5f606061297d6005612977866151d3565b85612cab565b909590945092505050565b5f6060863b8083036129ad57604080515f808252602082019092529250925050612a29565b5f805f8761ffff1667ffffffffffffffff8111156129cd576129cd614890565b6040519080825280601f01601f1916602001820160405280156129f7576020820181803683370190505b5090505f80885160208a018c8f8ff191503d925087831115612a17578792505b828152825f602083013e909450925050505b9550959350505050565b5f80831580612a43575082516020115b15612a5257505f905080611e81565b5f83806020019051810190612a679190615132565b90508515612a7757809150612aa0565b5f6002548811612a8957600254612a8b565b875b9050808211612a9a5781612a9c565b805b9350505b5094509492505050565b6060805f80612ab98686612dfe565b9150915080515f03612b0e57604080515f808252602082019092528391612b02565b604080518082019091525f815260606020820152815260200190600190039081612adb5790505b509350935050506124f5565b6040805160018082528183019092525f91816020015b604080518082019091525f815260606020820152815260200190600190039081612b245790505090506040518060400160405280600260ff16815260200183815250815f81518110612b7857612b786147c6565b60209081029190910101529196919550909350505050565b5f80612b9c8585610f1f565b90505f83515f14612bca57835f81518110612bb957612bb96147c6565b602002602001015160200151612bda565b60405180602001604052805f8152505b90505f80612be783613034565b91509150612bf884888a85856132ce565b98975050505050505050565b5f6060853b808303612c2957604080515f808252602082019092529250925050611e81565b5f805f8761ffff1667ffffffffffffffff811115612c4957612c49614890565b6040519080825280601f01601f191660200182016040528015612c73576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115612c92578792505b828152825f602083013e90999098509650505050505050565b5f60605f612cb885613486565b90505f612cc48661356c565b805160208201206060880151604089015192935090915f612ce58284610f1f565b90505f89515f14612d1357895f81518110612d0257612d026147c6565b602002602001015160200151612d23565b60405180602001604052805f8152505b90506060612d828d846040518060a001604052808963ffffffff1681526020018c81526020018a8152602001875f015167ffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525085613589565b604051919b509150612d9a908990899060200161526e565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a0015183604051612de69392919061529c565b60405180910390a15050505050505050935093915050565b6060806002831015612e3e576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b5f612e4c60028286886152f8565b612e559161531f565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161301d57805f5b86831015612faa575f612e9e60018501858a8c6152f8565b612ea791615367565b60f81c90505f819003612ee8576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b8160ff165f03612efa57809150612f36565b8160ff168160ff1614612f3657365f612f1586868c8e6152f8565b91509150612f26898986858561385b565b9099509750859450919250829150505b60018401935f90612f4c90600301868b8d6152f8565b612f559161531f565b60f01c90505f819003612f97576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101869052602401610ad4565b8060020161ffff16850194505050612e86565b828714612fe6576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b600287111561301657365f612ffd85858b8d6152f8565b9150915061300e888885858561385b565b909850965050505b505061302b565b6130288287876139ce565b93505b50509250929050565b60608082515f0361304457915091565b5f61304e84613c49565b90508060ff166001036130fe5760408051600180825281830190925290816020015b606081526020019060019003908161307057905050925083835f8151811061309a5761309a6147c6565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506130d2846003613d6b565b825f815181106130e4576130e46147c6565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561311a5761311a614890565b604051908082528060200260200182016040528015613143578160200160208202803683370190505b5091508060ff1667ffffffffffffffff81111561316257613162614890565b60405190808252806020026020018201604052801561319557816020015b60608152602001906001900390816131805790505b5092505f8060ff5b8651831015613245576001909201915f6131b78885613dea565b6002949094019390505f6131cb8986613d6b565b90508260ff1660ff036131e057809250613236565b8260ff168160ff1614613236577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f61321e8b8784613e69565b905061322c8a8a8784613fe2565b5093909301929150815b5061ffff16929092019161319d565b8183035f613254898584613e69565b905061326288888584613fe2565b5f5b8660ff168160ff1610156132c257878160ff1681518110613287576132876147c6565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613264565b50505050505050915091565b5f80866040015187602001516132e491906153ad565b90505f5b8160ff168160ff16101561347b575f886020015160ff168260ff161061333c5760a089015160208a015161331c9084615076565b60ff168151811061332f5761332f6147c6565b602002602001015161335e565b88608001518260ff1681518110613355576133556147c6565b60200260200101515b60408051602081019091525f808252919250905b86518110156133ca578360ff16878281518110613391576133916147c6565b602002602001015160ff16036133c2578781815181106133b3576133b36147c6565b602002602001015191506133ca565b600101613372565b5089516040517f30bb3aac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416916330bb3aac91613423918d918d9087906004016153c6565b602060405180830381865afa15801561343e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134629190615132565b61346c90866150d5565b945050508060010190506132e8565b505095945050505050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001613556929190615410565b5f60605f8061359785613034565b915091505f876040015188602001516135b091906153ad565b90508060ff1667ffffffffffffffff8111156135ce576135ce614890565b6040519080825280602002602001820160405280156135f7578160200160208202803683370190505b5093505f5b8160ff168160ff161015610f12575f896020015160ff168260ff16106136505760a08a015160208b01516136309084615076565b60ff1681518110613643576136436147c6565b6020026020010151613672565b89608001518260ff1681518110613669576136696147c6565b60200260200101515b60408051602081019091525f808252919250905b85518110156136de578360ff168682815181106136a5576136a56147c6565b602002602001015160ff16036136d6578681815181106136c7576136c76147c6565b602002602001015191506136de565b600101613686565b506040517f95d376d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906395d376d790613733908d908590600401615435565b6020604051808303815f875af115801561374f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137739190615132565b878460ff1681518110613788576137886147c6565b6020026020010181815250505f878460ff16815181106137aa576137aa6147c6565b6020026020010151111561385157868360ff16815181106137cd576137cd6147c6565b60200260200101518c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461381f91906150d5565b92505081905550868360ff168151811061383b5761383b6147c6565b60200260200101518861384e91906150d5565b97505b50506001016135fc565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8616016138f5578651156138b8578684846040516020016138a4939291906154b2565b6040516020818303038152906040526138ee565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b96506139c3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff86160161398c5785511561394f5785848460405160200161393b939291906154b2565b604051602081830303815290604052613985565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b95506139c3565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff86166004820152602401610ad4565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff851601613af35760228214613a35576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613a55613a476022600286886152f8565b613a50916154d8565b61410d565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b1660248201529091506034016040516020818303038152906040529150506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff851601613c1157604282111580613b2e5750606282115b15613b65576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613b77613a476022600286886152f8565b90505f613b8b613a476042602287896152f8565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613bbe866042818a6152f8565b613bc7916154d8565b60405160086020938403029190911c9250613bf8916001916011918391889183916031916002918b918b9101615514565b60405160208183030381529060405293505050506113cd565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff85166004820152602401610ad4565b5f80805b8351821015613d27576001909101905f613c678584613dea565b905060028301925060028161ffff161015613cb1576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b5f613cbc8685613d6b565b90508060ff1660ff03613cfb576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b8316613d185760019485019460ff82161b831792505b5061ffff169190910190613c4d565b83518214613d64576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101839052602401610ad4565b5050919050565b5f613d778260016150d5565b83511015613de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401610ad4565b50016001015190565b5f613df68260026150d5565b83511015613e60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606401610ad4565b50016002015190565b606081613e7781601f6150d5565b1015613edf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ad4565b613ee982846150d5565b84511015613f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ad4565b606082158015613f715760405191505f825260208201604052613fd9565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613faa578051835260209283019201613f92565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff0361401f576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61402b8360016153ad565b90505f5b8451811015611d8b575f85828151811061404b5761404b6147c6565b602002602001015190508060ff168360ff16036140c057868281518110614074576140746147c6565b60200260200101518460405160200161408e92919061526e565b6040516020818303038152906040528783815181106140af576140af6147c6565b602002602001018190525050611d8b565b8060ff165f0361410457828683815181106140dd576140dd6147c6565b602002602001019060ff16908160ff1681525050838783815181106140af576140af6147c6565b5060010161402f565b5f6fffffffffffffffffffffffffffffffff821115614162576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526080600482015260248101839052604401610ad4565b5090565b828054828255905f5260205f209081019282156141de579160200282015b828111156141de57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614184565b506141629291505b80821115614162575f81556001016141e6565b5f60208284031215614209575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113cd575f80fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611654575f80fd5b803561426481614238565b919050565b63ffffffff81168114611654575f80fd5b803561426481614269565b5f8060408385031215614296575f80fd5b82356142a181614238565b915060208301356142b181614269565b809150509250929050565b815163ffffffff16815260208083015173ffffffffffffffffffffffffffffffffffffffff16908201526040810161067d565b6020810160038310614328577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f805f60608486031215614340575f80fd5b833561434b81614238565b9250602084013561435b81614238565b929592945050506040919091013590565b5f8083601f84011261437c575f80fd5b50813567ffffffffffffffff811115614393575f80fd5b6020830191508360208260051b85010111156124f5575f80fd5b5f805f604084860312156143bf575f80fd5b83356143ca81614238565b9250602084013567ffffffffffffffff8111156143e5575f80fd5b6143f18682870161436c565b9497909650939450505050565b5f806020838503121561440f575f80fd5b823567ffffffffffffffff811115614425575f80fd5b6144318582860161436c565b90969095509350505050565b5f815180845260208085019450602084015f5b8381101561448257815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614450565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c060808501526144dc60c085018261443d565b905060a083015184820360a08601526144f5828261443d565b95945050505050565b602081525f6113cd602083018461448d565b80358015158114614264575f80fd5b5f805f8060608587031215614532575f80fd5b843567ffffffffffffffff80821115614549575f80fd5b9086019060e0828903121561455c575f80fd5b90945060208601359080821115614571575f80fd5b818701915087601f830112614584575f80fd5b813581811115614592575f80fd5b8860208285010111156145a3575f80fd5b6020830195508094505050506145bb60408601614510565b905092959194509250565b5f5b838110156145e05781810151838201526020016145c8565b50505f910152565b5f81518084526145ff8160208601602086016145c6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f61163b60608301846145e8565b5f60208284031215614664575f80fd5b81356113cd81614269565b5f805f60608486031215614681575f80fd5b833561468c81614269565b9250602084013561469c81614238565b915060408401356146ac81614269565b809150509250925092565b602081525f6113cd60208301846145e8565b5f80602083850312156146da575f80fd5b823567ffffffffffffffff808211156146f1575f80fd5b818501915085601f830112614704575f80fd5b813581811115614712575f80fd5b866020606083028501011115614726575f80fd5b60209290920196919550909350505050565b5f60208284031215614748575f80fd5b5035919050565b81518152602080830151908201526040810161067d565b5f60208284031215614776575f80fd5b81356113cd81614238565b5f8060408385031215614792575f80fd5b823561479d81614238565b946020939093013593505050565b5f602082840312156147bb575f80fd5b81516113cd81614238565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614825575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614862575f80fd5b83018035915067ffffffffffffffff82111561487c575f80fd5b6020019150368190038213156124f5575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156148e0576148e0614890565b60405290565b60405160e0810167ffffffffffffffff811182821017156148e0576148e0614890565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561495057614950614890565b604052919050565b5f60408284031215614968575f80fd5b6040516040810181811067ffffffffffffffff8211171561498b5761498b614890565b604052823561499981614269565b815260208301356149a981614238565b60208201529392505050565b803567ffffffffffffffff81168114614264575f80fd5b803560ff81168114614264575f80fd5b5f82601f8301126149eb575f80fd5b8135602067ffffffffffffffff821115614a0757614a07614890565b8160051b614a16828201614909565b9283528481018201928281019087851115614a2f575f80fd5b83870192505b84831015614a57578235614a4881614238565b82529183019190830190614a35565b979650505050505050565b5f60c08284031215614a72575f80fd5b614a7a6148bd565b9050614a85826149b5565b8152614a93602083016149cc565b6020820152614aa4604083016149cc565b6040820152614ab5606083016149cc565b6060820152608082013567ffffffffffffffff80821115614ad4575f80fd5b614ae0858386016149dc565b608084015260a0840135915080821115614af8575f80fd5b50614b05848285016149dc565b60a08301525092915050565b5f60208284031215614b21575f80fd5b813567ffffffffffffffff811115614b37575f80fd5b61163b84828501614a62565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614825575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614825575f80fd5b5f60208284031215614bb7575f80fd5b6113cd826149cc565b5f60208284031215614bd0575f80fd5b6113cd826149b5565b5f61067d3683614a62565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c17575f80fd5b830160208101925035905067ffffffffffffffff811115614c36575f80fd5b8060051b36038213156124f5575f80fd5b8183525f60208085019450825f5b85811015614482578135614c6881614238565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614c55565b60208082528181018390525f906040808401600586901b8501820187855b88811015614e1f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112614d0f575f80fd5b8b018035614d1c81614269565b63ffffffff16855280880135368290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41018112614d58575f80fd5b8589018890520167ffffffffffffffff614d71826149b5565b1687860152614d818882016149cc565b606060ff80831682890152614d978a85016149cc565b92506080818416818a0152614dad8386016149cc565b935060a09250818416838a0152614dc681860186614be4565b60c08b81015294509150614de1905061010089018483614c47565b925050614df081840184614be4565b93509050838783030160e0880152614e09828483614c47565b978a019796505050928701925050600101614cae565b509098975050505050505050565b604081525f614e3f60408301866145e8565b8281036020840152838152838560208301375f6020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b8135614e9a81614269565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135614eda81614238565b77ffffffffffffffffffffffffffffffffffffffff000000008160201b16837fffffffffffffffff0000000000000000000000000000000000000000000000008416171784555050505050565b60208082528181018390525f90604080840186845b87811015614fa6578135614f4f81614269565b63ffffffff90811684528286013590614f6782614269565b168386015281840135614f7981614238565b73ffffffffffffffffffffffffffffffffffffffff16838501526060928301929190910190600101614f3c565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526080810161163b6040830184805163ffffffff16825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6144f5606083018461448d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561067d5761067d615049565b5f60ff8316806150c6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b8082018082111561067d5761067d615049565b63ffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201525f61512860808301846145e8565b9695505050505050565b5f60208284031215615142575f80fd5b5051919050565b5f82601f830112615158575f80fd5b813567ffffffffffffffff81111561517257615172614890565b6151a360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614909565b8181528460208386010111156151b7575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e082360312156151e3575f80fd5b6151eb6148e6565b6151f4836149b5565b81526152026020840161427a565b602082015261521360408401614259565b60408201526152246060840161427a565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff811115615256575f80fd5b61526236828601615149565b60c08301525092915050565b5f835161527f8184602088016145c6565b8351908301906152938183602088016145c6565b01949350505050565b606081525f6152ae606083018661443d565b602083820360208501526152c2828761443d565b8481036040860152855180825260208088019450909101905f5b81811015614e1f578451835293830193918301916001016152dc565b5f8085851115615306575f80fd5b83861115615312575f80fd5b5050820193919092039150565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561535f5780818660020360031b1b83161692505b505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561535f5760019490940360031b84901b1690921692915050565b60ff818116838216019081111561067d5761067d615049565b63ffffffff8516815267ffffffffffffffff8416602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201525f61512860808301846145e8565b8281525f82516154278160208501602087016145c6565b919091016020019392505050565b6040815263ffffffff83511660408201525f602084015160a0606084015261546060e08401826145e8565b90506040850151608084015267ffffffffffffffff60608601511660a084015273ffffffffffffffffffffffffffffffffffffffff60808601511660c084015282810360208401526144f581856145e8565b5f84516154c38184602089016145c6565b8201838582375f930192835250909392505050565b8035602083101561067d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b166017840152506155f4601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea264697066735822122007106a9f1a4ad0c76a6c3862b682c6be555db12b22a4209a408302fac9b0046164736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002b7c38038062002b7c833981016040819052620000339162000139565b8080816001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000072573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000098919062000168565b3380620000be57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c981620000ea565b506001600160a01b0390911660805263ffffffff1660a052506200018d9050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156200014a575f80fd5b81516001600160a01b038116811462000161575f80fd5b9392505050565b5f6020828403121562000179575f80fd5b815163ffffffff8116811462000161575f80fd5b60805160a0516129c6620001b65f395f61036301525f818161048301526104e701526129c65ff3fe608060405234801561000f575f80fd5b5060043610610115575f3560e01c806343ea4fa9116100ad5780638da5cb5b1161007d578063c40ff83511610063578063c40ff835146102b6578063e084d952146102c9578063f2fde38b146102dc575f80fd5b80638da5cb5b1461026f5780639c33abf714610296575f80fd5b806343ea4fa91461022257806354fd4d50146102355780636750cd4c14610254578063715018a614610267575f80fd5b806320efd722116100e857806320efd7221461017857806329460b0b1461018b57806339e3f9381461019e5780633c782a52146101be575f80fd5b806301ffc9a7146101195780630223536e146101415780630894edf1146101565780631881d94d14610169575b5f80fd5b61012c610127366004611bf2565b6102ef565b60405190151581526020015b60405180910390f35b61015461014f366004611c92565b61034a565b005b610154610164366004611ceb565b61035c565b60016040516101389190611d33565b610154610186366004611dd6565b6104e5565b610154610199366004611e25565b610645565b6101b16101ac366004611e77565b610828565b6040516101389190611f69565b6102026101cc366004611f7b565b600260209081525f938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff909116602083015201610138565b6101b1610230366004611e77565b6109c3565b60408051600381525f6020820152600291810191909152606001610138565b61012c610262366004611fad565b610d74565b610154610d7e565b5f5460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610138565b6102a96102a4366004611fc6565b610d91565b6040516101389190611ffd565b6101546102c4366004612067565b610e31565b61012c6102d7366004612283565b610e41565b6101546102ea3660046122cd565b610e55565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0ab7be9f000000000000000000000000000000000000000000000000000000001480610344575061034482610eb8565b92915050565b61035684848484610f4e565b50505050565b61038783837f0000000000000000000000000000000000000000000000000000000000000000611060565b5f610392848461112e565b90505f61039f858561113f565b90505f6103ac83836109c3565b90506103d08187876040516103c29291906122e6565b604051809103902086611161565b5f60405180606001604052808463ffffffff1681526020016103f2898961130a565b81526020016104018989611322565b67ffffffffffffffff908116909152604080517fa825d747000000000000000000000000000000000000000000000000000000008152835163ffffffff1660048201526020840151602482015290830151909116604482015273ffffffffffffffffffffffffffffffffffffffff8681166064830152608482018890529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b1580156104c6575f80fd5b505af11580156104d8573d5f803e3d5ffd5b5050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610554576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156103565736838383818110610571576105716122f5565b90506020028101906105839190612322565b905061059a6105956020830183611fad565b611344565b60026105ac6040830160208401611fad565b63ffffffff16036105ec576105e76105c76020830183611fad565b866105d5604085018561235e565b8101906105e291906123bf565b61138b565b61063c565b6105fc6040820160208301611fad565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610556565b61064d6113e1565b5f5b818110156107ea573683838381811061066a5761066a6122f5565b905060200281019061067c91906123f1565b905060ff61068d6020830183612423565b61069e906040810190602001612455565b60ff16036106d8576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6106e76020830183612423565b6106f8906060810190604001612455565b60ff1603610732576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6107486020830183612423565b61075690602081019061246e565b67ffffffffffffffff1603610797576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b56107a76020830183612423565b6107b090612487565b611433565b6107e15f6107c66020840184611fad565b6107d36020850185612423565b6107dc90612487565b611484565b5060010161064f565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b560828260405161081c92919061253c565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561094557602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161091a575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156109b257602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610987575b505050505081525050905092915050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610a7257825467ffffffffffffffff168452610a91565b67ffffffffffffffff81811614610a915767ffffffffffffffff811684525b815468010000000000000000900460ff16610b4557825468010000000000000000900460ff1615610b405782600101805480602002602001604051908101604052809291908181526020018280548015610b1f57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610af4575b50505050506080850152825468010000000000000000900460ff1660208501525b610be1565b815468010000000000000000900460ff90811614610be15781600101805480602002602001604051908101604052809291908181526020018280548015610bc057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b95575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610cae5782546901000000000000000000900460ff1615610ca95782600201805480602002602001604051908101604052809291908181526020018280548015610c7157602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c46575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d62565b81546901000000000000000000900460ff90811614610d625781600201805480602002602001604051908101604052809291908181526020018280548015610d2a57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610cff575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d6b84611433565b50505092915050565b5f61034482611817565b610d866113e1565b610d8f5f61187d565b565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601610df057610dca83856109c3565b604051602001610dda9190611f69565b6040516020818303038152906040529050610e2a565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610633565b9392505050565b610e3c838383611060565b505050565b5f610e4d8484846118f1565b949350505050565b610e5d6113e1565b73ffffffffffffffffffffffffffffffffffffffff8116610eac576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610633565b610eb58161187d565b50565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061034457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610344565b6040805180820182526001815267ffffffffffffffff8316602082015290516002905f90610f7f90889088906122e6565b604080519182900390912082526020808301939093529081015f9081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916110529187908790869088906126d6565b60405180910390a150505050565b6051821461109a576040517fc9bf37b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016110a684846119f1565b60ff16146110e0576040517f3a9ae7b900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff166110f18484611a12565b63ffffffff1614610e3c576040517f42d2c97e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e2a61113c8484611a21565b90565b5f61114e600d60098486612759565b61115791612780565b60e01c9392505050565b61116c8383836118f1565b6111a2576040517f4c3118d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611257575f5b836020015160ff168160ff161015611255575f83815260026020908152604080832085845290915281206080860151805191929160ff85169081106111f8576111f86122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001690556001016111b1565b505b604083015160ff1615610e3c575f5b836040015160ff168160ff161015610356575f838152600260209081526040808320858452909152812060a0860151805191929160ff85169081106112ad576112ad6122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611266565b5f611319602d600d8486612759565b610e2a916127c8565b5f611331600960018486612759565b61133a91612804565b60c01c9392505050565b61134d81611817565b610eb5576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610633565b611396828483611484565b6113a082846109c3565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516113d49392919061284a565b60405180910390a1505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610d8f576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610633565b602081015160ff1615801561144d5750606081015160ff16155b15610eb5576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff908116148061149f5750602081015160ff16155b156114e657608081015151156114e1576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611565565b806020015160ff168160800151511415806115215750600261150a600160ff6128b1565b61151491906128ca565b60ff16816020015160ff16115b15611558576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115658160800151611a30565b604081015160ff90811614806115805750604081015160ff16155b156116065760a081015151156115c2576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611601576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd565b806040015160ff168160a00151511415806116415750600261162a600160ff6128b1565b61163491906128ca565b60ff16816040015160ff16115b15611678576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806116995750806040015160ff16816060015160ff16115b156116d0576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd8160a00151611a30565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a01000000000000000000009590911694909402939093178355608084015180518594936117f393908501920190611b56565b5060a0820151805161180f916002840191602090910190611b56565b505050505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff16151580610e2a5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60208301515f9060ff161561196f575f5b846020015160ff168160ff1610156119585761194385608001518260ff1681518110611930576119306122f5565b60200260200101518585885f0151611ac8565b611950575f915050610e2a565b600101611902565b50836040015160ff165f0361196f57506001610e2a565b60608401515f5b856040015160ff168160ff1610156119e6576119b78660a001518260ff16815181106119a4576119a46122f5565b60200260200101518686895f0151611ac8565b156119de57816119c681612910565b9250508160ff165f036119de57600192505050610e2a565b600101611976565b505f95945050505050565b5f6119ff6001828486612759565b611a089161294a565b60f81c9392505050565b5f61114e6031602d8486612759565b5f611319605160318486612759565b5f805b8251811015610e3c575f838281518110611a4f57611a4f6122f5565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611611abe576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101611a33565b5f838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff16938301939093529091611b4c57508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b828054828255905f5260205f20908101928215611bce579160200282015b82811115611bce57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190611b74565b50611bda929150611bde565b5090565b5b80821115611bda575f8155600101611bdf565b5f60208284031215611c02575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e2a575f80fd5b5f8083601f840112611c41575f80fd5b50813567ffffffffffffffff811115611c58575f80fd5b602083019150836020828501011115611c6f575f80fd5b9250929050565b803567ffffffffffffffff81168114611c8d575f80fd5b919050565b5f805f8060608587031215611ca5575f80fd5b843567ffffffffffffffff811115611cbb575f80fd5b611cc787828801611c31565b90955093505060208501359150611ce060408601611c76565b905092959194509250565b5f805f60408486031215611cfd575f80fd5b833567ffffffffffffffff811115611d13575f80fd5b611d1f86828701611c31565b909790965060209590950135949350505050565b6020810160038310611d6c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b803573ffffffffffffffffffffffffffffffffffffffff81168114611c8d575f80fd5b5f8083601f840112611da5575f80fd5b50813567ffffffffffffffff811115611dbc575f80fd5b6020830191508360208260051b8501011115611c6f575f80fd5b5f805f60408486031215611de8575f80fd5b611df184611d72565b9250602084013567ffffffffffffffff811115611e0c575f80fd5b611e1886828701611d95565b9497909650939450505050565b5f8060208385031215611e36575f80fd5b823567ffffffffffffffff811115611e4c575f80fd5b611e5885828601611d95565b90969095509350505050565b803563ffffffff81168114611c8d575f80fd5b5f8060408385031215611e88575f80fd5b611e9183611d72565b9150611e9f60208401611e64565b90509250929050565b5f815180845260208085019450602084015f5b83811015611eed57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611ebb565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152611f4760c0850182611ea8565b905060a083015184820360a0860152611f608282611ea8565b95945050505050565b602081525f610e2a6020830184611ef8565b5f805f60608486031215611f8d575f80fd5b8335925060208401359150611fa460408501611d72565b90509250925092565b5f60208284031215611fbd575f80fd5b610e2a82611e64565b5f805f60608486031215611fd8575f80fd5b611fe184611e64565b9250611fef60208501611d72565b9150611fa460408501611e64565b5f602080835283518060208501525f5b818110156120295785810183015185820160400152820161200d565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f805f60408486031215612079575f80fd5b833567ffffffffffffffff81111561208f575f80fd5b61209b86828701611c31565b9094509250611fa4905060208501611e64565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156120fe576120fe6120ae565b60405290565b803560ff81168114611c8d575f80fd5b5f82601f830112612123575f80fd5b8135602067ffffffffffffffff80831115612140576121406120ae565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715612183576121836120ae565b60405293845260208187018101949081019250878511156121a2575f80fd5b6020870191505b848210156121c9576121ba82611d72565b835291830191908301906121a9565b979650505050505050565b5f60c082840312156121e4575f80fd5b6121ec6120db565b90506121f782611c76565b815261220560208301612104565b602082015261221660408301612104565b604082015261222760608301612104565b6060820152608082013567ffffffffffffffff80821115612246575f80fd5b61225285838601612114565b608084015260a084013591508082111561226a575f80fd5b5061227784828501612114565b60a08301525092915050565b5f805f60608486031215612295575f80fd5b833567ffffffffffffffff8111156122ab575f80fd5b6122b7868287016121d4565b9660208601359650604090950135949350505050565b5f602082840312156122dd575f80fd5b610e2a82611d72565b818382375f9101908152919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112612354575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612391575f80fd5b83018035915067ffffffffffffffff8211156123ab575f80fd5b602001915036819003821315611c6f575f80fd5b5f602082840312156123cf575f80fd5b813567ffffffffffffffff8111156123e5575f80fd5b610e4d848285016121d4565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612354575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612354575f80fd5b5f60208284031215612465575f80fd5b610e2a82612104565b5f6020828403121561247e575f80fd5b610e2a82611c76565b5f61034436836121d4565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124c5575f80fd5b830160208101925035905067ffffffffffffffff8111156124e4575f80fd5b8060051b3603821315611c6f575f80fd5b8183525f60208085019450825f5b85811015611eed5773ffffffffffffffffffffffffffffffffffffffff61252983611d72565b1687529582019590820190600101612503565b60208082528181018390525f906040808401600586901b8501820187855b888110156126c8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c36030181126125bb575f80fd5b8b0163ffffffff6125cb82611e64565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612601575f80fd5b8589018890520167ffffffffffffffff61261a82611c76565b168786015261262a888201612104565b606060ff808316828901526126408a8501612104565b92506080818416818a0152612656838601612104565b935060a09250818416838a015261266f81860186612492565b60c08b8101529450915061268a9050610100890184836124f5565b92505061269981840184612492565b93509050838783030160e08801526126b28284836124f5565b978a01979650505092870192505060010161255a565b509098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a08301375f60a085830101525f60a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b5f8085851115612767575f80fd5b83861115612773575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156127c05780818660040360031b1b83161692505b505092915050565b80356020831015610344577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156127c05760089490940360031b84901b1690921692915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f611f606060830184611ef8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561034457610344612884565b5f60ff831680612901577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b5f60ff82168061292257612922612884565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156127c05760019490940360031b84901b169092169291505056fea264697066735822122049ae6e8c1120ac3b04c6e78fb5426f5903144b4cb03d43aa8492006a0cbef95864736f6c6343000816003360e060405234801562000010575f80fd5b5060405162005cb238038062005cb2833981016040819052620000339162000170565b82836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000071573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000979190620001ba565b3380620000bd57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c88162000109565b506001600160a01b0391821660805263ffffffff1660a05260c092909252600655600280546001600160a01b031916939091169290921790915550620001e6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016d575f80fd5b50565b5f805f806080858703121562000184575f80fd5b8451620001918162000158565b6020860151909450620001a48162000158565b6040860151606090960151949790965092505050565b5f60208284031215620001cb575f80fd5b815163ffffffff81168114620001df575f80fd5b9392505050565b60805160a05160c051615a7e620002345f395f81816121c00152612ffa01525f610e0f01525f81816107510152818161089401528181610a0f01528181610ff80152611cee0152615a7e5ff3fe60806040526004361061019c575f3560e01c80637620fd01116100dc578063d15b0d4911610087578063f0f4426011610062578063f0f442601461055b578063f2fde38b1461057a578063faaebd2114610599578063fd9be522146105c4575f80fd5b8063d15b0d49146104f1578063d80e9bd914610510578063ea69d69d1461053c575f80fd5b80639c33abf7116100b75780639c33abf714610487578063ab750e75146104b3578063c85f4b4e146104d2575f80fd5b80637620fd01146103d65780638da5cb5b146104325780638eb0bf301461045b575f80fd5b806320efd7221161014757806354fd4d501161012257806354fd4d5014610359578063594924da146103845780636750cd4c146103a3578063715018a6146103c2575f80fd5b806320efd722146102d15780633c782a52146102f05780634389e58f1461032c575f80fd5b80631881d94d116101775780631881d94d1461024b5780631fb5122514610266578063200175f7146102b0575f80fd5b806301ffc9a7146101a7578063052368ca146101db5780630e97289b146101fa575f80fd5b366101a357005b5f80fd5b3480156101b2575f80fd5b506101c66101c1366004614622565b6105e3565b60405190151581526020015b60405180910390f35b3480156101e6575f80fd5b506101c66101f5366004614661565b6106c7565b348015610205575f80fd5b506002546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b348015610256575f80fd5b5060026040516101d291906146b5565b348015610271575f80fd5b506102a261028036600461474f565b600360209081525f938452604080852082529284528284209052825290205481565b6040519081526020016101d2565b3480156102bb575f80fd5b506102cf6102ca366004614791565b6106e7565b005b3480156102dc575f80fd5b506102cf6102eb366004614817565b610892565b3480156102fb575f80fd5b506102a261030a366004614868565b600460209081525f938452604080852082529284528284209052825290205481565b348015610337575f80fd5b5061034b6103463660046148dc565b6109f8565b6040516101d29291906149c9565b348015610364575f80fd5b5060408051600a81525f60208201526002918101919091526060016101d2565b34801561038f575f80fd5b506102cf61039e3660046149ec565b610d8d565b3480156103ae575f80fd5b506101c66103bd366004614a39565b61105c565b3480156103cd575f80fd5b506102cf611066565b3480156103e1575f80fd5b5061040660075460065473ffffffffffffffffffffffffffffffffffffffff90911691565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d2565b34801561043d575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610226565b348015610466575f80fd5b5061047a610475366004614a52565b611079565b6040516101d29190614b52565b348015610492575f80fd5b506104a66104a1366004614b64565b6114bd565b6040516101d29190614b9d565b3480156104be575f80fd5b506102cf6104cd3660046149ec565b61155d565b3480156104dd575f80fd5b506102cf6104ec366004614baf565b6115e6565b3480156104fc575f80fd5b506102cf61050b366004614bee565b6117cd565b34801561051b575f80fd5b5061052f61052a3660046148dc565b61185b565b6040516101d29190614c05565b348015610547575f80fd5b5061047a610556366004614a52565b6119c4565b348015610566575f80fd5b506102cf610575366004614c1c565b611b7e565b348015610585575f80fd5b506102cf610594366004614c1c565b611bf9565b3480156105a4575f80fd5b506102a26105b3366004614c1c565b60056020525f908152604090205481565b3480156105cf575f80fd5b506102cf6105de366004614c37565b611c5c565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061067557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b806106c157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f6106dc6106d486614e6e565b858585611dcc565b90505b949350505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610738576040517f96830d1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107dc9190614e79565b73ffffffffffffffffffffffffffffffffffffffff1603610829576040517fb77f504400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610834838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610901576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156109f2573683838381811061091e5761091e614e94565b90506020028101906109309190614ec1565b90506109476109426020830183614a39565b611fac565b60016109596040830160208401614a39565b63ffffffff1603610999576109946109746020830183614a39565b866109826040850185614efd565b81019061098f9190614f5e565b611ff3565b6109e9565b6109a96040820160208301614a39565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610903565b50505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610a7c576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6080860135610aad610a946060890160408a01614c1c565b73ffffffffffffffffffffffffffffffffffffffff1690565b14610ae4576040517fa4884a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80610af188888861203c565b90925090505f80610b22610b0b60608c0160408d01614c1c565b610b1b60808d0160608e01614a39565b858a6120c1565b9092509050610b318284614fbd565b9250610b4060c08b018b614efd565b604051610b4e929190614fd0565b604051809103902060035f8c6040016020810190610b6c9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f90812090610ba460808e0160608f01614a39565b63ffffffff1681526020808201929092526040015f90812091610bc9908e018e614fdf565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f20819055505f610ce36040518060e001604052808d5f016020810190610c0f9190614fdf565b67ffffffffffffffff1681526020018d6060016020810190610c319190614a39565b63ffffffff1681526020018d6040016020810190610c4f9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff1681526020018d6020016020810190610c7d9190614a39565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610ca960c08f018f614efd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505091525061224b565b6002546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610d3e9084908e908e9060040161503f565b5f604051808303815f87803b158015610d55575f80fd5b505af1158015610d67573d5f803e3d5ffd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610dc7576040517f864d08b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001610dd385856122b0565b60ff1614610e0d576040517f7952a82f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610e3e85856122d1565b63ffffffff1614610e7b576040517f3e96df1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e8685856122f3565b90505f610e938686612304565b90505f610ea08787612313565b73ffffffffffffffffffffffffffffffffffffffff84165f90815260036020908152604080832063ffffffff87168452825280832067ffffffffffffffff851684529091529020549091508514610f23576040517f660e96ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610f2e8484611079565b9050610f53818989604051610f44929190614fd0565b60405180910390208888612335565b5f60405180606001604052808563ffffffff168152602001610f758b8b6124ca565b815267ffffffffffffffff858116602092830152604080517fa825d747000000000000000000000000000000000000000000000000000000008152845163ffffffff16600482015292840151602484015283015116604482015273ffffffffffffffffffffffffffffffffffffffff8781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b15801561103b575f80fd5b505af115801561104d573d5f803e3d5ffd5b50505050505050505050505050565b5f6106c1826124e2565b61106e612560565b6110775f6125b2565b565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88811685526001845286852092855291909252939091208054929391929091168061113057825473ffffffffffffffffffffffffffffffffffffffff16611132565b805b73ffffffffffffffffffffffffffffffffffffffff168452815474010000000000000000000000000000000000000000900460ff1661122257825474010000000000000000000000000000000000000000900460ff161561121d57826001018054806020026020016040519081016040528092919081815260200182805480156111f057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111c5575b50505050506080850152825474010000000000000000000000000000000000000000900460ff1660208501525b6112d6565b815474010000000000000000000000000000000000000000900460ff908116146112d657816001018054806020026020016040519081016040528092919081815260200182805480156112a957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161127e575b50505050506080850152815474010000000000000000000000000000000000000000900460ff1660208501525b81547501000000000000000000000000000000000000000000900460ff166113d35782547501000000000000000000000000000000000000000000900460ff16156113ce578260020180548060200260200160405190810160405280929190818152602001828054801561137e57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611353575b505050505060a0850152825460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114ab565b81547501000000000000000000000000000000000000000000900460ff908116146114ab578160020180548060200260200160405190810160405280929190818152602001828054801561145b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611430575b505050505060a0850152815460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114b484612626565b50505092915050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161151c576114f68385611079565b6040516020016115069190614b52565b6040516020818303038152906040529050611556565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff831660048201526024016109e0565b9392505050565b8060045f8686604051611571929190614fd0565b604080519182900390912082526020808301939093529081015f90812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a95258916115d891879087908790879061506e565b60405180910390a150505050565b6115ee612560565b5f5b8181101561178f573683838381811061160b5761160b614e94565b905060200281019061161d91906150b1565b905060ff61162e60208301836150e3565b61163f906040810190602001615115565b60ff1603611679576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff61168860208301836150e3565b611699906060810190604001615115565b60ff16036116d3576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f16116e360208301836150e3565b6116ec90614e6e565b612626565b5f6116ff60208301836150e3565b61170d906020810190614c1c565b73ffffffffffffffffffffffffffffffffffffffff160361175a576040517f76df55a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117865f61176b6020840184614a39565b61177860208501856150e3565b61178190614e6e565b612677565b506001016115f0565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f3482826040516117c19291906151da565b60405180910390a15050565b6117d5612560565b60065481111561181f576006546040517fb79d12630000000000000000000000000000000000000000000000000000000081526109e0918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f8061187a8686612a25565b90925090505f6118906060890160408a01614c1c565b90505f6118a360808a0160608b01614a39565b90505f6118b08383611079565b90505f6118df82856118c96118c48f61540c565b612c5b565b8e8060c001906118d99190614efd565b8a612d2f565b82516040517fc8f8dcd100000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063c8f8dcd1906119379087908a906004016154a7565b602060405180830381865afa158015611952573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197691906154d5565b6119809082614fbd565b90505f806119908686858d612efb565b909250905061199f8284614fbd565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8084165f90815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff7401000000000000000000000000000000000000000087048116828501527501000000000000000000000000000000000000000000870481168287015276010000000000000000000000000000000000000000000090960490951660608601529182018054845181840281018401909552808552929360808601939092830182828015611b0057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611ad5575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015611b6d57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611b42575b505050505081525050905092915050565b611b86612560565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f90602001611850565b611c01612560565b73ffffffffffffffffffffffffffffffffffffffff8116611c50576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b611c59816125b2565b50565b335f9081526005602052604090205480821115611caf576040517fb79d126300000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016109e0565b335f908152600560209081526040808320858503905580517fe1758bd800000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169263e1758bd892600480820193918290030181865afa158015611d48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190614e79565b9050611d7981858561303c565b6040805133815273ffffffffffffffffffffffffffffffffffffffff861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a6669883906060016115d8565b60208401515f9060ff1615611e80575f5b856020015160ff168160ff161015611e6957611e5486608001518260ff1681518110611e0b57611e0b614e94565b60200260200101518686865f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b611e61575f9150506106df565b600101611ddd565b50846040015160ff165f03611e80575060016106df565b60608501515f5b866040015160ff168160ff161015611f2d57611efe8760a001518260ff1681518110611eb557611eb5614e94565b60200260200101518787875f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b15611f255781611f0d816154ec565b9250508160ff165f03611f25576001925050506106df565b600101611e87565b505f9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611f86576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa773ffffffffffffffffffffffffffffffffffffffff8416838361306c565b505050565b611fb5816124e2565b611c59576040517f0ff03e5400000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526024016109e0565b611ffe828483612677565b6120088284611079565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e14282848360405161088593929190615526565b60605f805f61204b8686612a25565b90925090505f61207461206460608a0160408b01614c1c565b61047560808b0160608c01614a39565b80519091506120939061208d60608b0160408c01614c1c565b856130f9565b93505f806120a2838b86613227565b90925090506120b18287614fbd565b909a909950975050505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526007549192505f9182916121e89173ffffffffffffffffffffffffffffffffffffffff16907f0000000000000000000000000000000000000000000000000000000000000000908490876132ed565b915091506121f887878484613398565b9095509350841561223f5760075473ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604081208054879290612239908490614fbd565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a01519551939861229a986001989197919673ffffffffffffffffffffffffffffffffffffffff169501615560565b6040516020818303038152906040529050919050565b5f6122be6001828486615625565b6122c79161564c565b60f81c9392505050565b5f6122e06031602d8486615625565b6122e991615694565b60e01c9392505050565b5f611556612301848461340f565b90565b5f6122e0600d60098486615625565b5f612322600960018486615625565b61232b916156da565b60c01c9392505050565b61234184848484611dcc565b612377576040517f28ca4b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084015160ff161561241e575f5b846020015160ff168160ff16101561241c575f84815260046020908152604080832086845290915281206080870151805191929160ff85169081106123cd576123cd614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9055806001019050612386565b505b604084015160ff16156109f2575f5b846040015160ff168160ff1610156124c3575f848152600460209081526040808320868452909152812060a0870151805191929160ff851690811061247457612474614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f905580600101905061242d565b5050505050565b5f6124d9602d600d8486615625565b61155691615720565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805474010000000000000000000000000000000000000000900460ff16151580611556575054760100000000000000000000000000000000000000000000900460ff16151592915050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611077576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016109e0565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff161580156126405750606081015160ff16155b15611c59576040517f9b5f9f7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806126925750602081015160ff16155b156126d957608081015151156126d4576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758565b806020015160ff16816080015151141580612714575060026126fd600160ff61575c565b6127079190615775565b60ff16816020015160ff16115b1561274b576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758816080015161341e565b604081015160ff90811614806127735750604081015160ff16155b156127f95760a081015151156127b5576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16156127f4576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d0565b806040015160ff168160a00151511415806128345750600261281d600160ff61575c565b6128279190615775565b60ff16816040015160ff16115b1561286b576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16158061288c5750806040015160ff16816060015160ff16115b156128c3576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d08160a0015161341e565b73ffffffffffffffffffffffffffffffffffffffff8381165f90815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097167fffffffffffffffffffffff000000000000000000000000000000000000000000909116177401000000000000000000000000000000000000000060ff96871602177fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000968616969096027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16959095177601000000000000000000000000000000000000000000009490951693909302939093178255608084015180518594612a0193850192019061458f565b5060a08201518051612a1d91600284019160209091019061458f565b505050505050565b6060806002831015612a65576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b5f612a736002828688615625565b612a7c916157bb565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8201612c4457805f5b86831015612bd1575f612ac560018501858a8c615625565b612ace9161564c565b60f81c90505f819003612b0f576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b8160ff165f03612b2157809150612b5d565b8160ff168160ff1614612b5d57365f612b3c86868c8e615625565b91509150612b4d89898685856134b6565b9099509750859450919250829150505b60018401935f90612b7390600301868b8d615625565b612b7c916157bb565b60f01c90505f819003612bbe576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016109e0565b8060020161ffff16850194505050612aad565b828714612c0d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b6002871115612c3d57365f612c2485858b8d615625565b91509150612c3588888585856134b6565b909850965050505b5050612c52565b612c4f828787613629565b93505b50509250929050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d830152605182015260710161229a565b5f805f612d3b846138a4565b915091505f89604001518a60200151612d549190615801565b90505f5b8160ff168160ff161015612eed575f8b6020015160ff168260ff1610612dac5760a08c015160208d0151612d8c908461575c565b60ff1681518110612d9f57612d9f614e94565b6020026020010151612dce565b8b608001518260ff1681518110612dc557612dc5614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015612e3a578360ff16868281518110612e0157612e01614e94565b602002602001015160ff1603612e3257868181518110612e2357612e23614e94565b60200260200101519150612e3a565b600101612de2565b506040517ffdb9b0f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063fdb9b0f190612e95908f908f908f908f90889060040161581a565b602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed491906154d5565b612ede9088614fbd565b96505050806001019050612d58565b505050509695505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526007549192505f9182916130209173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086613b3e565b9150915061303087878484613398565b94509450505050610d84565b73ffffffffffffffffffffffffffffffffffffffff831661306157611fa78282613be5565b611fa7838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611fa7908490613ce7565b6040517fc015bb7d0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff85169063c015bb7d9061314f90869086906004016154a7565b6020604051808303815f875af115801561316b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061318f91906154d5565b905080156131d15773ffffffffffffffffffffffffffffffffffffffff84165f90815260056020526040812080548392906131cb908490614fbd565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff86168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b5f6060816132376118c48661540c565b90505f61324b6132468761540c565b613d86565b905060606132768861326289840160408b01614c1c565b8561327060c08c018c614efd565b8b613da3565b604051919650915061328e908490849060200161587b565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a00151836040516132da939291906158a9565b60405180910390a1505050935093915050565b5f6060863b80830361331257604080515f80825260208201909252925092505061338e565b5f805f8761ffff1667ffffffffffffffff81111561333257613332614c61565b6040519080825280601f01601f19166020018201604052801561335c576020820181803683370190505b5090505f80885160208a018c8f8ff191503d92508783111561337c578792505b828152825f602083013e909450925050505b9550959350505050565b5f808315806133a8575082516020115b156133b757505f905080610d84565b5f838060200190518101906133cc91906154d5565b905085156133dc57809150613405565b5f60065488116133ee576006546133f0565b875b90508082116133ff5781613401565b805b9350505b5094509492505050565b5f6124d9605160318486615625565b5f805b8251811015611fa7575f83828151811061343d5761343d614e94565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116134ac576040517fc0762a5d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101613421565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161355057865115613513578684846040516020016134ff93929190615905565b604051602081830303815290604052613549565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b965061361e565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016135e7578551156135aa5785848460405160200161359693929190615905565b6040516020818303038152906040526135e0565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b955061361e565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016109e0565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff85160161374e5760228214613690576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6136b06136a2602260028688615625565b6136ab91615720565b614072565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050611556565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff85160161386c576042821115806137895750606282115b156137c0576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6137d26136a2602260028688615625565b90505f6137e66136a2604260228789615625565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613819866042818a615625565b61382291615720565b60405160086020938403029190911c9250613853916001916011918391889183916031916002918b918b910161592b565b6040516020818303038152906040529350505050611556565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016109e0565b60608082515f036138b457915091565b5f6138be846140cb565b90508060ff1660010361396e5760408051600180825281830190925290816020015b60608152602001906001900390816138e057905050925083835f8151811061390a5761390a614e94565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506139428460036141ed565b825f8151811061395457613954614e94565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561398a5761398a614c61565b6040519080825280602002602001820160405280156139b3578160200160208202803683370190505b5091508060ff1667ffffffffffffffff8111156139d2576139d2614c61565b604051908082528060200260200182016040528015613a0557816020015b60608152602001906001900390816139f05790505b5092505f8060ff5b8651831015613ab5576001909201915f613a27888561426c565b6002949094019390505f613a3b89866141ed565b90508260ff1660ff03613a5057809250613aa6565b8260ff168160ff1614613aa6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f613a8e8b87846142eb565b9050613a9c8a8a8784614464565b5093909301929150815b5061ffff169290920191613a0d565b8183035f613ac48985846142eb565b9050613ad288888584614464565b5f5b8660ff168160ff161015613b3257878160ff1681518110613af757613af7614e94565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613ad4565b50505050505050915091565b5f6060853b808303613b6357604080515f808252602082019092529250925050610d84565b5f805f8761ffff1667ffffffffffffffff811115613b8357613b83614c61565b6040519080825280601f01601f191660200182016040528015613bad576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115613bcc578792505b828152825f602083013e90999098509650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216613c32576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114613c88576040519150601f19603f3d011682016040523d82523d5f602084013e613c8d565b606091505b5050905080611fa7576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016109e0565b5f8060205f8451602086015f885af180613d06576040513d5f823e3d81fd5b50505f513d91508115613d1d578060011415613d37565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016109e0565b60608160a001518260c0015160405160200161229a929190615a23565b5f60605f80613db1856138a4565b915091505f8a604001518b60200151613dca9190615801565b90508060ff1667ffffffffffffffff811115613de857613de8614c61565b604051908082528060200260200182016040528015613e11578160200160208202803683370190505b5093505f5b8160ff168160ff161015614063575f8c6020015160ff168260ff1610613e6a5760a08d015160208e0151613e4a908461575c565b60ff1681518110613e5d57613e5d614e94565b6020026020010151613e8c565b8c608001518260ff1681518110613e8357613e83614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015613ef8578360ff16868281518110613ebf57613ebf614e94565b602002602001015160ff1603613ef057868181518110613ee157613ee1614e94565b60200260200101519150613ef8565b600101613ea0565b508173ffffffffffffffffffffffffffffffffffffffff1663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b8152600401613f3a95949392919061581a565b6020604051808303815f875af1158015613f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7a91906154d5565b878460ff1681518110613f8f57613f8f614e94565b6020026020010181815250505f878460ff1681518110613fb157613fb1614e94565b6020026020010151111561405957868360ff1681518110613fd457613fd4614e94565b602002602001015160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546140279190614fbd565b92505081905550868360ff168151811061404357614043614e94565b6020026020010151886140569190614fbd565b97505b5050600101613e16565b50505050965096945050505050565b5f6fffffffffffffffffffffffffffffffff8211156140c7576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016109e0565b5090565b5f80805b83518210156141a9576001909101905f6140e9858461426c565b905060028301925060028161ffff161015614133576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b5f61413e86856141ed565b90508060ff1660ff0361417d576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b831661419a5760019485019460ff82161b831792505b5061ffff1691909101906140cf565b835182146141e6576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018390526024016109e0565b5050919050565b5f6141f9826001614fbd565b83511015614263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e64730000000000000000000000000060448201526064016109e0565b50016001015190565b5f614278826002614fbd565b835110156142e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e647300000000000000000000000060448201526064016109e0565b50016002015190565b6060816142f981601f614fbd565b1015614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b61436b8284614fbd565b845110156143d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b6060821580156143f35760405191505f82526020820160405261445b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561442c578051835260209283019201614414565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff036144a1576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144ad836001615801565b90505f5b8451811015612a1d575f8582815181106144cd576144cd614e94565b602002602001015190508060ff168360ff1603614542578682815181106144f6576144f6614e94565b60200260200101518460405160200161451092919061587b565b60405160208183030381529060405287838151811061453157614531614e94565b602002602001018190525050612a1d565b8060ff165f03614586578286838151811061455f5761455f614e94565b602002602001019060ff16908160ff16815250508387838151811061453157614531614e94565b506001016144b1565b828054828255905f5260205f20908101928215614607579160200282015b8281111561460757825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906145ad565b506140c79291505b808211156140c7575f815560010161460f565b5f60208284031215614632575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611556575f80fd5b5f805f8060808587031215614674575f80fd5b843567ffffffffffffffff81111561468a575f80fd5b850160c0818803121561469b575f80fd5b966020860135965060408601359560600135945092505050565b60208101600383106146ee577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b73ffffffffffffffffffffffffffffffffffffffff81168114611c59575f80fd5b8035614720816146f4565b919050565b803563ffffffff81168114614720575f80fd5b803567ffffffffffffffff81168114614720575f80fd5b5f805f60608486031215614761575f80fd5b833561476c816146f4565b925061477a60208501614725565b915061478860408501614738565b90509250925092565b5f805f606084860312156147a3575f80fd5b83356147ae816146f4565b925060208401356147be816146f4565b929592945050506040919091013590565b5f8083601f8401126147df575f80fd5b50813567ffffffffffffffff8111156147f6575f80fd5b6020830191508360208260051b8501011115614810575f80fd5b9250929050565b5f805f60408486031215614829575f80fd5b8335614834816146f4565b9250602084013567ffffffffffffffff81111561484f575f80fd5b61485b868287016147cf565b9497909650939450505050565b5f805f6060848603121561487a575f80fd5b83359250602084013591506040840135614893816146f4565b809150509250925092565b5f8083601f8401126148ae575f80fd5b50813567ffffffffffffffff8111156148c5575f80fd5b602083019150836020828501011115614810575f80fd5b5f805f80606085870312156148ef575f80fd5b843567ffffffffffffffff80821115614906575f80fd5b9086019060e08289031215614919575f80fd5b9094506020860135908082111561492e575f80fd5b5061493b8782880161489e565b90945092505060408501358015158114614953575f80fd5b939692955090935050565b5f5b83811015614978578181015183820152602001614960565b50505f910152565b5f815180845261499781602086016020860161495e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f6106df6060830184614980565b5f805f80606085870312156149ff575f80fd5b843567ffffffffffffffff811115614a15575f80fd5b614a218782880161489e565b90989097506020870135966040013595509350505050565b5f60208284031215614a49575f80fd5b61155682614725565b5f8060408385031215614a63575f80fd5b8235614a6e816146f4565b9150614a7c60208401614725565b90509250929050565b5f815180845260208085019450602084015f5b83811015614aca57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614a98565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152614b3060c0850182614a85565b905060a083015184820360a0860152614b498282614a85565b95945050505050565b602081525f6115566020830184614ad5565b5f805f60608486031215614b76575f80fd5b614b7f84614725565b92506020840135614b8f816146f4565b915061478860408501614725565b602081525f6115566020830184614980565b5f8060208385031215614bc0575f80fd5b823567ffffffffffffffff811115614bd6575f80fd5b614be2858286016147cf565b90969095509350505050565b5f60208284031215614bfe575f80fd5b5035919050565b8151815260208083015190820152604081016106c1565b5f60208284031215614c2c575f80fd5b8135611556816146f4565b5f8060408385031215614c48575f80fd5b8235614c53816146f4565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b60405290565b60405160e0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614d2157614d21614c61565b604052919050565b803560ff81168114614720575f80fd5b5f82601f830112614d48575f80fd5b8135602067ffffffffffffffff821115614d6457614d64614c61565b8160051b614d73828201614cda565b9283528481018201928281019087851115614d8c575f80fd5b83870192505b84831015614db4578235614da5816146f4565b82529183019190830190614d92565b979650505050505050565b5f60c08284031215614dcf575f80fd5b614dd7614c8e565b9050614de282614715565b8152614df060208301614d29565b6020820152614e0160408301614d29565b6040820152614e1260608301614d29565b6060820152608082013567ffffffffffffffff80821115614e31575f80fd5b614e3d85838601614d39565b608084015260a0840135915080821115614e55575f80fd5b50614e6284828501614d39565b60a08301525092915050565b5f6106c13683614dbf565b5f60208284031215614e89575f80fd5b8151611556816146f4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614ef3575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f30575f80fd5b83018035915067ffffffffffffffff821115614f4a575f80fd5b602001915036819003821315614810575f80fd5b5f60208284031215614f6e575f80fd5b813567ffffffffffffffff811115614f84575f80fd5b6106df84828501614dbf565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156106c1576106c1614f90565b818382375f9101908152919050565b5f60208284031215614fef575f80fd5b61155682614738565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f6150516040830186614980565b8281036020840152615064818587614ff8565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f61509d608083018688614ff8565b604083019490945250606001529392505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614ef3575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614ef3575f80fd5b5f60208284031215615125575f80fd5b61155682614d29565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615161575f80fd5b830160208101925035905067ffffffffffffffff811115615180575f80fd5b8060051b3603821315614810575f80fd5b8183525f60208085019450825f5b85811015614aca5781356151b2816146f4565b73ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161519f565b60208082528181018390525f906040808401600586901b8501820187855b88811015615374577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112615259575f80fd5b8b0163ffffffff61526982614725565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4182360301811261529f575f80fd5b8589018890520180356152b1816146f4565b73ffffffffffffffffffffffffffffffffffffffff16858801526152d6818901614d29565b606060ff808316828901526152ec8a8501614d29565b92506080818416818a0152615302838601614d29565b935060a09250818416838a015261531b8186018661512e565b60c08b81015294509150615336905061010089018483615191565b9250506153458184018461512e565b93509050838783030160e088015261535e828483615191565b978a0197965050509287019250506001016151f8565b509098975050505050505050565b5f82601f830112615391575f80fd5b813567ffffffffffffffff8111156153ab576153ab614c61565b6153dc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614cda565b8181528460208386010111156153f0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0823603121561541c575f80fd5b615424614cb7565b61542d83614738565b815261543b60208401614725565b602082015261544c60408401614715565b604082015261545d60608401614725565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff81111561548f575f80fd5b61549b36828601615382565b60c08301525092915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6106df6040830184614980565b5f602082840312156154e5575f80fd5b5051919050565b5f60ff8216806154fe576154fe614f90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6106dc6060830184614ad5565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d84015250846031830152836051830152825161561181607185016020870161495e565b919091016071019998505050505050505050565b5f8085851115615633575f80fd5b8386111561563f575f80fd5b5050820193919092039150565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561568c5780818660010360031b1b83161692505b505092915050565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561568c5760049490940360031b84901b1690921692915050565b7fffffffffffffffff000000000000000000000000000000000000000000000000813581811691600885101561568c5760089490940360031b84901b1690921692915050565b803560208310156106c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b60ff82811682821603908111156106c1576106c1614f90565b5f60ff8316806157ac577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561568c5760029490940360031b84901b1690921692915050565b60ff81811683821601908111156106c1576106c1614f90565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f6158486080830187614980565b828103604084015261585b818688614ff8565b9050828103606084015261586f8185614980565b98975050505050505050565b5f835161588c81846020880161495e565b8351908301906158a081836020880161495e565b01949350505050565b606081525f6158bb6060830186614a85565b602083820360208501526158cf8287614a85565b8481036040860152855180825260208088019450909101905f5b81811015615374578451835293830193918301916001016158e9565b5f845161591681846020890161495e565b8201838582375f930192835250909392505050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b16601784015250615a0b601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b50602881019190915260480198975050505050505050565b8281525f8251615a3a81602085016020870161495e565b91909101602001939250505056fea2646970667358221220bea5f362b07accaf075edb98d71a1b4a7df6e2ebc2aacf15c6426cab5ad7691964736f6c63430008160033608060405234801562000010575f80fd5b5060405162003af938038062003af983398101604081905262000033916200045e565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b038581169190911790915584908490612ee090859085908216156200008d576200008b5f8362000220565b505b5f5b8551811015620000f157620000e77f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d357620000d36200050c565b60200260200101516200022060201b60201c565b506001016200008f565b505f5b81518110156200014257620001387fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d357620000d36200050c565b50600101620000f4565b505060016004908155600680546001600160a01b0319166001600160a01b038d169081179091556040805163416ecebf60e01b8152905191965063416ecebf95508083019450602093509091908290030181865afa158015620001a7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001cd919062000520565b6006805463ffffffff92909216600160a01b0263ffffffff60a01b199092169190911790555050600780546001600160a01b039094166001600160a01b0319909416939093179092555062000586915050565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156200027157505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620002be57600180546015906200029990600160a81b90046001600160401b03166200054c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b620002ca8383620002d6565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1662000379575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003303390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620002d0565b505f620002d0565b80516001600160a01b038116811462000398575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620003c1575f80fd5b815160206001600160401b0380831115620003e057620003e06200039d565b8260051b604051601f19603f830116810181811084821117156200040857620004086200039d565b604052938452602081870181019490810192508785111562000428575f80fd5b6020870191505b848210156200045357620004438262000381565b835291830191908301906200042f565b979650505050505050565b5f805f805f8060c0878903121562000474575f80fd5b6200047f8762000381565b95506200048f6020880162000381565b60408801519095506001600160401b0380821115620004ac575f80fd5b620004ba8a838b01620003b1565b9550620004ca60608a0162000381565b9450620004da60808a0162000381565b935060a0890151915080821115620004f0575f80fd5b50620004ff89828a01620003b1565b9150509295509295509295565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121562000531575f80fd5b815163ffffffff8116811462000545575f80fd5b9392505050565b5f6001600160401b038281166002600160401b031981016200057c57634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b61356580620005945f395ff3fe608060405260043610610242575f3560e01c8063724e78da11610131578063c358de0a116100ac578063cd88b9031161007c578063d2ae210411610062578063d2ae2104146107ae578063d547741f14610800578063e395eb5c1461081f575f80fd5b8063cd88b9031461077c578063cfc325701461079b575f80fd5b8063c358de0a146106ee578063c416aa511461070d578063c7b2370b1461073e578063c8f8dcd11461075d575f80fd5b806391d1485411610101578063a217fddf116100e7578063a217fddf14610690578063c015bb7d146106a3578063c2803b2c146106c2575f80fd5b806391d14854146105675780639e944965146105b6575f80fd5b8063724e78da146104f6578063741bef1a146105155780637cd44734146105415780638624ba0714610554575f80fd5b80633146646a116101c1578063475b6d9e116101915780635e280f11116101775780635e280f1114610467578063709eb664146104b8578063717e8a42146104d7575f80fd5b8063475b6d9e1461043d5780635c975abb14610450575f80fd5b80633146646a146103cd57806336568abe146103ec5780633927c0751461040b5780633d85ac331461041e575f80fd5b806316c38b3c1161021657806326e67a37116101fc57806326e67a37146103635780632de113761461038f5780632f2ff15d146103ae575f80fd5b806316c38b3c14610308578063248a9ca314610327575f80fd5b8062bf2e801461024657806301e336671461029957806301ffc9a7146102ba5780631095b6d7146102e9575b5f80fd5b348015610251575f80fd5b50600154610281907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b3480156102a4575f80fd5b506102b86102b336600461267b565b610868565b005b3480156102c5575f80fd5b506102d96102d43660046126b4565b6108a3565b6040519015158152602001610290565b3480156102f4575f80fd5b506102b861030336600461267b565b61093b565b348015610313575f80fd5b506102b86103223660046126f3565b610ac4565b348015610332575f80fd5b50610355610341366004612712565b5f9081526020819052604090206001015490565b604051908152602001610290565b34801561036e575f80fd5b5061038261037d36600461273c565b610ae8565b6040516102909190612755565b34801561039a575f80fd5b506102d96103a936600461279b565b610b6b565b3480156103b9575f80fd5b506102b86103c83660046127b4565b610c4c565b3480156103d8575f80fd5b506102b86103e7366004612823565b610c70565b3480156103f7575f80fd5b506102b86104063660046127b4565b610d33565b6102b86104193660046128c2565b610d65565b348015610429575f80fd5b506102b8610438366004612a3b565b610e53565b6102b861044b366004612b50565b611035565b34801561045b575f80fd5b5060015460ff166102d9565b348015610472575f80fd5b506006546104939073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610290565b3480156104c3575f80fd5b506103556104d2366004612bca565b611089565b3480156104e2575f80fd5b506103556104f1366004612bca565b6111e5565b348015610501575f80fd5b506102b861051036600461279b565b611365565b348015610520575f80fd5b506002546104939073ffffffffffffffffffffffffffffffffffffffff1681565b6102b861054f366004612c34565b611402565b6102b8610562366004612cf0565b6114e1565b348015610572575f80fd5b506102d96105813660046127b4565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156105c1575f80fd5b506106436105d036600461273c565b60056020525f90815260409020805460019091015467ffffffffffffffff8083169261ffff68010000000000000000820416926fffffffffffffffffffffffffffffffff6a0100000000000000000000909204821692918116917001000000000000000000000000000000009091041685565b6040805167ffffffffffffffff968716815261ffff90951660208601526fffffffffffffffffffffffffffffffff938416908501529116606083015291909116608082015260a001610290565b34801561069b575f80fd5b506103555f81565b3480156106ae575f80fd5b506103556106bd366004612d5e565b611616565b3480156106cd575f80fd5b506007546104939073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f9575f80fd5b506102b8610708366004612dad565b6117a3565b348015610718575f80fd5b5060015461049390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b348015610749575f80fd5b506102b861075836600461279b565b611851565b348015610768575f80fd5b50610355610777366004612d5e565b6118f5565b348015610787575f80fd5b506102b8610796366004612dc6565b611a56565b6102b86107a9366004612e45565b611a9f565b3480156107b9575f80fd5b506001546107e7907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610290565b34801561080b575f80fd5b506102b861081a3660046127b4565b611b7d565b34801561082a575f80fd5b506006546108539074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610290565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561089281611ba1565b61089d848484611bae565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061093557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561096581611ba1565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff166109e2576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610a4f575f80fd5b505af1158015610a61573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b5f610ace81611ba1565b8115610ae057610adc611be3565b5050565b610adc611c62565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610b5f57602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b305790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610bbe57505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610c33575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610c4057506001919050565b505f919050565b919050565b5f82815260208190526040902060010154610c6681611ba1565b61089d8383611cb9565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610c9a81611ba1565b610ca2611d89565b6007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610cfc90879087908790600401612ec6565b5f604051808303815f87803b158015610d13575f80fd5b505af1158015610d25573d5f803e3d5ffd5b5050505061089d6001600455565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610d8f81611ba1565b610d97611d89565b610db788610da58686611dcc565b610daf8787611dee565b8a8a8a611e06565b506007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610e1290879087908790600401612ec6565b5f604051808303815f87803b158015610e29575f80fd5b505af1158015610e3b573d5f803e3d5ffd5b50505050610e496001600455565b5050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610e7d81611ba1565b5f5b8251811015610ff9575f838281518110610e9b57610e9b612ee9565b6020908102919091018101516040805160a080820183528385015167ffffffffffffffff908116835260608086015161ffff9081168589019081526080808901516fffffffffffffffffffffffffffffffff908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff165f9081526005909a5296909820945185549851945188166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff9590921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090991690841617979097179290921695909517825551600191820180549351909516700100000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931693169290921717909155919091019050610e7f565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc53826040516110299190612f16565b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561105f81611ba1565b611067611d89565b611075878787878787611e06565b506110806001600455565b50505050505050565b5f8461109481610b6b565b6110ca576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110d2611f73565b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a1660208084018290528a831684860152606084018a905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f434ee01600000000000000000000000000000000000000000000000000000000815292936101009091049091169163434ee0169161119a918591908a908a90600401612fbc565b602060405180830381865afa1580156111b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d99190613079565b98975050505050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61121081611ba1565b8561121a81610b6b565b611250576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8b1660208084018290528b831684860152606084018b905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f566ef76200000000000000000000000000000000000000000000000000000000815292936101009091049091169163566ef76291611318918591908b908b90600401612fbc565b6020604051808303815f875af1158015611334573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113589190613079565b9998505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561138f81611ba1565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561142c81611ba1565b611434611d89565b6006546040517f91d20fa100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906391d20fa1908490349061149c908f908f908f908f908f908f908f908f90600401613090565b5f604051808303818589803b1580156114b3575f80fd5b5088f11580156114c5573d5f803e3d5ffd5b5050505050506114d56001600455565b50505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561150b81611ba1565b611513611d89565b6006545f9061155190602085019074010000000000000000000000000000000000000000900463ffffffff16611549828761279b565b898989611e06565b90505f61155e8234613128565b60065490915073ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08601358360208801611593818a61279b565b60808a01356115a560a08c018c61313b565b6115b260c08e018e61313b565b6040518a63ffffffff1660e01b81526004016115d497969594939291906131d6565b5f604051808303818589803b1580156115eb575f80fd5b5088f11580156115fd573d5f803e3d5ffd5b505050505050505061160f6001600455565b5050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61164181611ba1565b8461164b81610b6b565b611681576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528881166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f65003784000000000000000000000000000000000000000000000000000000008152929361010090910490911691636500378491611758918591908b908b90600401613239565b6020604051808303815f875af1158015611774573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117989190613079565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756117cd81611ba1565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561187b81611ba1565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611029565b5f8361190081610b6b565b611936576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528781166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f337c7a9e00000000000000000000000000000000000000000000000000000000815292936101009091049091169163337c7a9e91611a0d918591908a908a90600401613239565b602060405180830381865afa158015611a28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4c9190613079565b9695505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a8081611ba1565b63ffffffff84165f90815260036020526040902061160f9084846125a0565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611ac981611ba1565b611ad1611d89565b60065473ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08401353460208601611b03818861279b565b6080880135611b1560a08a018a61313b565b611b2260c08c018c61313b565b6040518a63ffffffff1660e01b8152600401611b4497969594939291906131d6565b5f604051808303818589803b158015611b5b575f80fd5b5088f1158015611b6d573d5f803e3d5ffd5b505050505050610adc6001600455565b5f82815260208190526040902060010154611b9781611ba1565b61089d8383611fb2565b611bab8133612077565b50565b73ffffffffffffffffffffffffffffffffffffffff8316611bd857611bd38282612101565b505050565b611bd3838383612203565b611beb611f73565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611c6a612271565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611c38565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015611d1657505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15611d755760018054601590611d4e907501000000000000000000000000000000000000000000900467ffffffffffffffff166132e9565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836122ad565b5060019392505050565b600260045403611dc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600455565b5f611ddb6031602d848661330f565b611de491613336565b60e01c9392505050565b5f611dff611dfc84846123a6565b90565b9392505050565b5f808367ffffffffffffffff811115611e2157611e2161294f565b604051908082528060200260200182016040528015611e4a578160200160208202803683370190505b5090505f5b84811015611f26575f868683818110611e6a57611e6a612ee9565b905060400201803603810190611e80919061337e565b90505f815f015173ffffffffffffffffffffffffffffffffffffffff16826020015187906040515f60405180830381858888f193505050503d805f8114611ee2576040519150601f19603f3d011682016040523d82523d5f602084013e611ee7565b606091505b5050905080848481518110611efe57611efe612ee9565b911515602092830291909101820152820151611f1a90866133d3565b94505050600101611e4f565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c3468888888888886604051611f6096959493929190613422565b60405180910390a1509695505050505050565b60015460ff1615611fb0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561200e57505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b1561206d5760018054601590612046907501000000000000000000000000000000000000000000900467ffffffffffffffff166134b2565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836123be565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610adc576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661214e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146121a4576040519150601f19603f3d011682016040523d82523d5f602084013e6121a9565b606091505b5050905080611bd3576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016120f8565b73ffffffffffffffffffffffffffffffffffffffff8216612250576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bd373ffffffffffffffffffffffffffffffffffffffff84168383612477565b60015460ff16611fb0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561233d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610935565b505f610935565b5f6123b560516031848661330f565b611dff916134f3565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610935565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251611bd393879390925f9283929183919082885af180612520576040513d5f823e3d81fd5b50505f513d91508115612537578060011415612551565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561089d576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016120f8565b828054828255905f5260205f2090601f01602090048101928215612634579160200282015f5b8382111561260657833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026125c6565b80156126325782816101000a81549060ff02191690556001016020815f01049283019260010302612606565b505b50612640929150612644565b5090565b5b80821115612640575f8155600101612645565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f805f6060848603121561268d575f80fd5b61269684612658565b92506126a460208501612658565b9150604084013590509250925092565b5f602082840312156126c4575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611dff575f80fd5b5f60208284031215612703575f80fd5b81358015158114611dff575f80fd5b5f60208284031215612722575f80fd5b5035919050565b803563ffffffff81168114610c47575f80fd5b5f6020828403121561274c575f80fd5b611dff82612729565b602080825282518282018190525f9190848201906040850190845b8181101561278f57835160ff1683529284019291840191600101612770565b50909695505050505050565b5f602082840312156127ab575f80fd5b611dff82612658565b5f80604083850312156127c5575f80fd5b823591506127d560208401612658565b90509250929050565b5f8083601f8401126127ee575f80fd5b50813567ffffffffffffffff811115612805575f80fd5b60208301915083602082850101111561281c575f80fd5b9250929050565b5f805f60408486031215612835575f80fd5b833567ffffffffffffffff81111561284b575f80fd5b612857868287016127de565b909790965060209590950135949350505050565b5f6060828403121561287b575f80fd5b50919050565b5f8083601f840112612891575f80fd5b50813567ffffffffffffffff8111156128a8575f80fd5b6020830191508360208260061b850101111561281c575f80fd5b5f805f805f805f60e0888a0312156128d8575f80fd5b6128e2898961286b565b9650606088013567ffffffffffffffff808211156128fe575f80fd5b61290a8b838c01612881565b909850965060808a0135955060a08a0135915080821115612929575f80fd5b506129368a828b016127de565b989b979a5095989497959660c090950135949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff8111828210171561299f5761299f61294f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156129ec576129ec61294f565b604052919050565b803567ffffffffffffffff81168114610c47575f80fd5b803561ffff81168114610c47575f80fd5b80356fffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f6020808385031215612a4c575f80fd5b823567ffffffffffffffff80821115612a63575f80fd5b818501915085601f830112612a76575f80fd5b813581811115612a8857612a8861294f565b612a96848260051b016129a5565b818152848101925060c0918202840185019188831115612ab4575f80fd5b938501935b82851015612b445780858a031215612acf575f80fd5b612ad761297c565b612ae086612729565b8152612aed8787016129f4565b878201526040612afe8188016129f4565b908201526060612b0f878201612a0b565b908201526080612b20878201612a1c565b9082015260a0612b31878201612a1c565b9082015284529384019392850192612ab9565b50979650505050505050565b5f805f805f8060e08789031215612b65575f80fd5b612b6f888861286b565b9550612b7d60608801612729565b9450612b8b60808801612658565b935060a087013567ffffffffffffffff811115612ba6575f80fd5b612bb289828a01612881565b979a969950949794969560c090950135949350505050565b5f805f805f60808688031215612bde575f80fd5b612be786612729565b9450612bf560208701612658565b935060408601359250606086013567ffffffffffffffff811115612c17575f80fd5b612c23888289016127de565b969995985093965092949392505050565b5f805f805f805f805f60e08a8c031215612c4c575f80fd5b612c558a612658565b9850612c6360208b01612658565b975060408a01359650612c7860608b01612a0b565b955060808a013567ffffffffffffffff80821115612c94575f80fd5b612ca08d838e016127de565b909750955060a08c0135915080821115612cb8575f80fd5b50612cc58c828d016127de565b9a9d999c50979a9699959894979660c00135949350505050565b5f610100828403121561287b575f80fd5b5f805f8060608587031215612d03575f80fd5b843567ffffffffffffffff80821115612d1a575f80fd5b612d2688838901612881565b9096509450602087013593506040870135915080821115612d45575f80fd5b50612d5287828801612cdf565b91505092959194509250565b5f805f60408486031215612d70575f80fd5b612d7984612658565b9250602084013567ffffffffffffffff811115612d94575f80fd5b612da0868287016127de565b9497909650939450505050565b5f60208284031215612dbd575f80fd5b611dff82612a0b565b5f805f60408486031215612dd8575f80fd5b612de184612729565b9250602084013567ffffffffffffffff80821115612dfd575f80fd5b818601915086601f830112612e10575f80fd5b813581811115612e1e575f80fd5b8760208260051b8501011115612e32575f80fd5b6020830194508093505050509250925092565b5f60208284031215612e55575f80fd5b813567ffffffffffffffff811115612e6b575f80fd5b612e7784828501612cdf565b949350505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f612ed9604083018587612e7f565b9050826020830152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f919060409081850190868401855b82811015612faf578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c09093019290850190600101612f32565b5091979650505050505050565b845173ffffffffffffffffffffffffffffffffffffffff908116825260208087015163ffffffff1690830152604080870151909116818301526060808701519083015260808087015161ffff90811682850152865467ffffffffffffffff80821660a08701529381901c90911660c085015260501c6fffffffffffffffffffffffffffffffff90811660e08501526001870154908116610100850152901c166101208201525f610160806101408401526117988184018587612e7f565b5f60208284031215613089575f80fd5b5051919050565b5f73ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525087604083015261ffff8716606083015260c060808301526130d960c083018688612e7f565b82810360a08401526130ec818587612e7f565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610935576109356130fb565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261316e575f80fd5b83018035915067ffffffffffffffff821115613188575f80fd5b60200191503681900382131561281c575f80fd5b63ffffffff6131aa82612729565b1682526020810135602083015267ffffffffffffffff6131cc604083016129f4565b1660408301525050565b6131e0818961319c565b73ffffffffffffffffffffffffffffffffffffffff8716606082015285608082015260e060a08201525f61321860e083018688612e7f565b82810360c084015261322b818587612e7f565b9a9950505050505050505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff8088511684528060208901511660208501525061ffff60408801511660408401526132d56060840187805467ffffffffffffffff808216845261ffff8260401c1660208501526fffffffffffffffffffffffffffffffff808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b806101008401526117988184018587612e7f565b5f67ffffffffffffffff808316818103613305576133056130fb565b6001019392505050565b5f808585111561331d575f80fd5b83861115613329575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156133765780818660040360031b1b83161692505b505092915050565b5f6040828403121561338e575f80fd5b6040516040810181811067ffffffffffffffff821117156133b1576133b161294f565b6040526133bd83612658565b8152602083013560208201528091505092915050565b80820180821115610935576109356130fb565b5f815180845260208085019450602084015f5b838110156134175781511515875295820195908201906001016133f9565b509495945050505050565b5f60e08201613431838a61319c565b63ffffffff8816606084015273ffffffffffffffffffffffffffffffffffffffff878116608085015260e060a085015290859052859061010084015f5b8781101561349f578261348085612658565b168252602084810135908301526040938401939091019060010161346e565b5084810360c08601526130ec81876133e6565b5f67ffffffffffffffff8216806134cb576134cb6130fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b80356020831015610935577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b169291505056fea2646970667358221220bf4067662d56dc81125eda238718adb88046662d26b0b352f03d651c8af9702b64736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b5038038062001b508339810160408190526200003391620000cf565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000080565b5063ffffffff1660a052670de0b6b3a7640000608052620000fb565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215620000e0575f80fd5b815163ffffffff81168114620000f4575f80fd5b9392505050565b60805160a051611a2c620001245f395f818161023a01526102ee01525f61083d0152611a2c5ff3fe608060405260043610610096575f3560e01c8063566ef76211610066578063715018a61161004c578063715018a6146101715780638da5cb5b14610185578063f2fde38b146101b8575f80fd5b8063566ef762146101335780636500378414610152575f80fd5b806301e33667146100a1578063337c7a9e146100c2578063434ee016146100f457806354fd4d5014610113575f80fd5b3661009d57005b5f80fd5b3480156100ac575f80fd5b506100c06100bb366004611549565b6101d7565b005b3480156100cd575f80fd5b506100e16100dc3660046115dd565b6101ef565b6040519081526020015b60405180910390f35b3480156100ff575f80fd5b506100e161010e366004611644565b610408565b34801561011e575f80fd5b506040805160018082526020820152016100eb565b34801561013e575f80fd5b506100e161014d366004611644565b61060a565b34801561015d575f80fd5b506100e161016c3660046115dd565b610620565b34801561017c575f80fd5b506100c061062d565b348015610190575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100eb565b3480156101c3575f80fd5b506100c06101d236600461168d565b610640565b6101df6106a3565b6101ea8383836106f5565b505050565b5f6101fd60208501856116ad565b67ffffffffffffffff165f0361026c576040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024015b60405180910390fd5b5f80806102a960018261028260208b018b6116ad565b61029260a08c0160808d016116ad565b6102a260808d0160608e016116f1565b8b8b610725565b919450925090505f8080806102c160208d018d61168d565b6040517f88a4124c00000000000000000000000000000000000000000000000000000000815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152871660248201526044810188905273ffffffffffffffffffffffffffffffffffffffff91909116906388a4124c90606401608060405180830381865afa158015610360573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610384919061170c565b929650909450925090506103ce846103a260408e0160208f0161175e565b8e60400160208101906103b5919061175e565b8e60400160208101906103c891906116f1565b856107b5565b97506103ee8784848f60400160208101906103e9919061175e565b6108ab565b6103f890896117ac565b9c9b505050505050505050505050565b5f61041660208501856116ad565b67ffffffffffffffff165f036104715761043660408601602087016117c5565b6040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610263565b5f806104c38161048f61048a60408b0160208c016117c5565b505f90565b61049c60208a018a6116ad565b6104ac60a08b0160808c016116ad565b6104bc60808c0160608d016116f1565b8a8a610725565b5090925090505f8080806104da60208c018c61168d565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61050560408e0160208f016117c5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff91909116600482015260608e0135602482015260448101889052606401608060405180830381865afa15801561056e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610592919061170c565b929650909450925090506105d6846105b060408d0160208e0161175e565b8d60800160208101906105c3919061175e565b8d60400160208101906103c891906116f1565b96506105f18684848e60800160208101906103e9919061175e565b6105fb90886117ac565b9b9a5050505050505050505050565b5f61061785858585610408565b95945050505050565b5f610617858585856101ef565b6106356106a3565b61063e5f610911565b565b6106486106a3565b73ffffffffffffffffffffffffffffffffffffffff8116610697576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610263565b6106a081610911565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461063e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610263565b73ffffffffffffffffffffffffffffffffffffffff831661071a576101ea8282610985565b6101ea838383610a87565b5f805f8061073686868d8d8b610af5565b805160608201516080830151919650935090915061075e9067ffffffffffffffff8a166117e8565b60208201516107779067ffffffffffffffff8c166117ac565b61078191906117ac565b92508060400151156107a757606461079a8460666117e8565b6107a491906117ff565b92505b509750975097945050505050565b5f8061ffff8616156107c757856107c9565b845b90505f6127106107dd61ffff84168a6117e8565b6107e791906117ff565b90506fffffffffffffffffffffffffffffffff8416158061081857506fffffffffffffffffffffffffffffffff8516155b156108265791506106179050565b5f88856fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000886fffffffffffffffffffffffffffffffff1661087991906117e8565b61088391906117ff565b61088d91906117ac565b905081811161089c578161089e565b805b9998505050505050505050565b5f8415610909576127108261ffff16846fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff16886108eb91906117e8565b6108f591906117ff565b6108ff91906117e8565b61061791906117ff565b949350505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166109d2576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610a28576040519150601f19603f3d011682016040523d82523d5f602084013e610a2d565b606091505b50509050806101ea576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610263565b73ffffffffffffffffffffffffffffffffffffffff8216610ad4576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101ea73ffffffffffffffffffffffffffffffffffffffff8416838361110f565b610b2a6040518060a001604052805f81526020015f81526020015f151581526020015f63ffffffff1681526020015f81525090565b5f859003610b63576040517e575ea100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80805b87831015610fbc575f368180610b7e8d8d8961119c565b9950919550935091508690507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff851601610ca6578a15610bf1576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610bfd85856111f1565b915091508b8015610c1f57505f816fffffffffffffffffffffffffffffffff16115b15610c5b576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff87166004820152602401610263565b806fffffffffffffffffffffffffffffffff168a5f01818151610c7e91906117ac565b905250610c9d6fffffffffffffffffffffffffffffffff8316896117ac565b97505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff851601610d48578a15610d0d576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f610d18848461126c565b509050806fffffffffffffffffffffffffffffffff16895f01818151610d3e91906117ac565b905250610fb39050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff851601610e75578915610daf576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610dbb85856112c1565b9250925050816fffffffffffffffffffffffffffffffff165f03610e0b576040517fa169d0e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806fffffffffffffffffffffffffffffffff168a5f01818151610e2e91906117ac565b90525060208a0180516fffffffffffffffffffffffffffffffff84169190610e579083906117ac565b90525060808a01805190610e6a82611837565b815250505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60ff851601610eab5760016040890152610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff851601610f7c578a610f11576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f805f610f1e868661134b565b925092509250806fffffffffffffffffffffffffffffffff168b5f01818151610f4791906117ac565b905250610f666fffffffffffffffffffffffffffffffff84168a6117ac565b9850610f72828961186e565b9750505050610fb3565b6040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b50505050610b67565b828814610ff8576040517f990776ea00000000000000000000000000000000000000000000000000000000815260048101849052602401610263565b83516fffffffffffffffffffffffffffffffff861610156110625783516040517e84ce0200000000000000000000000000000000000000000000000000000000815260048101919091526fffffffffffffffffffffffffffffffff86166024820152604401610263565b815f0361109b576040517fe5eb8f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8680156110ac575063ffffffff8116155b156110e3576040517f6cc33f0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81846020018181516110f591906117ac565b90525063ffffffff16606084015250909695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526101ea9084906113cc565b5f368160018401816111af888884611471565b6002929092019190506111c3888884611497565b94506001820161ffff821683016111dc81838b8d611892565b979b909a50969850505061ffff160193505050565b5f8060108314801590611205575060208314155b1561123c576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124784845f6114bb565b915060208314611257575f611263565b611263848460106114bb565b90509250929050565b5f80603083146112a8576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112b384845f6114bb565b9150611263848460106114e1565b5f8080601284148015906112d6575060228414155b1561130d576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61131885855f611471565b9250611326858560026114bb565b915060228414611336575f611342565b611342858560126114bb565b90509250925092565b5f808060148414801590611360575060248414155b15611397576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113a285855f6114bb565b92506113b0858560106114fb565b9150602484146113c0575f611342565b611342858560146114bb565b5f8060205f8451602086015f885af1806113eb576040513d5f823e3d81fd5b50505f513d9150811561140257806001141561141c565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561146b576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610263565b50505050565b5f6002820161148281848688611892565b61148b916118b9565b60f01c95945050505050565b5f8383838181106114aa576114aa611901565b919091013560f81c95945050505050565b5f601082016114cc81848688611892565b6114d59161192e565b60801c95945050505050565b5f602082016114f281848688611892565b61061791611974565b5f6004820161150c81848688611892565b611515916119b0565b60e01c95945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611544575f80fd5b919050565b5f805f6060848603121561155b575f80fd5b61156484611521565b925061157260208501611521565b9150604084013590509250925092565b5f60a08284031215611592575f80fd5b50919050565b5f8083601f8401126115a8575f80fd5b50813567ffffffffffffffff8111156115bf575f80fd5b6020830191508360208285010111156115d6575f80fd5b9250929050565b5f805f808486036101208112156115f2575f80fd5b60608112156115ff575f80fd5b508493506116108660608701611582565b925061010085013567ffffffffffffffff81111561162c575f80fd5b61163887828801611598565b95989497509550505050565b5f805f806101608587031215611658575f80fd5b6116628686611582565b93506116718660a08701611582565b925061014085013567ffffffffffffffff81111561162c575f80fd5b5f6020828403121561169d575f80fd5b6116a682611521565b9392505050565b5f602082840312156116bd575f80fd5b813567ffffffffffffffff811681146116a6575f80fd5b6fffffffffffffffffffffffffffffffff811681146106a0575f80fd5b5f60208284031215611701575f80fd5b81356116a6816116d4565b5f805f806080858703121561171f575f80fd5b845193506020850151611731816116d4565b6040860151909350611742816116d4565b6060860151909250611753816116d4565b939692955090935050565b5f6020828403121561176e575f80fd5b813561ffff811681146116a6575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156117bf576117bf61177f565b92915050565b5f602082840312156117d5575f80fd5b813563ffffffff811681146116a6575f80fd5b80820281158282048414176117bf576117bf61177f565b5f82611832577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118675761186761177f565b5060010190565b63ffffffff81811683821601908082111561188b5761188b61177f565b5092915050565b5f80858511156118a0575f80fd5b838611156118ac575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156118f95780818660020360031b1b83161692505b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156118f95760109490940360031b84901b1690921692915050565b803560208310156117bf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156118f95760049490940360031b84901b169092169291505056fea2646970667358221220ca9d45c801b5ccbb302dcb12078bab5268980f6f82de99fc1d137bac6c0848e664736f6c6343000816003360c060405234801562000010575f80fd5b5060405162004aae38038062004aae8339810160408190526200003391620004ca565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b03861617905582828686612ee05f865f5b8551811015620000d357620000c97f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000b557620000b5620005a5565b60200260200101516200027860201b60201c565b5060010162000071565b505f5b815181101562000124576200011a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000b557620000b5620005a5565b50600101620000d6565b505050505050806001600160401b03165f036200015457604051635f86e17760e01b815260040160405180910390fd5b806001600160401b0316825110156200019a5781516040516378e2c15760e11b81526001600160401b039182166004820152908216602482015260440160405180910390fd5b5f805b835181101562000229575f848281518110620001bd57620001bd620005a5565b60200260200101519050826001600160a01b0316816001600160a01b031611620001fa576040516305fa937f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600460205260409020805460ff19166001908117909155909250016200019d565b50509051600580546001600160401b0393841668010000000000000000026001600160801b0319909116939092169290921717905550505063ffffffff92831660805250501660a052620005f3565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015620002c957505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620003165760018054601590620002f190600160a81b90046001600160401b0316620005b9565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200032283836200032e565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff16620003d1575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003883390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000328565b505f62000328565b805163ffffffff81168114620003ed575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b0381168114620003ed575f80fd5b5f82601f8301126200042d575f80fd5b815160206001600160401b03808311156200044c576200044c620003f2565b8260051b604051601f19603f83011681018181108482111715620004745762000474620003f2565b604052938452602081870181019490810192508785111562000494575f80fd5b6020870191505b84821015620004bf57620004af8262000406565b835291830191908301906200049b565b979650505050505050565b5f805f805f805f60e0888a031215620004e1575f80fd5b620004ec88620003d9565b9650620004fc60208901620003d9565b60408901519096506001600160401b038082111562000519575f80fd5b620005278b838c016200041d565b96506200053760608b0162000406565b955060808a01519150808211156200054d575f80fd5b6200055b8b838c016200041d565b945060a08a01519150808216821462000572575f80fd5b60c08a01519193508082111562000587575f80fd5b50620005968a828b016200041d565b91505092959891949750929550565b634e487b7160e01b5f52603260045260245ffd5b5f6001600160401b038281166002600160401b03198101620005e957634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b60805160a05161447d620006315f395f818161090e0152818161253401526126c301525f818161084f0152818161173901526122a4015261447d5ff3fe6080604052600436106102c0575f3560e01c806395d376d711610170578063cd88b903116100d1578063e395eb5c11610087578063f42ed2ed11610062578063f42ed2ed1461096e578063fd62e75014610981578063fdb9b0f1146109a1575f80fd5b8063e395eb5c146108fd578063f010cb2314610930578063f3b4ebd01461094f575f80fd5b8063d2ae2104116100b7578063d2ae210414610886578063d547741f146108bf578063dafe0ccc146108de575f80fd5b8063cd88b9031461081f578063cf34c7681461083e575f80fd5b8063c358de0a11610126578063c5e193cd1161010c578063c5e193cd146107b4578063c7a823e0146107d3578063c7b2370b14610800575f80fd5b8063c358de0a14610764578063c416aa5114610783575f80fd5b8063a217fddf11610156578063a217fddf14610704578063aef18bf714610717578063b143044b14610745575f80fd5b806395d376d71461064e5780639e94496514610661575f80fd5b806330bb3aac116102255780635c975abb116101db578063741bef1a116101b6578063741bef1a1461058f5780638585c945146105e057806391d14854146105ff575f80fd5b80635c975abb1461052b578063724e78da14610542578063736c0d5b14610561575f80fd5b806336568abe1161020b57806336568abe146104ce57806352d3b871146104ed5780635553fb8e1461050c575f80fd5b806330bb3aac1461049057806331cb6105146104af575f80fd5b80631703a0181161027a57806326e67a371161026057806326e67a37146104265780632de11376146104525780632f2ff15d14610471575f80fd5b80631703a018146103a5578063248a9ca3146103ea575f80fd5b806301ffc9a7116102aa57806301ffc9a7146103385780631095b6d71461036757806316c38b3c14610386575f80fd5b8062bf2e80146102c457806301e3366714610317575b5f80fd5b3480156102cf575f80fd5b506001546102ff907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b348015610322575f80fd5b50610336610331366004613597565b6109c0565b005b348015610343575f80fd5b506103576103523660046135d5565b6109fb565b604051901515815260200161030e565b348015610372575f80fd5b50610336610381366004613597565b610a93565b348015610391575f80fd5b506103366103a036600461362a565b610c1d565b3480156103b0575f80fd5b506005546103d19068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161030e565b3480156103f5575f80fd5b50610418610404366004613643565b5f9081526020819052604090206001015490565b60405190815260200161030e565b348015610431575f80fd5b5061044561044036600461366d565b610c41565b60405161030e9190613686565b34801561045d575f80fd5b5061035761046c3660046136cc565b610cc4565b34801561047c575f80fd5b5061033661048b3660046136e7565b610da5565b34801561049b575f80fd5b506104186104aa366004613771565b610ef4565b3480156104ba575f80fd5b506103366104c93660046137e4565b611067565b3480156104d9575f80fd5b506103366104e83660046136e7565b6110aa565b3480156104f8575f80fd5b50610336610507366004613817565b6110dc565b348015610517575f80fd5b50610418610526366004613897565b6112a5565b348015610536575f80fd5b5060015460ff16610357565b34801561054d575f80fd5b5061033661055c3660046136cc565b611418565b34801561056c575f80fd5b5061035761057b3660046136cc565b60046020525f908152604090205460ff1681565b34801561059a575f80fd5b506002546105bb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030e565b3480156105eb575f80fd5b506103366105fa3660046138ea565b6114bd565b34801561060a575f80fd5b506103576106193660046136e7565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61041861065c366004613919565b611502565b34801561066c575f80fd5b506106c961067b36600461366d565b60066020525f908152604090205467ffffffffffffffff81169068010000000000000000810461ffff16906a010000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff909416845261ffff90921660208401526fffffffffffffffffffffffffffffffff169082015260600161030e565b34801561070f575f80fd5b506104185f81565b348015610722575f80fd5b50610357610731366004613643565b60076020525f908152604090205460ff1681565b348015610750575f80fd5b5061033661075f3660046139be565b6116d7565b34801561076f575f80fd5b5061033661077e3660046139fd565b6119db565b34801561078e575f80fd5b506001546105bb90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156107bf575f80fd5b506104186107ce366004613897565b611a89565b3480156107de575f80fd5b506107f26107ed366004613a16565b611c62565b60405161030e929190613a7e565b34801561080b575f80fd5b5061033661081a3660046136cc565b611e65565b34801561082a575f80fd5b50610336610839366004613ac9565b611f09565b348015610849575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161030e565b348015610891575f80fd5b506001546103d1907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b3480156108ca575f80fd5b506103366108d93660046136e7565b611f59565b3480156108e9575f80fd5b506103366108f8366004613597565b61206e565b348015610908575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b34801561093b575f80fd5b5061041861094a366004613b0b565b61219e565b34801561095a575f80fd5b50610336610969366004613b71565b6121d9565b61041861097c366004613bab565b61244a565b34801561098c575f80fd5b506005546103d19067ffffffffffffffff1681565b3480156109ac575f80fd5b506104186109bb366004613bab565b612603565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109ea81612790565b6109f584848461279a565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610a8d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610abd81612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16610b3a576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610ba7575f80fd5b505af1158015610bb9573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b5f610c2781612790565b8115610c3957610c356127cf565b5050565b610c3561284e565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cb857602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610c895790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610d1757505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610d8c575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610d9957506001919050565b505f919050565b919050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480610df357507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610e1d57507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b15610e6057303314610e5b576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eea565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb057610e5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6040517f94fdc372000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b6109f583836128a5565b5f83610eff81610cc4565b610f35576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a16602080840182905267ffffffffffffffff808c16858701528a8416606086015260055468010000000000000000900416608085015260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660a08601525f92835260069091529084902093517f7bfa20a9000000000000000000000000000000000000000000000000000000008152929361010090910490911691637bfa20a99161101c918591908a908a90600401613c97565b602060405180830381865afa158015611037573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105b9190613d63565b98975050505050505050565b3033146110a0576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c358282612975565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561110681612790565b5f5b82811015611266573684848381811061112357611123613d7a565b9050608002019050604051806060016040528082602001602081019061114991906138ea565b67ffffffffffffffff16815260200161116860608401604085016139fd565b61ffff1681526020016111816080840160608501613dc6565b6fffffffffffffffffffffffffffffffff16905260065f6111a5602085018561366d565b63ffffffff16815260208082019290925260409081015f20835181549385015194909201516fffffffffffffffffffffffffffffffff166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff61ffff90951668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941667ffffffffffffffff90931692909217929092179290921691909117905550600101611108565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051611298929190613ddf565b60405180910390a1505050565b5f816112b081610cc4565b6112e6576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808a16602080850182905267ffffffffffffffff808b168688015289851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517f7bfa20a9000000000000000000000000000000000000000000000000000000008152939461010090920490921692637bfa20a9926113ce928692600401613edd565b602060405180830381865afa1580156113e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140d9190613d63565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561144281612790565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146114f6576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ff81612b73565b50565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61152d81612790565b61153d60a08601608087016136cc565b61154681610cc4565b61157c576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810190915260025473ffffffffffffffffffffffffffffffffffffffff1681525f906020808201906115b6908a018a61366d565b63ffffffff1681526020016115d160808a0160608b016138ea565b67ffffffffffffffff1681526020016115f060a08a0160808b016136cc565b73ffffffffffffffffffffffffffffffffffffffff908116825260055468010000000000000000900467ffffffffffffffff166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff16604090940193909352929350610100909104169063df2b057e9083906006905f90611681908d018d61366d565b63ffffffff1663ffffffff1681526020019081526020015f2089896040518563ffffffff1660e01b81526004016116bb9493929190613c97565b6020604051808303815f875af11580156113e9573d5f803e3d5ffd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561170181612790565b5f5b828110156109f5573684848381811061171e5761171e613d7a565b90506020028101906117309190613fb2565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611766602083018361366d565b63ffffffff161461177757506119d3565b4281606001351161178857506119d3565b5f6117c0611799602084018461366d565b6117a960408501602086016136cc565b6117b66040860186613fee565b866060013561219e565b90505f6117d4826107ed6080860186613fee565b50905080611817576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a15050506119d3565b5f6118366118286040860186613fee565b6118319161404f565b612c8a565b905080156118cd575f8381526007602052604090205460ff1615611896577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab9784846040516118859291906140f7565b60405180910390a1505050506119d3565b5f83815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b5f806118df60408701602088016136cc565b73ffffffffffffffffffffffffffffffffffffffff166119026040880188613fee565b6040516119109291906141bc565b5f604051808303815f865af19150503d805f8114611949576040519150601f19603f3d011682016040523d82523d5f602084013e61194e565b606091505b5091509150816119cc578215611992575f85815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516119c39291906141cb565b60405180910390a15b5050505050505b600101611703565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a0581612790565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d906020016114b1565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de611ab481612790565b82611abe81610cc4565b611af4576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808b16602080850182905267ffffffffffffffff808c16868801528a851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517fdf2b057e00000000000000000000000000000000000000000000000000000000815293946101009092049092169263df2b057e92611bdc928692600401613edd565b6020604051808303815f875af1158015611bf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c1c9190613d63565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef84604051611c4f91815260200190565b60405180910390a1505050949350505050565b6005545f908190611c8a9068010000000000000000900467ffffffffffffffff166041614210565b8314611c9b57505f90506001611e5d565b5f611cf2866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290525f90605c01604051602081830303815290604052805190602001209050919050565b90505f805b60055468010000000000000000900467ffffffffffffffff16811015611e5257365f8888611d26856041614210565b90611d32866001614227565b611d3d906041614210565b92611d4a9392919061423a565b915091505f80611d8f8785858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612d7292505050565b5090925090505f816003811115611da857611da8613a51565b14611dc0575f60019850985050505050505050611e5d565b8573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611611e06575f60029850985050505050505050611e5d565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205460ff16611e45575f60039850985050505050505050611e5d565b5093505050600101611cf7565b5060015f9350935050505b935093915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611e8f81612790565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e0906020016114b1565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611f3381612790565b63ffffffff84165f908152600360205260409020611f529084846134be565b5050505050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480611fa757507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80611fd157507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b156120145730331461200f576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612064565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb05761200f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6109f58383612dbb565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561209881612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16612115576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f07b18bde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906307b18bde906044015f604051808303815f87803b158015612182575f80fd5b505af1158015612194573d5f803e3d5ffd5b5050505050505050565b5f85858386866040516020016121b8959493929190614261565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511612216576040517f0bbaf26300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3061222760408301602084016136cc565b73ffffffffffffffffffffffffffffffffffffffff161461229d5761225260408201602083016136cc565b6040517f1ce0bfcd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610ee1565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166122d1602083018361366d565b63ffffffff1614612324576122e9602082018261366d565b6040517f2697e1c200000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610ee1565b5f612335611799602084018461366d565b90505f612349826107ed6080860186613fee565b50905080612383576040517f15ecadee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526007602052604090205460ff16156123ce576040517f9d6a45a600000000000000000000000000000000000000000000000000000000815260048101839052602401610ee1565b5f828152600760205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556109f5907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217759061243890860186613fee565b81019061244591906136cc565b6128a5565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61247581612790565b8861247f81610cc4565b6124b5576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528c811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fbbc5a33b00000000000000000000000000000000000000000000000000000000815292936101009091049091169163bbc5a33b916125b4918591908d908d908d908d906004016142d2565b6020604051808303815f875af11580156125d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f49190613d63565b9b9a5050505050505050505050565b5f8761260e81610cc4565b612644576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528b811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fd358b30000000000000000000000000000000000000000000000000000000000815292936101009091049091169163d358b30091612743918591908c908c908c908c906004016142d2565b602060405180830381865afa15801561275e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127829190613d63565b9a9950505050505050505050565b6114ff8133612e80565b73ffffffffffffffffffffffffffffffffffffffff83166127c4576127bf8282612f05565b505050565b6127bf838383613007565b6127d7613075565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6128566130b4565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612824565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561290257505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15612961576001805460159061293a907501000000000000000000000000000000000000000000900467ffffffffffffffff16614397565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836130f0565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205481151560ff9091161515036129fb576040517f58c8d2a000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201528115156024820152604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260046020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001683151517905581612a6c57600554612a679060019067ffffffffffffffff166143bd565b612a84565b600554612a849067ffffffffffffffff1660016143e5565b60055490915067ffffffffffffffff680100000000000000009091048116908216811115612af2576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808416600483015282166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff84161790556040805173ffffffffffffffffffffffffffffffffffffffff8616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610c0f565b8067ffffffffffffffff165f03612bb6576040517f5f86e17700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff908116908216811015612c15576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808316600483015283166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a23249906020016114b1565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0223536e0000000000000000000000000000000000000000000000000000000014801590612d1f57507fffffffff0000000000000000000000000000000000000000000000000000000082167fab750e750000000000000000000000000000000000000000000000000000000014155b8015610a8d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f704316e500000000000000000000000000000000000000000000000000000000141592915050565b5f805f8351604103612da9576020840151604085015160608601515f1a612d9b888285856131e9565b955095509550505050612db4565b505081515f91506002905b9250925092565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015612e1757505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b15612e765760018054601590612e4f907501000000000000000000000000000000000000000000900467ffffffffffffffff16614406565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836132dc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c35576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216612f52576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612fa8576040519150601f19603f3d011682016040523d82523d5f602084013e612fad565b606091505b50509050806127bf576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216613054576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127bf73ffffffffffffffffffffffffffffffffffffffff84168383613395565b60015460ff16156130b2576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60015460ff166130b2576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556131803390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610a8d565b505f610a8d565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561322257505f915060039050826132d2565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613273573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166132c957505f9250600191508290506132d2565b92505f91508190505b9450945094915050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610a8d565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017815282516127bf93879390925f9283929183919082885af18061343e576040513d5f823e3d81fd5b50505f513d9150811561345557806001141561346f565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ee1565b828054828255905f5260205f2090601f01602090048101928215613552579160200282015f5b8382111561352457833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026134e4565b80156135505782816101000a81549060ff02191690556001016020815f01049283019260010302613524565b505b5061355e929150613562565b5090565b5b8082111561355e575f8155600101613563565b73ffffffffffffffffffffffffffffffffffffffff811681146114ff575f80fd5b5f805f606084860312156135a9575f80fd5b83356135b481613576565b925060208401356135c481613576565b929592945050506040919091013590565b5f602082840312156135e5575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114613614575f80fd5b9392505050565b80358015158114610da0575f80fd5b5f6020828403121561363a575f80fd5b6136148261361b565b5f60208284031215613653575f80fd5b5035919050565b803563ffffffff81168114610da0575f80fd5b5f6020828403121561367d575f80fd5b6136148261365a565b602080825282518282018190525f9190848201906040850190845b818110156136c057835160ff16835292840192918401916001016136a1565b50909695505050505050565b5f602082840312156136dc575f80fd5b813561361481613576565b5f80604083850312156136f8575f80fd5b82359150602083013561370a81613576565b809150509250929050565b803567ffffffffffffffff81168114610da0575f80fd5b5f8083601f84011261373c575f80fd5b50813567ffffffffffffffff811115613753575f80fd5b60208301915083602082850101111561376a575f80fd5b9250929050565b5f805f805f60808688031215613785575f80fd5b61378e8661365a565b945061379c60208701613715565b935060408601356137ac81613576565b9250606086013567ffffffffffffffff8111156137c7575f80fd5b6137d38882890161372c565b969995985093965092949392505050565b5f80604083850312156137f5575f80fd5b823561380081613576565b915061380e6020840161361b565b90509250929050565b5f8060208385031215613828575f80fd5b823567ffffffffffffffff8082111561383f575f80fd5b818501915085601f830112613852575f80fd5b813581811115613860575f80fd5b8660208260071b8501011115613874575f80fd5b60209290920196919550909350505050565b803561ffff81168114610da0575f80fd5b5f805f80608085870312156138aa575f80fd5b6138b385613886565b93506138c160208601613886565b92506138cf60408601613715565b915060608501356138df81613576565b939692955090935050565b5f602082840312156138fa575f80fd5b61361482613715565b5f60a08284031215613913575f80fd5b50919050565b5f805f6040848603121561392b575f80fd5b833567ffffffffffffffff80821115613942575f80fd5b61394e87838801613903565b94506020860135915080821115613963575f80fd5b506139708682870161372c565b9497909650939450505050565b5f8083601f84011261398d575f80fd5b50813567ffffffffffffffff8111156139a4575f80fd5b6020830191508360208260051b850101111561376a575f80fd5b5f80602083850312156139cf575f80fd5b823567ffffffffffffffff8111156139e5575f80fd5b6139f18582860161397d565b90969095509350505050565b5f60208284031215613a0d575f80fd5b61361482613886565b5f805f60408486031215613a28575f80fd5b83359250602084013567ffffffffffffffff811115613a45575f80fd5b6139708682870161372c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b82151581526040810160048310613abc577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8260208301529392505050565b5f805f60408486031215613adb575f80fd5b613ae48461365a565b9250602084013567ffffffffffffffff811115613aff575f80fd5b6139708682870161397d565b5f805f805f60808688031215613b1f575f80fd5b613b288661365a565b94506020860135613b3881613576565b9350604086013567ffffffffffffffff811115613b53575f80fd5b613b5f8882890161372c565b96999598509660600135949350505050565b5f60208284031215613b81575f80fd5b813567ffffffffffffffff811115613b97575f80fd5b613ba384828501613903565b949350505050565b5f805f805f805f6080888a031215613bc1575f80fd5b8735613bcc81613576565b9650602088013567ffffffffffffffff80821115613be8575f80fd5b613bf48b838c0161372c565b909850965060408a0135915080821115613c0c575f80fd5b613c188b838c0161372c565b909650945060608a0135915080821115613c30575f80fd5b50613c3d8a828b0161372c565b989b979a50959850939692959293505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f610140613d0e838873ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613d4f60c08401875467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8061012084015261140d8184018587613c50565b5f60208284031215613d73575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80356fffffffffffffffffffffffffffffffff81168114610da0575f80fd5b5f60208284031215613dd6575f80fd5b61361482613da7565b60208082528181018390525f90604080840186845b87811015613e6f5763ffffffff613e0a8361365a565b16835267ffffffffffffffff613e21868401613715565b168584015261ffff613e34858401613886565b168484015260606fffffffffffffffffffffffffffffffff613e57828501613da7565b16908401526080928301929190910190600101613df4565b5090979650505050505050565b5f81518084525f5b81811015613ea057602081850181015186830182015201613e84565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f610140613f54838773ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613f9560c08401865467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b80610120840152613fa881840185613e7c565b9695505050505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613fe4575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614021575f80fd5b83018035915067ffffffffffffffff82111561403b575f80fd5b60200191503681900382131561376a575f80fd5b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561408f5780818660040360031b1b83161692505b505092915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126140ca575f80fd5b830160208101925035905067ffffffffffffffff8111156140e9575f80fd5b80360382131561376a575f80fd5b6040815263ffffffff6141098461365a565b1660408201525f602084013561411e81613576565b73ffffffffffffffffffffffffffffffffffffffff1660608301526141466040850185614097565b60a0608085015261415b60e085018284613c50565b915050606085013560a08401526141756080860186614097565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08584030160c08601526141aa838284613c50565b93505050508260208301529392505050565b818382375f9101908152919050565b828152604060208201525f613ba36040830184613e7c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610a8d57610a8d6141e3565b80820180821115610a8d57610a8d6141e3565b5f8085851115614248575f80fd5b83861115614254575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008660e01b1681527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008560601b166004820152836018820152818360388301375f9101603801908152949350505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff808a511684528060208b01511660208501525067ffffffffffffffff60408a015116604084015261ffff60608a015116606084015261436160808401895467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8060e08401526143748184018789613c50565b905082810361010084015261438a818587613c50565b9998505050505050505050565b5f67ffffffffffffffff8083168181036143b3576143b36141e3565b6001019392505050565b67ffffffffffffffff8281168282160390808211156143de576143de6141e3565b5092915050565b67ffffffffffffffff8181168382160190808211156143de576143de6141e3565b5f67ffffffffffffffff82168061441f5761441f6141e3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019291505056fea26469706673582212208293bcc557e204de553c5250d4aeaa3a84335fc59a6c7b5a242fbc34745baa1464736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002470380380620024708339810160408190526200003391620000c8565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000079565b5063ffffffff90911660a052608052620000fe565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8060408385031215620000da575f80fd5b825163ffffffff81168114620000ee575f80fd5b6020939093015192949293505050565b60805160a0516123426200012e5f395f81816107ac015261082601525f81816109120152610cb901526123425ff3fe6080604052600436106100e7575f3560e01c80638da5cb5b11610087578063de0a93c311610057578063de0a93c314610322578063df2b057e14610396578063f2fde38b146103a9578063f5ff608f146103c8575f80fd5b80638da5cb5b1461029e5780639ac23d28146102d1578063bbc5a33b146102f0578063d358b30014610303575f80fd5b806339f26dfc116100c257806339f26dfc1461022c57806354fd4d501461024b578063715018a61461026b5780637bfa20a91461027f575f80fd5b806301e33667146100f257806310b65f76146101135780632565c24514610157575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5061011161010c366004611a78565b6103e7565b005b34801561011e575f80fd5b5061014461012d366004611ac2565b63ffffffff165f9081526001602052604090205490565b6040519081526020015b60405180910390f35b348015610162575f80fd5b506101ec610171366004611ac2565b60036020525f908152604090205463ffffffff8082169167ffffffffffffffff64010000000082048116926c0100000000000000000000000083049091169174010000000000000000000000000000000000000000810482169178010000000000000000000000000000000000000000000000009091041685565b6040805163ffffffff968716815267ffffffffffffffff95861660208201529390941693830193909352831660608201529116608082015260a00161014e565b348015610237575f80fd5b50610111610246366004611b13565b6103ff565b348015610256575f80fd5b5060408051600180825260208201520161014e565b348015610276575f80fd5b506101116104af565b34801561028a575f80fd5b50610144610299366004611bae565b6104c2565b3480156102a9575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b3480156102dc575f80fd5b506101116102eb366004611c15565b61068a565b6101446102fe366004611cd2565b610747565b34801561030e575f80fd5b5061014461031d366004611cd2565b610761565b34801561032d575f80fd5b50600254604080516effffffffffffffffffffffffffffff80841682526f0100000000000000000000000000000084041660208201527e0100000000000000000000000000000000000000000000000000000000000090920461ffff169082015260600161014e565b6101446103a4366004611bae565b61099c565b3480156103b4575f80fd5b506101116103c3366004611d67565b6109b2565b3480156103d3575f80fd5b506101116103e2366004611d80565b610a15565b6103ef610a8e565b6103fa838383610ae0565b505050565b610407610a8e565b6002805461ffff9092167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6effffffffffffffffffffffffffffff9485166f01000000000000000000000000000000027fffff00000000000000000000000000000000000000000000000000000000000090941694909516939093179190911792909216179055565b6104b7610a8e565b6104c05f610b10565b565b5f6104d06020850185611e04565b67ffffffffffffffff165f03610530576104f06040860160208701611ac2565b6040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b61053a8383610b84565b505f61055e61054f60a0880160808901611e04565b67ffffffffffffffff16610c25565b90505f8061056f6020890189611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61059a60408b0160208c01611ac2565b856105a860208c018c611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa158015610617573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063b9190611e3c565b93505050915061067e828860200160208101906106589190611e8e565b61066860c08c0160a08d01611e8e565b61067860608c0160408d01611ea7565b85610c32565b98975050505050505050565b610692610a8e565b8281146106cb576040517fb54ecc3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b83811015610740578282828181106106e7576106e7611ec2565b905060a0020160035f87878581811061070257610702611ec2565b90506020020160208101906107179190611ac2565b63ffffffff16815260208101919091526040015f206107368282611efb565b50506001016106cd565b5050505050565b5f610756878787878787610761565b979650505050505050565b5f61076f6020870187611e04565b67ffffffffffffffff165f036107d9576040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152602401610527565b6107e38383610b84565b505f6107f861054f60608a0160408b01611e04565b90505f8061080960208b018b611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c7f00000000000000000000000000000000000000000000000000000000000000008561085360208e018e611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa1580156108c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e69190611e3c565b9350505091505f6108f78989610d27565b90505f6fffffffffffffffffffffffffffffffff83166109377f0000000000000000000000000000000000000000000000000000000000000000846120c4565b6109419190612108565b905061098c610950828661211b565b61096060408e0160208f01611e8e565b8e60600160208101906109739190611e8e565b8e60400160208101906109869190611ea7565b87610c32565b9c9b505050505050505050505050565b5f6109a9858585856104c2565b95945050505050565b6109ba610a8e565b73ffffffffffffffffffffffffffffffffffffffff8116610a09576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610527565b610a1281610b10565b50565b610a1d610a8e565b5f5b818110156103fa57828282818110610a3957610a39611ec2565b9050604002016020013560015f015f858585818110610a5a57610a5a611ec2565b610a709260206040909202019081019150611ac2565b63ffffffff16815260208101919091526040015f2055600101610a1f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146104c0576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610527565b73ffffffffffffffffffffffffffffffffffffffff8316610b05576103fa8282610e0f565b6103fa838383610f11565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808215610bde575f80610b99868685610f7f565b6040517f7085244b00000000000000000000000000000000000000000000000000000000815260ff851660048201529096509294508593505060249091019050610527565b808314610c1a576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610527565b5f9150505b92915050565b5f610c1f82610120610fd8565b5f8061ffff861615610c445785610c46565b845b90505f612710610c5a61ffff84168a6120c4565b610c649190612108565b90506fffffffffffffffffffffffffffffffff84161580610c9557506fffffffffffffffffffffffffffffffff8516155b15610ca35791506109a99050565b5f846fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000876fffffffffffffffffffffffffffffffff16610cf591906120c4565b610cff9190612108565b610d09908a61211b565b9050818111610d185781610d1a565b805b9998505050505050505050565b5f80610d36848461103c61124b565b6002548151919250610d5f916effffffffffffffffffffffffffffff9091169061ffff1661212e565b6effffffffffffffffffffffffffffff169150806020015115610dca5760025461271090610db3907e01000000000000000000000000000000000000000000000000000000000000900461ffff16846120c4565b610dbd9190612108565b610dc7908361211b565b91505b806040015115610e0857600254610e05906f0100000000000000000000000000000090046effffffffffffffffffffffffffffff168361211b565b91505b5092915050565b73ffffffffffffffffffffffffffffffffffffffff8216610e5c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610eb2576040519150601f19603f3d011682016040523d82523d5f602084013e610eb7565b606091505b50509050806103fa576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610527565b73ffffffffffffffffffffffffffffffffffffffff8216610f5e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103fa73ffffffffffffffffffffffffffffffffffffffff8416838361185d565b5f36816001840181610f928888846118ea565b6002830192909150610faa9089908990600301611910565b94506002820161ffff82168301610fc381838b8d612161565b979b909a50969850505061ffff160193505050565b5f80610fe56041856120c4565b9050610ff2602082612188565b1561101a57611002602082612188565b61100c908261219b565b61101790602061211b565b90505b806110278461010461211b565b611031919061211b565b610e0590602061211b565b61104860018583611934565b6110556001856002611975565b156112455763ffffffff8085165f90815260036020908152604091829020825160a0810184529054808516825267ffffffffffffffff64010000000082048116938301939093526c01000000000000000000000000810490921692810192909252740100000000000000000000000000000000000000008104831660608301527801000000000000000000000000000000000000000000000000900490911660808201528284156111a957816020015167ffffffffffffffff168467ffffffffffffffff16111561116657815160208301516103e89163ffffffff169061113c90876121ae565b61114691906121cf565b61115091906121f3565b826040015161115f9190612219565b90506111a9565b6103e8825f015163ffffffff1685846020015161118391906121ae565b61118d91906121cf565b61119791906121f3565b82604001516111a691906121ae565b90505b42826060015163ffffffff16826111c09190612219565b67ffffffffffffffff1610806111f3575060808201516111e69063ffffffff164261211b565b8167ffffffffffffffff16115b15611242576040517f0c5a8d2300000000000000000000000000000000000000000000000000000000815263ffffffff8716600482015267ffffffffffffffff82166024820152604401610527565b50505b50505050565b604080516060810182525f80825260208201819052918101829052908085818661127682600261211b565b9261128393929190612161565b61128c9161223a565b60f01c905061129c60028361211b565b915061ffff81166001146112dc576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112e760028361211b565b91505f8683876112f882600261211b565b9261130593929190612161565b61130e9161223a565b60f01c905061131e60028461211b565b92508061ffff165f0361135d576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff168352505f5b825f015161ffff168161ffff1610156115c6575f86868481811061138c5761138c611ec2565b919091013560f81c91506113a3905060018461211b565b925060ff81166001146113e2576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113ed60028461211b565b92505f8784886113fe82600261211b565b9261140b93929190612161565b6114149161223a565b60f01c905061142460028561211b565b93507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff82160161158a575f88858961146082600261211b565b9261146d93929190612161565b6114769161223a565b60f01c905061148660028661211b565b9450845f8a828b61149882600461211b565b926114a593929190612161565b6114ae91612280565b60e01c90506114be60048361211b565b91505f8b8b848181106114d3576114d3611ec2565b600192013560f81c821492506114eb9190508461211b565b92505f8c848d6114fc82600861211b565b9261150993929190612161565b611512916122c6565b60c01c90506115278383835f8f63ffffffff16565b508a925061153c91505061ffff83168761211b565b1115611574576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158261ffff82168661211b565b9450506115bc565b6040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600101611366565b508381101561181c575f8585838181106115e2576115e2611ec2565b919091013560f81c91506115f9905060018361211b565b915060ff8116600114611638576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86838761164782600261211b565b9261165493929190612161565b61165d9161223a565b60f01c905061166d60028461211b565b925061ffff81166001146116ad576040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787858181106116c0576116c0611ec2565b919091013560f81c91506116d7905060018561211b565b935060ff81166116ed576001602086015261175c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff821601611723576001604086015261175c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff82160161158a5760016020860181905260408601525b5f88858961176b82600461211b565b9261177893929190612161565b61178191612280565b60e01c905061179160048661211b565b94505f8989878181106117a6576117a6611ec2565b600192013560f81c821492506117be9190508761211b565b95505f8a878b6117cf82600861211b565b926117dc93929190612161565b6117e5916122c6565b60c01c90506117f560088861211b565b965061180883838360018d63ffffffff16565b61181360168861211b565b96505050505050505b808414611855576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526103fa9084906119a2565b5f600282016118fb81848688612161565b6119049161223a565b60f01c95945050505050565b5f83838381811061192357611923611ec2565b919091013560f81c95945050505050565b61193f838383611975565b6103fa576040517f50fae9eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8083165f90815260208590526040812054909161199a91908490611a4116565b949350505050565b5f8060205f8451602086015f885af1806119c1576040513d5f823e3d81fd5b50505f513d915081156119d85780600114156119f2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611245576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610527565b600160ff919091161b16151590565b803573ffffffffffffffffffffffffffffffffffffffff81168114611a73575f80fd5b919050565b5f805f60608486031215611a8a575f80fd5b611a9384611a50565b9250611aa160208501611a50565b9150604084013590509250925092565b63ffffffff81168114610a12575f80fd5b5f60208284031215611ad2575f80fd5b8135611add81611ab1565b9392505050565b80356effffffffffffffffffffffffffffff81168114611a73575f80fd5b803561ffff81168114611a73575f80fd5b5f805f60608486031215611b25575f80fd5b611b2e84611ae4565b9250611b3c60208501611ae4565b9150611b4a60408501611b02565b90509250925092565b5f60608284031215611b63575f80fd5b50919050565b5f8083601f840112611b79575f80fd5b50813567ffffffffffffffff811115611b90575f80fd5b602083019150836020828501011115611ba7575f80fd5b9250929050565b5f805f80848603610140811215611bc3575f80fd5b60c0811215611bd0575f80fd5b50849350611be18660c08701611b53565b925061012085013567ffffffffffffffff811115611bfd575f80fd5b611c0987828801611b69565b95989497509550505050565b5f805f8060408587031215611c28575f80fd5b843567ffffffffffffffff80821115611c3f575f80fd5b818701915087601f830112611c52575f80fd5b813581811115611c60575f80fd5b8860208260051b8501011115611c74575f80fd5b602092830196509450908601359080821115611c8e575f80fd5b818701915087601f830112611ca1575f80fd5b813581811115611caf575f80fd5b88602060a083028501011115611cc3575f80fd5b95989497505060200194505050565b5f805f805f80868803610120811215611ce9575f80fd5b6080811215611cf6575f80fd5b50869550611d078860808901611b53565b945060e087013567ffffffffffffffff80821115611d23575f80fd5b611d2f8a838b01611b69565b9096509450610100890135915080821115611d48575f80fd5b50611d5589828a01611b69565b979a9699509497509295939492505050565b5f60208284031215611d77575f80fd5b611add82611a50565b5f8060208385031215611d91575f80fd5b823567ffffffffffffffff80821115611da8575f80fd5b818501915085601f830112611dbb575f80fd5b813581811115611dc9575f80fd5b8660208260061b8501011115611ddd575f80fd5b60209290920196919550909350505050565b67ffffffffffffffff81168114610a12575f80fd5b5f60208284031215611e14575f80fd5b8135611add81611def565b6fffffffffffffffffffffffffffffffff81168114610a12575f80fd5b5f805f8060808587031215611e4f575f80fd5b845193506020850151611e6181611e1f565b6040860151909350611e7281611e1f565b6060860151909250611e8381611e1f565b939692955090935050565b5f60208284031215611e9e575f80fd5b611add82611b02565b5f60208284031215611eb7575f80fd5b8135611add81611e1f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8135610c1f81611ab1565b8135611f0681611ab1565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135611f4681611def565b6bffffffffffffffff000000008160201b16905080837fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008416171784556040850135611f9181611def565b73ffffffffffffffff0000000000000000000000008160601b169050837fffffffffffffffffffffffff000000000000000000000000000000000000000084161793508084831717855560608601359250611feb83611ab1565b77ffffffff00000000000000000000000000000000000000008360a01b167fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff8516831782171785555050505061209361204660808401611eef565b82547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1660c09190911b7bffffffff00000000000000000000000000000000000000000000000016178255565b5050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610c1f57610c1f612097565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612116576121166120db565b500490565b80820180821115610c1f57610c1f612097565b6effffffffffffffffffffffffffffff81811683821602808216919082811461215957612159612097565b505092915050565b5f808585111561216f575f80fd5b8386111561217b575f80fd5b5050820193919092039150565b5f82612196576121966120db565b500690565b81810381811115610c1f57610c1f612097565b67ffffffffffffffff828116828216039080821115610e0857610e08612097565b67ffffffffffffffff81811683821602808216919082811461215957612159612097565b5f67ffffffffffffffff8084168061220d5761220d6120db565b92169190910492915050565b67ffffffffffffffff818116838216019080821115610e0857610e08612097565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156121595760029490940360031b84901b1690921692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156121595760049490940360031b84901b1690921692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156121595760089490940360031b84901b169092169291505056fea2646970667358221220cccc97c15d4a10960156cf1d97eac992ad00f3710384385711595e0370e0871a64736f6c6343000816003360e060405234801562000010575f80fd5b5060405162001e1538038062001e15833981016040819052620000339162000172565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b62000064816200010b565b50600180546001600160a01b0319166001600160a01b0384811691909117909155811660808190525f60a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620000ca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000f09190620001af565b63ffffffff1660c052505060636003556064600455620001db565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016f575f80fd5b50565b5f806040838503121562000184575f80fd5b825162000191816200015a565b6020840151909250620001a4816200015a565b809150509250929050565b5f60208284031215620001c0575f80fd5b815163ffffffff81168114620001d4575f80fd5b9392505050565b60805160a05160c051611bf3620002225f395f6103fc01525f61036f01525f818161033c015281816106e90152818161081201528181610a5c0152610cc30152611bf35ff3fe60806040526004361061018e575f3560e01c8063715018a6116100d5578063996f79c01161007e578063dabca06311610058578063dabca0631461051f578063f2fde38b1461053e578063fd9be5221461055d57610195565b8063996f79c0146104bf578063aec336e6146104d4578063d80e9bd9146104f357610195565b80638da5cb5b116100af5780638da5cb5b146104545780638f58aa7a1461047d578063909532381461049c57610195565b8063715018a6146103d757806372607537146103eb57806372d713221461043357610195565b80634389e58f1161013757806361d027b31161011157806361d027b31461035e5780636251b637146103915780636750cd4c146103b757610195565b80634389e58f146102d357806354fd4d50146103015780635e280f111461032b57610195565b80631881d94d116101685780631881d94d1461026d5780631c7c294e14610288578063334993ff146102b457610195565b806301ffc9a7146101c75780630e97289b146101fb57806312cc947f1461024c57610195565b3661019557005b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156101d2575f80fd5b506101e66101e136600461127f565b61057c565b60405190151581526020015b60405180910390f35b348015610206575f80fd5b506001546102279073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f2565b348015610257575f80fd5b5061026b6102663660046112fc565b610614565b005b348015610278575f80fd5b5060026040516101f2919061133b565b348015610293575f80fd5b506002546102279073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102bf575f80fd5b5061026b6102ce36600461137a565b6107e7565b3480156102de575f80fd5b506102f26102ed3660046114c1565b6107fa565b6040516101f29392919061159b565b34801561030c575f80fd5b50604080515f80825260208201526002918101919091526060016101f2565b348015610336575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b348015610369575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b34801561039c575f80fd5b506103a5600181565b60405160ff90911681526020016101f2565b3480156103c2575f80fd5b506101e66103d13660046115ed565b50600190565b3480156103e2575f80fd5b5061026b610965565b3480156103f6575f80fd5b5061041e7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101f2565b34801561043e575f80fd5b50610447610978565b6040516101f29190611606565b34801561045f575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610227565b348015610488575f80fd5b5061026b610497366004611644565b610a04565b3480156104a7575f80fd5b506104b160035481565b6040519081526020016101f2565b3480156104ca575f80fd5b506104b160045481565b3480156104df575f80fd5b5061026b6104ee36600461166e565b610b5c565b3480156104fe575f80fd5b5061051261050d366004611689565b610bab565b6040516101f291906116ff565b34801561052a575f80fd5b5061026b610539366004611716565b610beb565b348015610549575f80fd5b5061026b61055836600461166e565b610c03565b348015610568575f80fd5b5061026b610577366004611644565b610c6b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061060e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff1615801590610653575060025473ffffffffffffffffffffffffffffffffffffffff163314155b1561068a576040517f70b216ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60405180606001604052806106a08585610d5b565b63ffffffff1681526020016106b58585610d7d565b81526020016106c48585610d9c565b67ffffffffffffffff169052905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a825d747826107198686610dbe565b6107238787610dcf565b604051610731929190611750565b6040805191829003822060e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168352845163ffffffff1660048401526020850151602484015293015167ffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091166064820152608481019190915260a4015f604051808303815f87803b1580156107cc575f80fd5b505af11580156107de573d5f803e3d5ffd5b50505050505050565b6107ef610dea565b600491909155600355565b604080518082019091525f80825260208201526060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461087f576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61089061088b87611776565b610e3c565b915084515f146108a0578461092a565b600580546108ad90611811565b80601f01602080910402602001604051908101604052809291908181526020018280546108d990611811565b80156109245780601f106108fb57610100808354040283529160200191610924565b820191905f5260205f20905b81548152906001019060200180831161090757829003601f168201915b50505050505b90506109368282610ea1565b6040518060400160405280600454815260200185610954575f610958565b6003545b9052969195509350915050565b61096d610dea565b6109765f610f2a565b565b6005805461098590611811565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190611811565b80156109fc5780601f106109d3576101008083540402835291602001916109fc565b820191905f5260205f20905b8154815290600101906020018083116109df57829003601f168201915b505050505081565b610a0c610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610a59576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae7919061185c565b905073ffffffffffffffffffffffffffffffffffffffff8116610b36576040517f54c1781b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff82168484610f9e565b505050565b610b64610dea565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b604080518082019091525f80825260208201526040518060400160405280600454815260200183610bdc575f610be0565b6003545b905295945050505050565b610bf3610dea565b6005610bff82826118c2565b5050565b610c0b610dea565b73ffffffffffffffffffffffffffffffffffffffff8116610c5f576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610c6881610f2a565b50565b610c73610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610cc0576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4e919061185c565b9050610b5781848461102b565b5f610d6a600d600984866119da565b610d7391611a01565b60e01c9392505050565b5f610d8c602d600d84866119da565b610d9591611a49565b9392505050565b5f610dab6009600184866119da565b610db491611a85565b60c01c9392505050565b5f610d95610dcc848461105b565b90565b365f610dde83605181876119da565b915091505b9250929050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610976576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c56565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610e8b986001989197919673ffffffffffffffffffffffffffffffffffffffff169501611acb565b6040516020818303038152906040529050919050565b6001546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063faed6c5890610ef99085908590600401611b90565b5f604051808303815f87803b158015610f10575f80fd5b505af1158015610f22573d5f803e3d5ffd5b505050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b5790849061106a565b73ffffffffffffffffffffffffffffffffffffffff831661105057610b57828261110f565b610b57838383611211565b5f610d8c6051603184866119da565b5f8060205f8451602086015f885af180611089576040513d5f823e3d81fd5b50505f513d915081156110a05780600114156110ba565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611109576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c56565b50505050565b73ffffffffffffffffffffffffffffffffffffffff821661115c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146111b2576040519150601f19603f3d011682016040523d82523d5f602084013e6111b7565b606091505b5050905080610b57576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c56565b73ffffffffffffffffffffffffffffffffffffffff821661125e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff84168383610f9e565b5f6020828403121561128f575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d95575f80fd5b5f8083601f8401126112ce575f80fd5b50813567ffffffffffffffff8111156112e5575f80fd5b602083019150836020828501011115610de3575f80fd5b5f806020838503121561130d575f80fd5b823567ffffffffffffffff811115611323575f80fd5b61132f858286016112be565b90969095509350505050565b6020810160038310611374577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f806040838503121561138b575f80fd5b50508035926020909101359150565b5f60e082840312156113aa575f80fd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff81118282101715611400576114006113b0565b60405290565b5f82601f830112611415575f80fd5b813567ffffffffffffffff80821115611430576114306113b0565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611476576114766113b0565b8160405283815286602085880101111561148e575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803580151581146114bc575f80fd5b919050565b5f805f606084860312156114d3575f80fd5b833567ffffffffffffffff808211156114ea575f80fd5b6114f68783880161139a565b9450602086013591508082111561150b575f80fd5b5061151886828701611406565b925050611527604085016114ad565b90509250925092565b5f5b8381101561154a578181015183820152602001611532565b50505f910152565b5f8151808452611569816020860160208601611530565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8351815260208085015190820152608060408201525f6115be6080830185611552565b82810360608401526115d08185611552565b9695505050505050565b803563ffffffff811681146114bc575f80fd5b5f602082840312156115fd575f80fd5b610d95826115da565b602081525f610d956020830184611552565b73ffffffffffffffffffffffffffffffffffffffff81168114610c68575f80fd5b80356114bc81611618565b5f8060408385031215611655575f80fd5b823561166081611618565b946020939093013593505050565b5f6020828403121561167e575f80fd5b8135610d9581611618565b5f805f806060858703121561169c575f80fd5b843567ffffffffffffffff808211156116b3575f80fd5b6116bf8883890161139a565b955060208701359150808211156116d4575f80fd5b506116e1878288016112be565b90945092506116f49050604086016114ad565b905092959194509250565b81518152602080830151908201526040810161060e565b5f60208284031215611726575f80fd5b813567ffffffffffffffff81111561173c575f80fd5b61174884828501611406565b949350505050565b818382375f9101908152919050565b803567ffffffffffffffff811681146114bc575f80fd5b5f60e08236031215611786575f80fd5b61178e6113dd565b6117978361175f565b81526117a5602084016115da565b60208201526117b660408401611639565b60408201526117c7606084016115da565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156117f9575f80fd5b61180536828601611406565b60c08301525092915050565b600181811c9082168061182557607f821691505b6020821081036113aa577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6020828403121561186c575f80fd5b8151610d9581611618565b601f821115610b5757805f5260205f20601f840160051c8101602085101561189c5750805b601f840160051c820191505b818110156118bb575f81556001016118a8565b5050505050565b815167ffffffffffffffff8111156118dc576118dc6113b0565b6118f0816118ea8454611811565b84611877565b602080601f831160018114611942575f841561190c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610f22565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561198e5788860151825594840194600190910190840161196f565b50858210156119ca57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b5f80858511156119e8575f80fd5b838611156119f4575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611a415780818660040360031b1b83161692505b505092915050565b8035602083101561060e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015611a415760089490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611b7c816071850160208701611530565b919091016071019998505050505050505050565b604081525f611ba26040830185611552565b8281036020840152611bb48185611552565b9594505050505056fea2646970667358221220153f6a8e912d5720c2f1c4bf884b915b03d8f933123bf4fbba154ab615acb52564736f6c6343000816003360c060405234801562000010575f80fd5b5060405162003f7b38038062003f7b8339810160408190526200003391620002c2565b83838383838360128484818181818d6001600160a01b0381166200007057604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200007b8162000191565b506001600160a01b038083166080528116620000aa57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b158015620000ef575f80fd5b505af115801562000102573d5f803e3d5ffd5b50505050505050506200011a620001e060201b60201c565b60ff168360ff16101562000141576040516301e9714b60e41b815260040160405180910390fd5b6200014e60068462000360565b6200015b90600a6200047b565b60a052506008915062000171905083826200051c565b5060096200018082826200051c565b5050505050505050505050620005e8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000209575f80fd5b81516001600160401b0380821115620002265762000226620001e5565b604051601f8301601f19908116603f01168101908282118183101715620002515762000251620001e5565b81604052838152602092508660208588010111156200026e575f80fd5b5f91505b8382101562000291578582018301518183018401529082019062000272565b5f602085830101528094505050505092915050565b80516001600160a01b0381168114620002bd575f80fd5b919050565b5f805f8060808587031215620002d6575f80fd5b84516001600160401b0380821115620002ed575f80fd5b620002fb88838901620001f9565b9550602087015191508082111562000311575f80fd5b506200032087828801620001f9565b9350506200033160408601620002a6565b91506200034160608601620002a6565b905092959194509250565b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156200037c576200037c6200034c565b92915050565b600181815b80851115620003c257815f1904821115620003a657620003a66200034c565b80851615620003b457918102915b93841c939080029062000387565b509250929050565b5f82620003da575060016200037c565b81620003e857505f6200037c565b81600181146200040157600281146200040c576200042c565b60019150506200037c565b60ff8411156200042057620004206200034c565b50506001821b6200037c565b5060208310610133831016604e8410600b841016171562000451575081810a6200037c565b6200045d838362000382565b805f19048211156200047357620004736200034c565b029392505050565b5f6200048b60ff841683620003ca565b9392505050565b600181811c90821680620004a757607f821691505b602082108103620004c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200051757805f5260205f20601f840160051c81016020851015620004f35750805b601f840160051c820191505b8181101562000514575f8155600101620004ff565b50505b505050565b81516001600160401b03811115620005385762000538620001e5565b620005508162000549845462000492565b84620004cc565b602080601f83116001811462000586575f84156200056e5750858301515b5f19600386901b1c1916600185901b178555620005e0565b5f85815260208120601f198616915b82811015620005b65788860151825594840194600190910190840162000595565b5085821015620005d457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60805160a05161392b620006505f395f81816106f301528181611f9b0152818161200d015261229a01525f81816105a301528181610b5901528181611296015281816115bc01528181611a17015281816123ee0152818161251301526125fb015261392b5ff3fe6080604052600436106102d7575f3560e01c80637d25a05e1161017b578063bb0b6a53116100d1578063d045a0dc11610087578063f2fde38b11610062578063f2fde38b146108d0578063fc0c546a1461052c578063ff7bd03d146108ef575f80fd5b8063d045a0dc1461084d578063d424388514610860578063dd62ed3e1461087f575f80fd5b8063bd815db0116100b7578063bd815db0146107fa578063c7c7f5b31461080d578063ca5eb5e11461082e575f80fd5b8063bb0b6a53146107b0578063bc70b354146107db575f80fd5b8063963efcaa11610131578063a9059cbb1161010c578063a9059cbb14610746578063b731ea0a14610765578063b98bd07014610791575f80fd5b8063963efcaa146106e25780639dc29fac146107155780639f68b96414610734575f80fd5b8063857749b011610161578063857749b0146106925780638da5cb5b146106a557806395d89b41146106ce575f80fd5b80637d25a05e1461063957806382413eac14610673575f80fd5b8063313ce567116102305780635535d461116101e65780636fc1b31e116101c15780636fc1b31e146105c557806370a08231146105e4578063715018a614610625575f80fd5b80635535d4611461053e5780635a0dfe4d1461055d5780635e280f1114610592575f80fd5b80633b6f743b116102165780633b6f743b146104e157806340c10f191461050d57806352ae28791461052c575f80fd5b8063313ce567146104a15780633400288b146104c2575f80fd5b8063134d4f251161029057806318160ddd1161026b57806318160ddd146104505780631f5e13341461046e57806323b872dd14610482575f80fd5b8063134d4f25146103c8578063156a0d0f146103ef57806317442b701461042f575f80fd5b80630d35b415116102c05780630d35b41514610334578063111ecdad1461036257806313137d65146103b3575f80fd5b806306fdde03146102db578063095ea7b314610305575b5f80fd5b3480156102e6575f80fd5b506102ef61090e565b6040516102fc91906127f6565b60405180910390f35b348015610310575f80fd5b5061032461031f366004612829565b61099e565b60405190151581526020016102fc565b34801561033f575f80fd5b5061035361034e366004612869565b6109b7565b6040516102fc9392919061289b565b34801561036d575f80fd5b5060045461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102fc565b6103c66103c13660046129a5565b610b57565b005b3480156103d3575f80fd5b506103dc600281565b60405161ffff90911681526020016102fc565b3480156103fa575f80fd5b50604080517f02e49c2c00000000000000000000000000000000000000000000000000000000815260016020820152016102fc565b34801561043a575f80fd5b50604080516001815260026020820152016102fc565b34801561045b575f80fd5b506007545b6040519081526020016102fc565b348015610479575f80fd5b506103dc600181565b34801561048d575f80fd5b5061032461049c366004612a3e565b610c56565b3480156104ac575f80fd5b5060125b60405160ff90911681526020016102fc565b3480156104cd575f80fd5b506103c66104dc366004612a94565b610c7b565b3480156104ec575f80fd5b506105006104fb366004612abb565b610c91565b6040516102fc9190612b0a565b348015610518575f80fd5b506103c6610527366004612829565b610cf5565b348015610537575f80fd5b503061038e565b348015610549575f80fd5b506102ef610558366004612b32565b610cff565b348015610568575f80fd5b50610324610577366004612a94565b63ffffffff919091165f908152600160205260409020541490565b34801561059d575f80fd5b5061038e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d0575f80fd5b506103c66105df366004612b63565b610da1565b3480156105ef575f80fd5b506104606105fe366004612b63565b73ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604090205490565b348015610630575f80fd5b506103c6610e23565b348015610644575f80fd5b5061065a610653366004612a94565b5f92915050565b60405167ffffffffffffffff90911681526020016102fc565b34801561067e575f80fd5b5061032461068d366004612b7e565b610e36565b34801561069d575f80fd5b5060066104b0565b3480156106b0575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661038e565b3480156106d9575f80fd5b506102ef610e58565b3480156106ed575f80fd5b506104607f000000000000000000000000000000000000000000000000000000000000000081565b348015610720575f80fd5b506103c661072f366004612829565b610e67565b34801561073f575f80fd5b505f610324565b348015610751575f80fd5b50610324610760366004612829565b610e71565b348015610770575f80fd5b5060025461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561079c575f80fd5b506103c66107ab366004612c22565b610e7e565b3480156107bb575f80fd5b506104606107ca366004612c61565b60016020525f908152604090205481565b3480156107e6575f80fd5b506102ef6107f5366004612c7a565b610e98565b6103c6610808366004612c22565b611052565b61082061081b366004612cd7565b611216565b6040516102fc929190612d5e565b348015610839575f80fd5b506103c6610848366004612b63565b611249565b6103c661085b3660046129a5565b6112f0565b34801561086b575f80fd5b506103c661087a366004612b63565b611338565b34801561088a575f80fd5b50610460610899366004612db0565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260066020908152604080832093909416825291909152205490565b3480156108db575f80fd5b506103c66108ea366004612b63565b6113b3565b3480156108fa575f80fd5b50610324610909366004612ddc565b611416565b60606008805461091d90612df6565b80601f016020809104026020016040519081016040528092919081815260200182805461094990612df6565b80156109945780601f1061096b57610100808354040283529160200191610994565b820191905f5260205f20905b81548152906001019060200180831161097757829003601f168201915b5050505050905090565b5f336109ab81858561144a565b60019150505b92915050565b604080518082019091525f808252602082015260606109e760405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a569190612e41565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac29190612e5c565b604080518082018252848152602080820184905282515f80825291810190935290975091925090610b15565b604080518082019091525f815260606020820152815260200190600190039081610aee5790505b5093505f80610b39604089013560608a0135610b3460208c018c612c61565b61145c565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610bcd576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b60208701803590610be790610be2908a612c61565b6114b0565b14610c3e57610bf96020880188612c61565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610bc4565b610c4d87878787878787611504565b50505050505050565b5f33610c63858285611695565b610c6e858585611762565b60019150505b9392505050565b610c8361180b565b610c8d828261185d565b5050565b604080518082019091525f80825260208201525f610cbf60408501356060860135610b346020880188612c61565b9150505f80610cce86846118b1565b9092509050610ceb610ce36020880188612c61565b838388611a02565b9695505050505050565b610c8d8282611aed565b600360209081525f928352604080842090915290825290208054610d2290612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4e90612df6565b8015610d995780601f10610d7057610100808354040283529160200191610d99565b820191905f5260205f20905b815481529060010190602001808311610d7c57829003601f168201915b505050505081565b610da961180b565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610e2b61180b565b610e345f611b47565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b60606009805461091d90612df6565b610c8d8282611bbb565b5f336109ab818585611762565b610e8661180b565b610c8d610e938284612f80565b611c15565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ecb90612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef790612df6565b8015610f425780601f10610f1957610100808354040283529160200191610f42565b820191905f5260205f20905b815481529060010190602001808311610f2557829003601f168201915b5050505050905080515f03610f905783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610e509350505050565b5f839003610f9f579050610e50565b6002831061101c57610fe584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611d1692505050565b80610ff38460028188613089565b604051602001611005939291906130b0565b604051602081830303815290604052915050610e50565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc492919061311d565b5f5b81811015611155573683838381811061106f5761106f613130565b9050602002810190611081919061315d565b90506110b36110936020830183612c61565b602083013563ffffffff919091165f908152600160205260409020541490565b6110bd575061114d565b3063d045a0dc60c08301358360a08101356110dc610100830183613199565b6110ed610100890160e08a01612b63565b6110fb6101208a018a613199565b6040518963ffffffff1660e01b815260040161111d979695949392919061320f565b5f604051808303818588803b158015611134575f80fd5b505af1158015611146573d5f803e3d5ffd5b5050505050505b600101611054565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa15801561119e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111e391908101906132a2565b6040517f8351eea7000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b61121e612747565b604080518082019091525f808252602082015261123c858585611d5b565b915091505b935093915050565b61125161180b565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b1580156112d7575f80fd5b505af11580156112e9573d5f803e3d5ffd5b5050505050565b333014611329576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c4d87878787878787610c3e565b61134061180b565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610e18565b6113bb61180b565b73ffffffffffffffffffffffffffffffffffffffff811661140a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b61141381611b47565b50565b5f60208201803590600190839061142d9086612c61565b63ffffffff16815260208101919091526040015f20541492915050565b6114578383836001611e53565b505050565b5f8061146785611f98565b915081905083811015611241576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610bc4565b63ffffffff81165f90815260016020526040812054806109b1576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610bc4565b5f6115156115128787611fce565b90565b90505f6115408261152e6115298a8a611fe5565b612007565b61153b60208d018d612c61565b61203c565b90506028861115611626575f61157c61155f60608c0160408d0161330b565b61156c60208d018d612c61565b846115778c8c612070565b6120ba565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906115f79086908d905f908790600401613326565b5f604051808303815f87803b15801561160e575f80fd5b505af1158015611620573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61166c60208d018d612c61565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600660209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461175c578181101561174e576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610bc4565b61175c84848484035f611e53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166117b1576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8216611800576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b6114578383836120ec565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610e34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610bc4565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61190c85602001356118c686612293565b6118d360a0890189613199565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061230692505050565b90935090505f8161191e576001611921565b60025b90506119416119336020880188612c61565b826107f560808a018a613199565b60045490935073ffffffffffffffffffffffffffffffffffffffff1680156119f8576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906119b79088908890600401613364565b602060405180830381865afa1580156119d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f69190613388565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff168152602001611a71896114b0565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611aa69291906133a3565b6040805180830381865afa158015611ac0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae49190613474565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611b3c576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d5f83836120ec565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611c0a576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d825f836120ec565b5f5b8151811015611ce657611c46828281518110611c3557611c35613130565b602002602001015160400151611d16565b818181518110611c5857611c58613130565b60200260200101516040015160035f848481518110611c7957611c79613130565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611cb057611cb0613130565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611cdd91906134d2565b50600101611c17565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610e1891906135ee565b600281015161ffff8116600314610c8d57816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b611d63612747565b604080518082019091525f80825260208201525f80611d9833604089013560608a0135611d9360208c018c612c61565b612398565b915091505f80611da889846118b1565b9092509050611dd4611dbd60208b018b612c61565b8383611dce368d90038d018d613695565b8b6123bd565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611e22908d018d612c61565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff8416611ea2576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8316611ef1576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600660209081526040808320938716835292905220829055801561175c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611f8a91815260200190565b60405180910390a350505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000611fc481846136f2565b6109b1919061372a565b5f611fdc6020828486613089565b610c7491613741565b5f611ff4602860208486613089565b611ffd9161377d565b60c01c9392505050565b5f6109b17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff841661372a565b5f73ffffffffffffffffffffffffffffffffffffffff841661205e5761dead93505b6120688484611aed565b509092915050565b606061207f8260288186613089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b6060848484846040516020016120d394939291906137c5565b6040516020818303038152906040529050949350505050565b73ffffffffffffffffffffffffffffffffffffffff8316612123578060075f8282546121189190613842565b909155506121d39050565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260056020526040902054818110156121a8576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610bc4565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526005602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166121fc57600780548290039055612227565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526005602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161228691815260200190565b60405180910390a3505050565b5f806122bf7f0000000000000000000000000000000000000000000000000000000000000000846136f2565b905067ffffffffffffffff8111156109b1576040517fe2ce941300000000000000000000000000000000000000000000000000000000815260048101829052602401610bc4565b805160609015158061236757848460405160200161235392919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b60405160208183030381529060405261238e565b8484338560405160200161237e9493929190613855565b6040516020818303038152906040525b9150935093915050565b5f806123a585858561145c565b90925090506123b48683611bbb565b94509492505050565b6123c5612747565b5f6123d2845f01516124d0565b6020850151909150156123ec576123ec8460200151612510565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff1681526020016124498c6114b0565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b81526004016124849291906133a3565b60806040518083038185885af11580156124a0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906124c591906138ad565b979650505050505050565b5f81341461250c576040517f9f704120000000000000000000000000000000000000000000000000000000008152346004820152602401610bc4565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259e9190612e41565b905073ffffffffffffffffffffffffffffffffffffffff81166125ed576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805133602482018190527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff81811660448501526064808501889052855180860390910181526084909401909452602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001781528451610c8d96881695899361175c9388935f9283929091839182885af1806126c7576040513d5f823e3d81fd5b50505f513d915081156126de5780600114156126f8565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561175c576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610bc4565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161278660405180604001604052805f81526020015f81525090565b905290565b5f5b838110156127a557818101518382015260200161278d565b50505f910152565b5f81518084526127c481602086016020860161278b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610c7460208301846127ad565b73ffffffffffffffffffffffffffffffffffffffff81168114611413575f80fd5b5f806040838503121561283a575f80fd5b823561284581612808565b946020939093013593505050565b5f60e08284031215612863575f80fd5b50919050565b5f60208284031215612879575f80fd5b813567ffffffffffffffff81111561288f575f80fd5b610e5084828501612853565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612932578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261291f878901826127ad565b97505093820193908201906001016128d5565b50508751606088015250505060208501516080850152509050610e50565b5f60608284031215612863575f80fd5b5f8083601f840112612970575f80fd5b50813567ffffffffffffffff811115612987575f80fd5b60208301915083602082850101111561299e575f80fd5b9250929050565b5f805f805f805f60e0888a0312156129bb575f80fd5b6129c58989612950565b965060608801359550608088013567ffffffffffffffff808211156129e8575f80fd5b6129f48b838c01612960565b909750955060a08a01359150612a0982612808565b90935060c08901359080821115612a1e575f80fd5b50612a2b8a828b01612960565b989b979a50959850939692959293505050565b5f805f60608486031215612a50575f80fd5b8335612a5b81612808565b92506020840135612a6b81612808565b929592945050506040919091013590565b803563ffffffff81168114612a8f575f80fd5b919050565b5f8060408385031215612aa5575f80fd5b61284583612a7c565b8015158114611413575f80fd5b5f8060408385031215612acc575f80fd5b823567ffffffffffffffff811115612ae2575f80fd5b612aee85828601612853565b9250506020830135612aff81612aae565b809150509250929050565b8151815260208083015190820152604081016109b1565b803561ffff81168114612a8f575f80fd5b5f8060408385031215612b43575f80fd5b612b4c83612a7c565b9150612b5a60208401612b21565b90509250929050565b5f60208284031215612b73575f80fd5b8135610c7481612808565b5f805f8060a08587031215612b91575f80fd5b612b9b8686612950565b9350606085013567ffffffffffffffff811115612bb6575f80fd5b612bc287828801612960565b9094509250506080850135612bd681612808565b939692955090935050565b5f8083601f840112612bf1575f80fd5b50813567ffffffffffffffff811115612c08575f80fd5b6020830191508360208260051b850101111561299e575f80fd5b5f8060208385031215612c33575f80fd5b823567ffffffffffffffff811115612c49575f80fd5b612c5585828601612be1565b90969095509350505050565b5f60208284031215612c71575f80fd5b610c7482612a7c565b5f805f8060608587031215612c8d575f80fd5b612c9685612a7c565b9350612ca460208601612b21565b9250604085013567ffffffffffffffff811115612cbf575f80fd5b612ccb87828801612960565b95989497509550505050565b5f805f8385036080811215612cea575f80fd5b843567ffffffffffffffff811115612d00575f80fd5b612d0c87828801612853565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612d3e575f80fd5b506020840191506060840135612d5381612808565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff60208501511660208301526040840151612d99604084018280518252602090810151910152565b5082516080830152602083015160a0830152610c74565b5f8060408385031215612dc1575f80fd5b8235612dcc81612808565b91506020830135612aff81612808565b5f60608284031215612dec575f80fd5b610c748383612950565b600181811c90821680612e0a57607f821691505b602082108103612863577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208284031215612e51575f80fd5b8151610c7481612808565b5f60208284031215612e6c575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715612ec357612ec3612e73565b60405290565b6040805190810167ffffffffffffffff81118282101715612ec357612ec3612e73565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f3357612f33612e73565b604052919050565b5f67ffffffffffffffff821115612f5457612f54612e73565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612f9a57612f9a612e73565b8360051b6020612fab818301612eec565b868152918501918181019036841115612fc2575f80fd5b865b8481101561307d57803586811115612fda575f80fd5b88016060368290031215612fec575f80fd5b612ff4612ea0565b612ffd82612a7c565b815261300a868301612b21565b8682015260408083013589811115613020575f80fd5b929092019136601f840112613033575f80fd5b823561304661304182612f3b565b612eec565b8181523689838701011115613059575f80fd5b818986018a8301375f91810189019190915290820152845250918301918301612fc4565b50979650505050505050565b5f8085851115613097575f80fd5b838611156130a3575f80fd5b5050820193919092039150565b5f84516130c181846020890161278b565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610e506020830184866130d6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261318f575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126131cc575f80fd5b83018035915067ffffffffffffffff8211156131e6575f80fd5b60200191503681900382131561299e575f80fd5b67ffffffffffffffff81168114611413575f80fd5b63ffffffff61321d89612a7c565b168152602088013560208201525f6040890135613239816131fa565b67ffffffffffffffff811660408401525087606083015260e0608083015261326560e0830187896130d6565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c08401526132948185876130d6565b9a9950505050505050505050565b5f602082840312156132b2575f80fd5b815167ffffffffffffffff8111156132c8575f80fd5b8201601f810184136132d8575f80fd5b80516132e661304182612f3b565b8181528560208385010111156132fa575f80fd5b611ae482602083016020860161278b565b5f6020828403121561331b575f80fd5b8135610c74816131fa565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f610ceb60808301846127ad565b604081525f61337660408301856127ad565b8281036020840152611ae481856127ad565b5f60208284031215613398575f80fd5b8151610c7481612aae565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a060808401526133d860e08401826127ad565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a085015261341382826127ad565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215613456575f80fd5b61345e612ec9565b9050815181526020820151602082015292915050565b5f60408284031215613484575f80fd5b610c748383613446565b601f82111561145757805f5260205f20601f840160051c810160208510156134b35750805b601f840160051c820191505b818110156112e9575f81556001016134bf565b815167ffffffffffffffff8111156134ec576134ec612e73565b613500816134fa8454612df6565b8461348e565b602080601f831160018114613552575f841561351c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556135e6565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561359e5788860151825594840194600190910190840161357f565b50858210156135da57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015613687578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052613673818601836127ad565b968901969450505090860190600101613615565b509098975050505050505050565b5f604082840312156136a5575f80fd5b6136ad612ec9565b82358152602083013560208201528091505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f82613725577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109b1576109b16136c5565b803560208310156109b1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156137bd5780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161383281602c85016020870161278b565b91909101602c0195945050505050565b808201808211156109b1576109b16136c5565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f825161389d81604885016020870161278b565b9190910160480195945050505050565b5f608082840312156138bd575f80fd5b6138c5612ea0565b8251815260208301516138d7816131fa565b60208201526138e98460408501613446565b6040820152939250505056fea2646970667358221220a7e78c28d4976391911497373c3bfff426de060fa72d1fbc537e431a0fece95964736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b1c38038062001b1c833981016040819052620000339162000240565b808383600362000044838262000351565b50600462000053828262000351565b5050505f8062000069836200009b60201b60201c565b91509150816200007b5760126200007d565b805b60ff1660a05250506001600160a01b03166080525062000452915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691620000e3916200041d565b5f60405180830381855afa9150503d805f81146200011d576040519150601f19603f3d011682016040523d82523d5f602084013e62000122565b606091505b50915091508180156200013757506020815110155b156200016e575f818060200190518101906200015491906200043a565b905060ff81116200016c576001969095509350505050565b505b505f9485945092505050565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015620001aa57818101518382015260200162000190565b50505f910152565b5f82601f830112620001c2575f80fd5b81516001600160401b0380821115620001df57620001df6200017a565b604051601f8301601f19908116603f011681019082821181831017156200020a576200020a6200017a565b8160405283815286602085880101111562000223575f80fd5b620002368460208301602089016200018e565b9695505050505050565b5f805f6060848603121562000253575f80fd5b83516001600160401b03808211156200026a575f80fd5b6200027887838801620001b2565b945060208601519150808211156200028e575f80fd5b506200029d86828701620001b2565b604086015190935090506001600160a01b0381168114620002bc575f80fd5b809150509250925092565b600181811c90821680620002dc57607f821691505b602082108103620002fb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200034c57805f5260205f20601f840160051c81016020851015620003285750805b601f840160051c820191505b8181101562000349575f815560010162000334565b50505b505050565b81516001600160401b038111156200036d576200036d6200017a565b62000385816200037e8454620002c7565b8462000301565b602080601f831160018114620003bb575f8415620003a35750858301515b5f19600386901b1c1916600185901b17855562000415565b5f85815260208120601f198616915b82811015620003eb57888601518255948401946001909101908401620003ca565b50858210156200040957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251620004308184602087016200018e565b9190910192915050565b5f602082840312156200044b575f80fd5b5051919050565b60805160a051611693620004895f395f6105d301525f818161027c0152818161043101528181610a880152610bd601526116935ff3fe608060405234801561000f575f80fd5b50600436106101b0575f3560e01c806370a08231116100f3578063ba08765211610093578063ce96cb771161006e578063ce96cb77146103c3578063d905777e146103d6578063dd62ed3e146103e9578063ef8b30f7146103b0575f80fd5b8063ba0876521461039d578063c63d75b6146102a6578063c6e6f592146103b0575f80fd5b80639dc29fac116100ce5780639dc29fac14610351578063a9059cbb14610364578063b3d7f6b914610377578063b460af941461038a575f80fd5b806370a082311461030157806394bf804d1461033657806395d89b4114610349575f80fd5b806323b872dd1161015e578063402d267d11610139578063402d267d146102a657806340c10f19146102d95780634cdad506146101e45780636e553f65146102ee575f80fd5b806323b872dd14610235578063313ce5671461024857806338d52e0f14610262575f80fd5b8063095ea7b31161018e578063095ea7b3146101f75780630a28a4771461021a57806318160ddd1461022d575f80fd5b806301e1d114146101b457806306fdde03146101cf57806307a2d13a146101e4575b5f80fd5b6101bc61042e565b6040519081526020015b60405180910390f35b6101d76104e3565b6040516101c69190611222565b6101bc6101f236600461128c565b610573565b61020a6102053660046112cb565b610584565b60405190151581526020016101c6565b6101bc61022836600461128c565b61059b565b6002546101bc565b61020a6102433660046112f3565b6105a7565b6102506105cc565b60405160ff90911681526020016101c6565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c6565b6101bc6102b436600461132c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b6102ec6102e73660046112cb565b6105f7565b005b6101bc6102fc366004611345565b610605565b6101bc61030f36600461132c565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b6101bc610344366004611345565b610655565b6101d761068f565b6102ec61035f3660046112cb565b61069e565b61020a6103723660046112cb565b6106a8565b6101bc61038536600461128c565b6106b5565b6101bc61039836600461136f565b6106c1565b6101bc6103ab36600461136f565b610750565b6101bc6103be36600461128c565b6107d6565b6101bc6103d136600461132c565b6107e1565b6101bc6103e436600461132c565b610810565b6101bc6103f73660046113a8565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b5f7f00000000000000000000000000000000000000000000000000000000000000006040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa1580156104ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104de91906113d0565b905090565b6060600380546104f2906113e7565b80601f016020809104026020016040519081016040528092919081815260200182805461051e906113e7565b80156105695780601f1061054057610100808354040283529160200191610569565b820191905f5260205f20905b81548152906001019060200180831161054c57829003601f168201915b5050505050905090565b5f61057e825f61083a565b92915050565b5f33610591818585610872565b5060019392505050565b5f61057e826001610884565b5f336105b48582856108b3565b6105bf858585610980565b60019150505b9392505050565b5f6104de817f0000000000000000000000000000000000000000000000000000000000000000611465565b6106018282610a29565b5050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610635565b60405180910390fd5b5f61063f856107d6565b905061064d33858784610a83565b949350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f610681856106b5565b905061064d33858388610a83565b6060600480546104f2906113e7565b6106018282610b2f565b5f33610591818585610980565b5f61057e82600161083a565b5f806106cc836107e1565b90508085111561072e576040517ffe9cceec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107388661059b565b90506107473386868985610b89565b95945050505050565b5f8061075b83610810565b9050808511156107bd576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107c786610573565b9050610747338686848a610b89565b5f61057e825f610884565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e905f61083a565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e565b5f6105c561084661042e565b61085190600161147e565b61085c5f600a6115af565b600254610869919061147e565b85919085610c8a565b61087f8383836001610ccc565b505050565b5f6105c561089382600a6115af565b6002546108a0919061147e565b6108a861042e565b61086990600161147e565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461097a578181101561096c576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018290526044810183905260640161062c565b61097a84848484035f610ccc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109cf576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8216610a1e576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b61087f838383610e03565b73ffffffffffffffffffffffffffffffffffffffff8216610a78576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b6106015f8383610e03565b610aaf7f0000000000000000000000000000000000000000000000000000000000000000853085610faa565b610ab98382610a29565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051610b21929190918252602082015260400190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b7e576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b610601825f83610e03565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610bc757610bc78386836108b3565b610bd18382610b2f565b610bfc7f00000000000000000000000000000000000000000000000000000000000000008584611033565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051610c7b929190918252602082015260400190565b60405180910390a45050505050565b5f610cb7610c9783611071565b8015610cb257505f8480610cad57610cad6115bd565b868809115b151590565b610cc286868661109d565b610747919061147e565b73ffffffffffffffffffffffffffffffffffffffff8416610d1b576040517fe602df050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8316610d6a576040517f94280d620000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600160209081526040808320938716835292905220829055801561097a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b2191815260200190565b73ffffffffffffffffffffffffffffffffffffffff8316610e3a578060025f828254610e2f919061147e565b90915550610eea9050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020819052604090205481811015610ebf576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602481018290526044810183905260640161062c565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610f1357600280548290039055610f3e565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f9d91815260200190565b60405180910390a3505050565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283811660448301526064820183905261097a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611172565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261087f91859182169063a9059cbb90606401610fec565b5f6002826003811115611086576110866115ea565b6110909190611617565b60ff166001149050919050565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f036110f0578382816110e6576110e66115bd565b04925050506105c5565b808411611107576111076003851502601118611211565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f8060205f8451602086015f885af180611191576040513d5f823e3d81fd5b50505f513d915081156111a85780600114156111c2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561097a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161062c565b634e487b715f52806020526024601cfd5b5f602080835283518060208501525f5b8181101561124e57858101830151858201604001528201611232565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f6020828403121561129c575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112c6575f80fd5b919050565b5f80604083850312156112dc575f80fd5b6112e5836112a3565b946020939093013593505050565b5f805f60608486031215611305575f80fd5b61130e846112a3565b925061131c602085016112a3565b9150604084013590509250925092565b5f6020828403121561133c575f80fd5b6105c5826112a3565b5f8060408385031215611356575f80fd5b82359150611366602084016112a3565b90509250929050565b5f805f60608486031215611381575f80fd5b83359250611391602085016112a3565b915061139f604085016112a3565b90509250925092565b5f80604083850312156113b9575f80fd5b6113c2836112a3565b9150611366602084016112a3565b5f602082840312156113e0575f80fd5b5051919050565b600181811c908216806113fb57607f821691505b602082108103611432577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff818116838216019081111561057e5761057e611438565b8082018082111561057e5761057e611438565b600181815b808511156114ea57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156114d0576114d0611438565b808516156114dd57918102915b93841c9390800290611496565b509250929050565b5f826115005750600161057e565b8161150c57505f61057e565b8160018114611522576002811461152c57611548565b600191505061057e565b60ff84111561153d5761153d611438565b50506001821b61057e565b5060208310610133831016604e8410600b841016171561156b575081810a61057e565b6115758383611491565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156115a7576115a7611438565b029392505050565b5f6105c560ff8416836114f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff83168061164e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff8416069150509291505056fea2646970667358221220e4c7204716e83cc6436d4c089c98eaebf1301b2ac725b313f068e28e347d110264736f6c6343000816003360e060405234801562000010575f80fd5b506040516200355f3803806200355f833981016040819052620000339162000240565b828282826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000099919062000287565b8282818181813380620000c557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000d081620001d0565b506001600160a01b038083166080528116620000ff57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b15801562000144575f80fd5b505af115801562000157573d5f803e3d5ffd5b50505050505050506200016f6200021f60201b60201c565b60ff168360ff16101562000196576040516301e9714b60e41b815260040160405180910390fd5b620001a3600684620002c4565b620001b090600a620003df565b60a0525050506001600160a01b0390921660c05250620003ef9350505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b80516001600160a01b03811681146200023b575f80fd5b919050565b5f805f6060848603121562000253575f80fd5b6200025e8462000224565b92506200026e6020850162000224565b91506200027e6040850162000224565b90509250925092565b5f6020828403121562000298575f80fd5b815160ff81168114620002a9575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b60ff8281168282160390811115620002e057620002e0620002b0565b92915050565b600181815b808511156200032657815f19048211156200030a576200030a620002b0565b808516156200031857918102915b93841c9390800290620002eb565b509250929050565b5f826200033e57506001620002e0565b816200034c57505f620002e0565b8160018114620003655760028114620003705762000390565b6001915050620002e0565b60ff841115620003845762000384620002b0565b50506001821b620002e0565b5060208310610133831016604e8410600b8410161715620003b5575081810a620002e0565b620003c18383620002e6565b805f1904821115620003d757620003d7620002b0565b029392505050565b5f620002a960ff8416836200032e565b60805160a05160c0516130f16200046e5f395f818161069e015281816119b40152611b9001525f8181610514015281816118f10152818161196a0152611a6601525f81816104110152818161088301528181610f6d015281816112810152818161156601528181611bf201528181611de90152611ee001526130f15ff3fe6080604052600436106101f5575f3560e01c806382413eac11610117578063bc70b354116100ac578063d045a0dc1161007c578063f2fde38b11610062578063f2fde38b14610671578063fc0c546a14610690578063ff7bd03d146106c2575f80fd5b8063d045a0dc1461063f578063d424388514610652575f80fd5b8063bc70b354146105cd578063bd815db0146105ec578063c7c7f5b3146105ff578063ca5eb5e114610620575f80fd5b80639f68b964116100e75780639f68b96414610544578063b731ea0a14610557578063b98bd07014610583578063bb0b6a53146105a2575f80fd5b806382413eac146104a0578063857749b0146104bf5780638da5cb5b146104da578063963efcaa14610503575f80fd5b80633b6f743b1161018d5780635e280f111161015d5780635e280f11146104005780636fc1b31e14610433578063715018a6146104525780637d25a05e14610466575f80fd5b80633b6f743b1461035157806352ae28791461037d5780635535d4611461038f5780635a0dfe4d146103bb575f80fd5b8063156a0d0f116101c8578063156a0d0f146102bd57806317442b70146102fd5780631f5e13341461031e5780633400288b14610332575f80fd5b80630d35b415146101f9578063111ecdad1461023057806313137d6514610281578063134d4f2514610296575b5f80fd5b348015610204575f80fd5b50610218610213366004611ffe565b6106e1565b6040516102279392919061209b565b60405180910390f35b34801561023b575f80fd5b5060045461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610227565b61029461028f3660046121c6565b610881565b005b3480156102a1575f80fd5b506102aa600281565b60405161ffff9091168152602001610227565b3480156102c8575f80fd5b50604080517f02e49c2c0000000000000000000000000000000000000000000000000000000081526001602082015201610227565b348015610308575f80fd5b5060408051600181526002602082015201610227565b348015610329575f80fd5b506102aa600181565b34801561033d575f80fd5b5061029461034c366004612277565b610980565b34801561035c575f80fd5b5061037061036b3660046122ac565b610996565b60405161022791906122fb565b348015610388575f80fd5b503061025c565b34801561039a575f80fd5b506103ae6103a9366004612323565b6109fc565b6040516102279190612354565b3480156103c6575f80fd5b506103f06103d5366004612277565b63ffffffff919091165f908152600160205260409020541490565b6040519015158152602001610227565b34801561040b575f80fd5b5061025c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043e575f80fd5b5061029461044d366004612366565b610a9e565b34801561045d575f80fd5b50610294610b20565b348015610471575f80fd5b50610487610480366004612277565b5f92915050565b60405167ffffffffffffffff9091168152602001610227565b3480156104ab575f80fd5b506103f06104ba366004612381565b610b33565b3480156104ca575f80fd5b5060405160068152602001610227565b3480156104e5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661025c565b34801561050e575f80fd5b506105367f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610227565b34801561054f575f80fd5b5060016103f0565b348015610562575f80fd5b5060025461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561058e575f80fd5b5061029461059d366004612425565b610b55565b3480156105ad575f80fd5b506105366105bc366004612464565b60016020525f908152604090205481565b3480156105d8575f80fd5b506103ae6105e736600461247d565b610b6f565b6102946105fa366004612425565b610d29565b61061261060d3660046124da565b610eed565b604051610227929190612561565b34801561062b575f80fd5b5061029461063a366004612366565b610f20565b61029461064d3660046121c6565b610fc7565b34801561065d575f80fd5b5061029461066c366004612366565b61100f565b34801561067c575f80fd5b5061029461068b366004612366565b61108a565b34801561069b575f80fd5b507f000000000000000000000000000000000000000000000000000000000000000061025c565b3480156106cd575f80fd5b506103f06106dc3660046125b3565b6110ed565b604080518082019091525f8082526020820152606061071160405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078091906125cd565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ec91906125e8565b604080518082018252848152602080820184905282515f8082529181019093529097509192509061083f565b604080518082019091525f8152606060208201528152602001906001900390816108185790505b5093505f80610863604089013560608a013561085e60208c018c612464565b611121565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146108f7576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b602087018035906109119061090c908a612464565b611175565b14610968576109236020880188612464565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602088013560248201526044016108ee565b610977878787878787876111c9565b50505050505050565b61098861135a565b61099282826113ac565b5050565b604080518082019091525f80825260208201525f6109c46040850135606086013561085e6020880188612464565b9150505f806109d38684611400565b90925090506109f06109e86020880188612464565b838388611551565b93505050505b92915050565b600360209081525f928352604080842090915290825290208054610a1f9061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4b9061262c565b8015610a965780601f10610a6d57610100808354040283529160200191610a96565b820191905f5260205f20905b815481529060010190602001808311610a7957829003601f168201915b505050505081565b610aa661135a565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610b2861135a565b610b315f61163c565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b610b5d61135a565b610992610b6a8284612757565b6116b0565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ba29061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bce9061262c565b8015610c195780601f10610bf057610100808354040283529160200191610c19565b820191905f5260205f20905b815481529060010190602001808311610bfc57829003601f168201915b5050505050905080515f03610c675783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610b4d9350505050565b5f839003610c76579050610b4d565b60028310610cf357610cbc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506117b192505050565b80610cca8460028188612860565b604051602001610cdc93929190612887565b604051602081830303815290604052915050610b4d565b83836040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9291906128f4565b5f5b81811015610e2c5736838383818110610d4657610d46612907565b9050602002810190610d589190612934565b9050610d8a610d6a6020830183612464565b602083013563ffffffff919091165f908152600160205260409020541490565b610d945750610e24565b3063d045a0dc60c08301358360a0810135610db3610100830183612970565b610dc4610100890160e08a01612366565b610dd26101208a018a612970565b6040518963ffffffff1660e01b8152600401610df497969594939291906129e6565b5f604051808303818588803b158015610e0b575f80fd5b505af1158015610e1d573d5f803e3d5ffd5b5050505050505b600101610d2b565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015610e75573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610eba9190810190612a79565b6040517f8351eea70000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b610ef5611fa4565b604080518082019091525f8082526020820152610f138585856117f6565b915091505b935093915050565b610f2861135a565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b158015610fae575f80fd5b505af1158015610fc0573d5f803e3d5ffd5b5050505050565b333014611000576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097787878787878787610968565b61101761135a565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610b15565b61109261135a565b73ffffffffffffffffffffffffffffffffffffffff81166110e1576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016108ee565b6110ea8161163c565b50565b5f6020820180359060019083906111049086612464565b63ffffffff16815260208101919091526040015f20541492915050565b5f8061112c856118ee565b915081905083811015610f18576040517f71c4efed00000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016108ee565b63ffffffff81165f90815260016020526040812054806109f6576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff841660048201526024016108ee565b5f6111da6111d78787611924565b90565b90505f611205826111f36111ee8a8a611942565b611964565b61120060208d018d612464565b611999565b905060288611156112eb575f61124161122460608c0160408d01612ae2565b61123160208d018d612464565b8461123c8c8c6119e3565b611a2d565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112bc9086908d905f908790600401612afd565b5f604051808303815f87803b1580156112d3575f80fd5b505af11580156112e5573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61133160208d018d612464565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b31576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016108ee565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61145b856020013561141586611a5f565b61142260a0890189612970565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611ad292505050565b90935090505f8161146d576001611470565b60025b90506114906114826020880188612464565b826105e760808a018a612970565b60045490935073ffffffffffffffffffffffffffffffffffffffff168015611547576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906115069088908890600401612b45565b602060405180830381865afa158015611521573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115459190612b69565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff1681526020016115c089611175565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016115f5929190612b84565b6040805180830381865afa15801561160f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116339190612c55565b95945050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b8151811015611781576116e18282815181106116d0576116d0612907565b6020026020010151604001516117b1565b8181815181106116f3576116f3612907565b60200260200101516040015160035f84848151811061171457611714612907565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f84848151811061174b5761174b612907565b60200260200101516020015161ffff1661ffff1681526020019081526020015f2090816117789190612cb3565b506001016116b2565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610b159190612dcf565b600281015161ffff811660031461099257816040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b6117fe611fa4565b604080518082019091525f80825260208201525f8061183333604089013560608a013561182e60208c018c612464565b611b64565b915091505f806118438984611400565b909250905061186f61185860208b018b612464565b8383611869368d90038d018d612e76565b8b611bc1565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118bd908d018d612464565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b5f7f000000000000000000000000000000000000000000000000000000000000000061191a8184612ea6565b6109f69190612ede565b5f6119326020828486612860565b61193b91612f1a565b9392505050565b5f611951602860208486612860565b61195a91612f56565b60c01c9392505050565b5f6109f67f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff8416612ede565b5f6119db73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585611cd4565b509092915050565b60606119f28260288186612860565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606084848484604051602001611a469493929190612f9e565b6040516020818303038152906040529050949350505050565b5f80611a8b7f000000000000000000000000000000000000000000000000000000000000000084612ea6565b905067ffffffffffffffff8111156109f6576040517fe2ce9413000000000000000000000000000000000000000000000000000000008152600481018290526024016108ee565b8051606090151580611b33578484604051602001611b1f92919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b604051602081830303815290604052611b5a565b84843385604051602001611b4a949392919061301b565b6040516020818303038152906040525b9150935093915050565b5f80611b71858585611121565b9092509050611bb873ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016873085611d5a565b94509492505050565b611bc9611fa4565b5f611bd6845f0151611da6565b602085015190915015611bf057611bf08460200151611de6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff168152602001611c4d8c611175565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b8152600401611c88929190612b84565b60806040518083038185885af1158015611ca4573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611cc99190613073565b979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052611d5591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611f05565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052611da09186918216906323b872dd90608401611d0e565b50505050565b5f813414611de2576040517f9f7041200000000000000000000000000000000000000000000000000000000081523460048201526024016108ee565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7491906125cd565b905073ffffffffffffffffffffffffffffffffffffffff8116611ec3576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61099273ffffffffffffffffffffffffffffffffffffffff8216337f000000000000000000000000000000000000000000000000000000000000000085611d5a565b5f8060205f8451602086015f885af180611f24576040513d5f823e3d81fd5b50505f513d91508115611f3b578060011415611f55565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611da0576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016108ee565b60405180606001604052805f80191681526020015f67ffffffffffffffff168152602001611fe360405180604001604052805f81526020015f81525090565b905290565b5f60e08284031215611ff8575f80fd5b50919050565b5f6020828403121561200e575f80fd5b813567ffffffffffffffff811115612024575f80fd5b610b4d84828501611fe8565b5f5b8381101561204a578181015183820152602001612032565b50505f910152565b5f8151808452612069816020860160208601612030565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612132578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261211f87890182612052565b97505093820193908201906001016120d5565b50508751606088015250505060208501516080850152509050610b4d565b5f60608284031215611ff8575f80fd5b5f8083601f840112612170575f80fd5b50813567ffffffffffffffff811115612187575f80fd5b60208301915083602082850101111561219e575f80fd5b9250929050565b73ffffffffffffffffffffffffffffffffffffffff811681146110ea575f80fd5b5f805f805f805f60e0888a0312156121dc575f80fd5b6121e68989612150565b965060608801359550608088013567ffffffffffffffff80821115612209575f80fd5b6122158b838c01612160565b909750955060a08a0135915061222a826121a5565b90935060c0890135908082111561223f575f80fd5b5061224c8a828b01612160565b989b979a50959850939692959293505050565b803563ffffffff81168114612272575f80fd5b919050565b5f8060408385031215612288575f80fd5b6122918361225f565b946020939093013593505050565b80151581146110ea575f80fd5b5f80604083850312156122bd575f80fd5b823567ffffffffffffffff8111156122d3575f80fd5b6122df85828601611fe8565b92505060208301356122f08161229f565b809150509250929050565b8151815260208083015190820152604081016109f6565b803561ffff81168114612272575f80fd5b5f8060408385031215612334575f80fd5b61233d8361225f565b915061234b60208401612312565b90509250929050565b602081525f61193b6020830184612052565b5f60208284031215612376575f80fd5b813561193b816121a5565b5f805f8060a08587031215612394575f80fd5b61239e8686612150565b9350606085013567ffffffffffffffff8111156123b9575f80fd5b6123c587828801612160565b90945092505060808501356123d9816121a5565b939692955090935050565b5f8083601f8401126123f4575f80fd5b50813567ffffffffffffffff81111561240b575f80fd5b6020830191508360208260051b850101111561219e575f80fd5b5f8060208385031215612436575f80fd5b823567ffffffffffffffff81111561244c575f80fd5b612458858286016123e4565b90969095509350505050565b5f60208284031215612474575f80fd5b61193b8261225f565b5f805f8060608587031215612490575f80fd5b6124998561225f565b93506124a760208601612312565b9250604085013567ffffffffffffffff8111156124c2575f80fd5b6124ce87828801612160565b95989497509550505050565b5f805f83850360808112156124ed575f80fd5b843567ffffffffffffffff811115612503575f80fd5b61250f87828801611fe8565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612541575f80fd5b506020840191506060840135612556816121a5565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff6020850151166020830152604084015161259c604084018280518252602090810151910152565b5082516080830152602083015160a083015261193b565b5f606082840312156125c3575f80fd5b61193b8383612150565b5f602082840312156125dd575f80fd5b815161193b816121a5565b5f602082840312156125f8575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b600181811c9082168061264057607f821691505b602082108103611ff8577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b6040516060810167ffffffffffffffff8111828210171561269a5761269a6125ff565b60405290565b6040805190810167ffffffffffffffff8111828210171561269a5761269a6125ff565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561270a5761270a6125ff565b604052919050565b5f67ffffffffffffffff82111561272b5761272b6125ff565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612771576127716125ff565b8360051b60206127828183016126c3565b868152918501918181019036841115612799575f80fd5b865b84811015612854578035868111156127b1575f80fd5b880160603682900312156127c3575f80fd5b6127cb612677565b6127d48261225f565b81526127e1868301612312565b86820152604080830135898111156127f7575f80fd5b929092019136601f84011261280a575f80fd5b823561281d61281882612712565b6126c3565b8181523689838701011115612830575f80fd5b818986018a8301375f9181018901919091529082015284525091830191830161279b565b50979650505050505050565b5f808585111561286e575f80fd5b8386111561287a575f80fd5b5050820193919092039150565b5f8451612898818460208901612030565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610b4d6020830184866128ad565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112612966575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129a3575f80fd5b83018035915067ffffffffffffffff8211156129bd575f80fd5b60200191503681900382131561219e575f80fd5b67ffffffffffffffff811681146110ea575f80fd5b63ffffffff6129f48961225f565b168152602088013560208201525f6040890135612a10816129d1565b67ffffffffffffffff811660408401525087606083015260e06080830152612a3c60e0830187896128ad565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c0840152612a6b8185876128ad565b9a9950505050505050505050565b5f60208284031215612a89575f80fd5b815167ffffffffffffffff811115612a9f575f80fd5b8201601f81018413612aaf575f80fd5b8051612abd61281882612712565b818152856020838501011115612ad1575f80fd5b611633826020830160208601612030565b5f60208284031215612af2575f80fd5b813561193b816129d1565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f612b3b6080830184612052565b9695505050505050565b604081525f612b576040830185612052565b82810360208401526116338185612052565b5f60208284031215612b79575f80fd5b815161193b8161229f565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a06080840152612bb960e0840182612052565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a0850152612bf48282612052565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215612c37575f80fd5b612c3f6126a0565b9050815181526020820151602082015292915050565b5f60408284031215612c65575f80fd5b61193b8383612c27565b601f821115611d5557805f5260205f20601f840160051c81016020851015612c945750805b601f840160051c820191505b81811015610fc0575f8155600101612ca0565b815167ffffffffffffffff811115612ccd57612ccd6125ff565b612ce181612cdb845461262c565b84612c6f565b602080601f831160018114612d33575f8415612cfd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612dc7565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612d7f57888601518255948401946001909101908401612d60565b5085821015612dbb57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015612e68578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612e5481860183612052565b968901969450505090860190600101612df6565b509098975050505050505050565b5f60408284031215612e86575f80fd5b612e8e6126a0565b82358152602083013560208201528091505092915050565b5f82612ed9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109f6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b803560208310156109f6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015612f965780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161300b81602c850160208701612030565b91909101602c0195945050505050565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f8251613063816048850160208701612030565b9190910160480195945050505050565b5f60808284031215613083575f80fd5b61308b612677565b82518152602083015161309d816129d1565b60208201526130af8460408501612c27565b6040820152939250505056fea26469706673582212201d2eeb249efab86d32800173e736d788fc450154b978b7660829bc5ead288d1364736f6c6343000816003361016060405234801562000011575f80fd5b50604051620024be380380620024be833981016040819052620000349162000608565b60015f556001600160a01b03808416608052821660a081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa15801562000087573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000659565b6001600160a01b0390811660c052811660e081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa158015620000fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000122919062000659565b6001600160a01b0316610100816001600160a01b03168152505060a0516001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a1919062000659565b6001600160a01b03166101208190526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620001ea573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200021091906200067e565b63ffffffff1661014052608051610100516001600160a01b039081169116146200026c576101005160805160405163070bc55b60e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b6080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d1919062000659565b6001600160a01b031660c0516001600160a01b031614620003815760c0516080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000354919062000659565b60405163ba9d665f60e01b81526001600160a01b0392831660048201529116602482015260440162000263565b60e0516001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e69190620006a3565b620004145760e051604051637e0a8a5760e11b81526001600160a01b03909116600482015260240162000263565b60c05160405163095ea7b360e01b81526001600160a01b0385811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af115801562000465573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200048b9190620006a3565b506101005160405163095ea7b360e01b81526001600160a01b0383811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620004de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005049190620006a3565b50816001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000542573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005689190620006a3565b15620005e75760c05160405163095ea7b360e01b81526001600160a01b0384811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620005bf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005e59190620006a3565b505b505050620006c4565b6001600160a01b038116811462000605575f80fd5b50565b5f805f606084860312156200061b575f80fd5b83516200062881620005f0565b60208501519093506200063b81620005f0565b60408501519092506200064e81620005f0565b809150509250925092565b5f602082840312156200066a575f80fd5b81516200067781620005f0565b9392505050565b5f602082840312156200068f575f80fd5b815163ffffffff8116811462000677575f80fd5b5f60208284031215620006b4575f80fd5b8151801515811462000677575f80fd5b60805160a05160c05160e051610100516101205161014051611d246200079a5f395f81816102a5015261111301525f8181610200015261096b01525f818161027201528181610375015261119101525f818161018701528181610a1d0152610d4d01525f81816101540152818161031101526111b701525f818160e2015281816103be015281816108dd015281816109c601528181610da7015261113e01525f81816101ba015281816104560152818161055701528181610627015281816107230152818161104201526113290152611d245ff3fe6080604052600436106100c6575f3560e01c80636fad06f511610071578063a99ecc541161004c578063a99ecc5414610261578063aa72fe3f14610294578063d0a10260146102dc575f80fd5b80636fad06f5146101ef5780637e6e1e10146102225780639a6b198c1461024e575f80fd5b8063369caf83116100a1578063369caf8314610176578063411557d1146101a957806353174fa4146101dc575f80fd5b80630bfec755146100d157806319197ec61461012e5780631df34fa314610143575f80fd5b366100cd57005b5f80fd5b3480156100dc575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c36600461160e565b6102ef565b005b34801561014e575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b348015610181575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b4575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b6101416101ea36600461160e565b610353565b3480156101fa575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561022d575f80fd5b5061024161023c366004611661565b6103a9565b60405161012591906116c5565b61014161025c3660046116dc565b610843565b34801561026c575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561029f575f80fd5b506102c77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610125565b6101416102ea36600461177c565b610953565b6102f7610c50565b61033973ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d20565b61034e60015f55565b505050565b61035b610c50565b61039d73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d7a565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036105e0576040517fd905777e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063d905777e90602401602060405180830381865afa15801561049d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c19190611813565b905080841115610528576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716600482015260248101859052604481018290526064015b60405180910390fd5b6040517f4cdad506000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634cdad50690602401602060405180830381865afa1580156105b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d59190611813565b6040840152506107a8565b6040517f402d267d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063402d267d90602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611813565b9050808411156106f4576040517f79012fb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602481018590526044810182905260640161051f565b6040517fef8b30f7000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef8b30f790602401602060405180830381865afa15801561077d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a19190611813565b6040840152505b6040517f3b6f743b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690633b6f743b906107fc9085905f9060040161190a565b6040805180830381865afa158015610816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a919061197a565b95945050505050565b33301461087e576040517fa19dbf0000000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b5f808380602001905181019061089491906119e9565b91509150803410156108db576040517f7cb769dc0000000000000000000000000000000000000000000000000000000081526004810182905234602482015260440161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361093f5761093a85848432610d20565b61094b565b61094b85848432610d7a565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146109c4576040517f91ac5e4f00000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015610a6c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15610abb576040517f84fb3f0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816600482015260240161051f565b5f610ac68686610dcd565b90505f610ad38787610dee565b90505f610ae08888610dfd565b6040517f9a6b198c0000000000000000000000000000000000000000000000000000000081529091503090639a6b198c903490610b27908e90889087908990600401611ad0565b5f604051808303818588803b158015610b3e575f80fd5b505af193505050508015610b50575060015b610c19573d808015610b7d576040519150601f19603f3d011682016040523d82523d5f602084013e610b82565b606091505b507f7cb769dc00000000000000000000000000000000000000000000000000000000610bad82611b15565b7fffffffff000000000000000000000000000000000000000000000000000000001603610bdc57805181602001fd5b610be98b8a8a8632610e47565b6040518a907ffe509803c09416b28ff3d8f690c8b0c61462a892c46d5430c8fb20abe472daf0905f90a250610c44565b60405189907f27b5aea9f5736c02241d8a0272e9ec988ea44cf85c4b4760329431aa19678394905f90a25b50505050505050505050565b60025f5403610c8b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052610d1a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610f6c565b50505050565b5f610d2b858561100b565b9050610d3b8184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5050505050565b5f610d8585856112eb565b9050610d958184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5f610ddc604c602c8486611b64565b610de591611b8b565b90505b92915050565b5f610ddc602c600c8486611b64565b6060610e0c82604c8186611b64565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b610e8c6040518060e001604052805f63ffffffff1681526020015f80191681526020015f81526020015f81526020016060815260200160608152602001606081525090565b610e96858561136d565b63ffffffff168152610ea88585610dcd565b602080830191909152604080830185905280518082018252348082525f9382019390935290517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89169263c7c7f5b3929091610f219186918890600401611bc7565b60c06040518083038185885af1158015610f3d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f629190611c16565b5050505050505050565b5f8060205f8451602086015f885af180610f8b576040513d5f823e3d81fd5b50505f513d91508115610fa2578060011415610fbc565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610d1a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161051f565b6040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018290523060248201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636e553f65906044015b6020604051808303815f875af115801561109e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de59190611813565b80821015611106576040517f71c4efed000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161051f565b5050565b815163ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116911603611242575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146111b5577f00000000000000000000000000000000000000000000000000000000000000006111d7565b7f00000000000000000000000000000000000000000000000000000000000000005b90503415611211576040517f7578d2bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1a61121f846020015190565b604085015173ffffffffffffffffffffffffffffffffffffffff8416919061138f565b604080518082018252348082525f602083015291517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169263c7c7f5b39290916112aa9187918790600401611bc7565b60c06040518083038185885af11580156112c6573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d739190611c16565b6040517fba08765200000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ba08765290606401611082565b5f61137c600c60088486611b64565b61138591611ca6565b60e01c9392505050565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261034e91859182169063a9059cbb90606401610cd3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff8111828210171561141d5761141d6113cd565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561146a5761146a6113cd565b604052919050565b63ffffffff81168114611483575f80fd5b50565b803561149181611472565b919050565b5f67ffffffffffffffff8211156114af576114af6113cd565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126114ea575f80fd5b81356114fd6114f882611496565b611423565b818152846020838601011115611511575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0828403121561153d575f80fd5b6115456113fa565b905061155082611486565b8152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff8082111561158a575f80fd5b611596858386016114db565b608084015260a08401359150808211156115ae575f80fd5b6115ba858386016114db565b60a084015260c08401359150808211156115d2575f80fd5b506115df848285016114db565b60c08301525092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611491575f80fd5b5f805f60608486031215611620575f80fd5b83359250602084013567ffffffffffffffff81111561163d575f80fd5b6116498682870161152d565b925050611658604085016115eb565b90509250925092565b5f805f8060808587031215611674575f80fd5b61167d856115eb565b935061168b602086016115eb565b925060408501359150606085013567ffffffffffffffff8111156116ad575f80fd5b6116b98782880161152d565b91505092959194509250565b815181526020808301519082015260408101610de8565b5f805f80608085870312156116ef575f80fd5b6116f8856115eb565b935060208501359250604085013567ffffffffffffffff81111561171a575f80fd5b611726878288016114db565b949793965093946060013593505050565b5f8083601f840112611747575f80fd5b50813567ffffffffffffffff81111561175e575f80fd5b602083019150836020828501011115611775575f80fd5b9250929050565b5f805f805f805f60a0888a031215611792575f80fd5b61179b886115eb565b965060208801359550604088013567ffffffffffffffff808211156117be575f80fd5b6117ca8b838c01611737565b90975095508591506117de60608b016115eb565b945060808a01359150808211156117f3575f80fd5b506118008a828b01611737565b989b979a50959850939692959293505050565b5f60208284031215611823575f80fd5b5051919050565b5f5b8381101561184457818101518382015260200161182c565b50505f910152565b5f815180845261186381602086016020860161182a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526118d760e085018261184c565b905060a083015184820360a08601526118f0828261184c565b91505060c083015184820360c086015261083a828261184c565b604081525f61191c6040830185611895565b905082151560208301529392505050565b5f6040828403121561193d575f80fd5b6040516040810181811067ffffffffffffffff82111715611960576119606113cd565b604052825181526020928301519281019290925250919050565b5f6040828403121561198a575f80fd5b610de5838361192d565b805161149181611472565b5f82601f8301126119ae575f80fd5b81516119bc6114f882611496565b8181528460208386010111156119d0575f80fd5b6119e182602083016020870161182a565b949350505050565b5f80604083850312156119fa575f80fd5b825167ffffffffffffffff80821115611a11575f80fd5b9084019060e08287031215611a24575f80fd5b611a2c6113fa565b611a3583611994565b8152602083015160208201526040830151604082015260608301516060820152608083015182811115611a66575f80fd5b611a728882860161199f565b60808301525060a083015182811115611a89575f80fd5b611a958882860161199f565b60a08301525060c083015182811115611aac575f80fd5b611ab88882860161199f565b60c08301525060209590950151949694955050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f611b04608083018561184c565b905082606083015295945050505050565b5f815160208301517fffffffff0000000000000000000000000000000000000000000000000000000080821693506004831015611b5c5780818460040360031b1b83161693505b505050919050565b5f8085851115611b72575f80fd5b83861115611b7e575f80fd5b5050820193919092039150565b80356020831015610de8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b608081525f611bd96080830186611895565b9050611bf2602083018580518252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff83166060830152949350505050565b5f8082840360c0811215611c28575f80fd5b6080811215611c35575f80fd5b506040516060810167ffffffffffffffff8282108183111715611c5a57611c5a6113cd565b8160405285518352602086015191508082168214611c76575f80fd5b506020820152611c89856040860161192d565b60408201529150611c9d846080850161192d565b90509250929050565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611ce65780818660040360031b1b83161692505b50509291505056fea26469706673582212203c210af0c85b10469f135dd49d1274fa8e04b8bee0c2069213c4acfe2a3036b564736f6c63430008160033608060405234801561000f575f80fd5b50610a8c8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e5c5e9a31461002d575b5f80fd5b61004061003b3660046106f8565b610057565b60405161004e9291906107cf565b60405180910390f35b606080610064848461006f565b915091509250929050565b60608060028310156100b4576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f6100c260028286886107fc565b6100cb91610823565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161029357805f5b86831015610220575f61011460018501858a8c6107fc565b61011d9161086b565b60f81c90505f81900361015e576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016100ab565b8160ff165f03610170578091506101ac565b8160ff168160ff16146101ac57365f61018b86868c8e6107fc565b9150915061019c89898685856102aa565b9099509750859450919250829150505b60018401935f906101c290600301868b8d6107fc565b6101cb91610823565b60f01c90505f81900361020d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016100ab565b8060020161ffff168501945050506100fc565b82871461025c576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016100ab565b600287111561028c57365f61027385858b8d6107fc565b9150915061028488888585856102aa565b909850965050505b50506102a1565b61029e82878761041d565b93505b50509250929050565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161034457865115610307578684846040516020016102f3939291906108b1565b60405160208183030381529060405261033d565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650610412565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016103db5785511561039e5785848460405160200161038a939291906108b1565b6040516020818303038152906040526103d4565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550610412565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016100ab565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff8516016105425760228214610484576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6104a46104966022600286886107fc565b61049f916108d7565b61069f565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050610698565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff8516016106605760428211158061057d5750606282115b156105b4576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c66104966022600286886107fc565b90505f6105da6104966042602287896107fc565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe850161060d866042818a6107fc565b610616916108d7565b60405160086020938403029190911c9250610647916001916011918391889183916031916002918b918b9101610914565b6040516020818303038152906040529350505050610698565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016100ab565b9392505050565b5f6fffffffffffffffffffffffffffffffff8211156106f4576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016100ab565b5090565b5f8060208385031215610709575f80fd5b823567ffffffffffffffff80821115610720575f80fd5b818501915085601f830112610733575f80fd5b813581811115610741575f80fd5b866020828501011115610752575f80fd5b60209290920196919550909350505050565b5f5b8381101561077e578181015183820152602001610766565b50505f910152565b5f815180845261079d816020860160208601610764565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f6107e16040830185610786565b82810360208401526107f38185610786565b95945050505050565b5f808585111561080a575f80fd5b83861115610816575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156108635780818660020360031b1b83161692505b505092915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156108635760019490940360031b84901b1690921692915050565b5f84516108c2818460208901610764565b8201838582375f930192835250909392505050565b8035602083101561090e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b165b92915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008b60f01b166001840152808a60f81b1660038401527fffffffffffffffffffffffffffffffff000000000000000000000000000000008960801b166004840152808860f81b166014840152506109dc601583018760f01b7fffff000000000000000000000000000000000000000000000000000000000000169052565b610a0d601783018660f81b7fff00000000000000000000000000000000000000000000000000000000000000169052565b610a3e601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea26469706673582212204c5336eb5e4cfed89d8f0ececad030c194802d04a3053cab299816b06066820764736f6c63430008160033a2646970667358221220ad1fffc8ff9686bca271dfbe28a94124292e3223f33b1d97a505fe3c4076c2ee64736f6c63430008160033",
+ "sourceMap": "869:5778:137:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5538:1107;;;;;;;;;;;;;:::i;:::-;;21149:174:74;;;;;;;;;;-1:-1:-1;21149:174:74;;;;;:::i;:::-;;:::i;1563:26:135:-;;;;;;;;;;-1:-1:-1;1563:26:135;;;;-1:-1:-1;;;;;1563:26:135;;;;;;-1:-1:-1;;;;;854:55:139;;;836:74;;824:2;809:18;1563:26:135;;;;;;;;23482:633:74;;;;;;:::i;:::-;;:::i;981:106:137:-;;;;;;;;;;;;;:::i;4416:50:74:-;;;;;;;;;;;;4461:5;4416:50;;;;;3782:6:139;3770:19;;;3752:38;;3740:2;3725:18;4416:50:74;3608:188:139;1178:27:135;;;;;;;;;;-1:-1:-1;1178:27:135;;;;;;;-1:-1:-1;;;;;1178:27:135;;;1135:36;;;;;;;;;;;;1168:3;1135:36;;;;;4223:10:139;4211:23;;;4193:42;;4181:2;4166:18;1135:36:135;4049:192:139;1764:51:135;;;;;;;;;;;;1806:9;1764:51;;;;;4392:25:139;;;4380:2;4365:18;1764:51:135;4246:177:139;4297:50:74;;;;;;;;;;;;4343:4;4297:50;;;;;4604:32:139;4592:45;;;4574:64;;4562:2;4547:18;4297:50:74;4428:216:139;1653:104:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5226:166:74:-;;;;;;;;;;-1:-1:-1;5226:166:74;;;;;:::i;:::-;;:::i;2907:134:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1095:34:135:-;;;;;;;;;;;;1128:1;1095:34;;4586:43:74;;;;;;;;;;-1:-1:-1;4586:43:74;;;;;;;;;;;7019:34:139;7007:47;;;6989:66;;6977:2;6962:18;4586:43:74;6843:218:139;1015:34:135;;;;;;;;;;;;1048:1;1015:34;;16845:490:74;;;;;;;;;;-1:-1:-1;16845:490:74;;;;;:::i;:::-;;:::i;3823:151:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1211:34:135:-;;;;;;;;;;-1:-1:-1;1211:34:135;;;;-1:-1:-1;;;;;1211:34:135;;;25280:469:74;;;;;;:::i;:::-;;:::i;1352:27:135:-;;;;;;;;;;-1:-1:-1;1352:27:135;;;;-1:-1:-1;;;;;1352:27:135;;;3684:133:94;;;;;;;;;;;;;:::i;3385:141::-;;;;;;;;;;;;;:::i;5976:204:73:-;;;;;;;;;;-1:-1:-1;5976:204:73;;;;;:::i;:::-;;:::i;:::-;;;;11502:6:139;11490:19;;;11472:38;;11529:34;11599:15;;;11594:2;11579:18;;11572:43;11651:15;;11631:18;;;11624:43;11460:2;11445:18;5976:204:73;11272:401:139;4530:49:74;;;;;;;;;;;;4574:5;4530:49;;1252:27:135;;;;;;;;;;-1:-1:-1;1252:27:135;;;;-1:-1:-1;;;;;1252:27:135;;;1876:52;;;;;;;;;;;;1917:11;1876:52;;1093:847:137;;;;;;;;;;;;;:::i;1055:34:135:-;;;;;;;;;;;;1088:1;1055:34;;30440:228:74;;;;;;;;;;-1:-1:-1;30440:228:74;;;;;:::i;:::-;;:::i;:::-;;;12283:14:139;;12276:22;12258:41;;12246:2;12231:18;30440:228:74;12118:187:139;26061:4058:74;;;;;;;;;;-1:-1:-1;26061:4058:74;;;;;:::i;:::-;;:::i;2503:658:137:-;;;;;;;;;;;;;:::i;4498:1034::-;;;;;;;;;;;;;:::i;18447:360:74:-;;;;;;;;;;-1:-1:-1;18447:360:74;;;;;:::i;:::-;;:::i;3193:186:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1595:52:135:-;;;;;;;;;;-1:-1:-1;1595:52:135;;;;-1:-1:-1;;;;;1595:52:135;;;1319:27;;;;;;;;;;-1:-1:-1;1319:27:135;;;;-1:-1:-1;;;;;1319:27:135;;;4229:53:74;;;;;;;;;;;;4278:4;4229:53;;5349:249:73;;;;;;;;;;-1:-1:-1;5349:249:73;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;17605:528:74:-;;;;;;;;;;-1:-1:-1;17605:528:74;;;;;:::i;:::-;;:::i;3167:606:137:-;;;;;;;;;;;;;:::i;30674:338:74:-;;;;;;;;;;-1:-1:-1;30674:338:74;;;;;:::i;:::-;;:::i;1386:26:135:-;;;;;;;;;;-1:-1:-1;1386:26:135;;;;-1:-1:-1;;;;;1386:26:135;;;1285:27;;;;;;;;;;-1:-1:-1;1285:27:135;;;;-1:-1:-1;;;;;1285:27:135;;;21518:1958:74;;;;;;;;;;-1:-1:-1;21518:1958:74;;;;;:::i;:::-;;:::i;3047:140:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1821:48:135:-;;;;;;;;;;;;1862:7;1821:48;;1418:45;;;;;;;;;;-1:-1:-1;1418:45:135;;;;-1:-1:-1;;;;;1418:45:135;;;3532:146:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6186:197:73:-;;;;;;;;;;-1:-1:-1;6186:197:73;;;;;:::i;:::-;;:::i;:::-;;;;21332:34:139;21393:15;;;21375:34;;21457:10;21445:23;;;21440:2;21425:18;;21418:51;21505:15;;21485:18;;;21478:43;;;;21310:2;21295:18;6186:197:73;21122:405:139;30125:187:74;;;;;;;;;;-1:-1:-1;30125:187:74;;;;;:::i;:::-;;:::i;1946:551:137:-;;;;;;;;;;;;;:::i;3779:713::-;;;;;;;;;;;;;:::i;24702:376:74:-;;;;;;:::i;:::-;;:::i;30318:116::-;;;;;;;;;;-1:-1:-1;30318:116:74;;;;;:::i;:::-;;:::i;2754:147:94:-;;;;;;;;;;;;;:::i;2459:141::-;;;;;;;;;;;;;:::i;20814:147:74:-;;;;;;;;;;-1:-1:-1;20814:147:74;;;;;:::i;:::-;;:::i;4472:52::-;;;;;;;;;;;;4523:1;4472:52;;5786:184:73;;;;;;;;;;-1:-1:-1;5786:184:73;;;;;:::i;:::-;;:::i;:::-;;;;23649:34:139;23637:47;;;23619:66;;23716:2;23701:18;;23694:34;;;;23592:18;5786:184:73;23445:289:139;1243:204:89;;;;;;;;;;;;;:::i;4104:56:74:-;;;;;;;;;;;;4147:13;4104:56;;1516:40:135;;;;;;;;;;-1:-1:-1;1516:40:135;;;;-1:-1:-1;;;;;1516:40:135;;;5621:10886:74;;;;;;;;;;-1:-1:-1;5621:10886:74;;;;;:::i;:::-;;:::i;1470:40:135:-;;;;;;;;;;-1:-1:-1;1470:40:135;;;;-1:-1:-1;;;;;1470:40:135;;;5120:100:74;;;;;;;;;;-1:-1:-1;5120:100:74;;;;;:::i;:::-;5185:16;:28;;;;;;;;;;;;;;;5120:100;2606:142:94;;;;;;;;;;;;;:::i;24121:575:74:-;;;;;;:::i;:::-;;:::i;1934:56:135:-;;;;;;;;;;;;1975:15;1934:56;;5604:176:73;;;;;;;;;;-1:-1:-1;5604:176:73;;;;;:::i;:::-;;:::i;:::-;;;;24910:34:139;24971:15;;;24953:34;;25023:15;;;;25018:2;25003:18;;24996:43;24873:18;5604:176:73;24726:319:139;1065:26:101;;;;;;;;;;-1:-1:-1;1065:26:101;;;;;;;;19989:464:74;;;;;;;;;;-1:-1:-1;19989:464:74;;;;;:::i;:::-;;:::i;5538:1107:137:-;5626:74;;;;;;;;;1048:1:135;5626:74:137;;5662:5;;-1:-1:-1;;5626:74:137;;;;;-1:-1:-1;;;;;5662:5:137;5626:74;;1862:7:135;5626:74:137;;;;;;;-1:-1:-1;5626:74:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5710:12;;5736:9;;5710:53;;;;;-1:-1:-1;;;;;5736:9:137;;;5710:53;;;25946:74:139;26036:18;;;26029:34;;;;5597:103:137;;-1:-1:-1;5710:12:137;;;;;;:17;;25919:18:139;;5710:53:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5773:9:137;;5796:5;;5773:46;;;;;-1:-1:-1;;;;;5796:5:137;;;5773:46;;;25946:74:139;1862:7:135;26036:18:139;;;26029:34;5773:9:137;;;-1:-1:-1;5773:14:137;;-1:-1:-1;25919:18:139;;5773:46:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5856:20:137;;5900:5;;5927:12;;5856:145;;;;;5830:23;;-1:-1:-1;;;;;;5856:20:137;;;;-1:-1:-1;5856:30:137;;:145;;5900:5;;;5856:20;5927:12;;;;1862:7:135;;5982:9:137;;5856:145;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6026:5;;6012:20;;;;;-1:-1:-1;;;;;6026:5:137;;;6012:20;;;836:74:139;5830:171:137;;-1:-1:-1;336:42:88;;6012:13:137;;809:18:139;;6012:20:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6042:9:137;;6068:20;;6042:64;;;;;-1:-1:-1;;;;;6068:20:137;;;6042:64;;;25946:74:139;1862:7:135;26036:18:139;;;26029:34;6042:9:137;;;-1:-1:-1;6042:17:137;;-1:-1:-1;25919:18:139;;6042:64:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6116:20:137;;6159:13;;6202:5;;6116:92;;;;;-1:-1:-1;;;;;6116:20:137;;;;:34;;6159:13;6116:92;;1862:7:135;;6191:9:137;;6202:5;;6116:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:42:88;-1:-1:-1;;;;;6218:12:137;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6243:69;6252:9;;;;;;;;;-1:-1:-1;;;;;6252:9:137;-1:-1:-1;;;;;6252:21:137;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6277:1;6243:69;;;;;;;;;;;;;;;;;:8;:69::i;:::-;6331:12;;6354:5;;6331:29;;;;;-1:-1:-1;;;;;6354:5:137;;;6331:29;;;836:74:139;6322:42:137;;6331:12;;;;;;;:22;;809:18:139;;6331:29:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6362:1;6322:8;:42::i;:::-;6383:12;;6406:5;;6383:29;;;;;-1:-1:-1;;;;;6406:5:137;;;6383:29;;;836:74:139;6374:42:137;;6383:12;;;;;:22;;809:18:139;;6383:29:137;690:226:139;6374:42:137;6458:12;;6427:45;;1048:1:135;;-1:-1:-1;;;;;6458:12:137;6427:13;:45::i;:::-;6491:12;;6514:5;;6491:29;;;;;-1:-1:-1;;;;;6514:5:137;;;6491:29;;;836:74:139;6482:55:137;;6491:12;;;;;:22;;809:18:139;;6491:29:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1862:7:135;6482:8:137;:55::i;:::-;6556:12;;6579:5;;6556:29;;;;;-1:-1:-1;;;;;6579:5:137;;;6556:29;;;836:74:139;6547:42:137;;6556:12;;;;;;;:22;;809:18:139;;6556:29:137;690:226:139;6547:42:137;6608:9;;6628:5;;6608:26;;;;;-1:-1:-1;;;;;6628:5:137;;;6608:26;;;836:74:139;6599:39:137;;6608:9;;;;;:19;;809:18:139;;6608:26:137;690:226:139;6599:39:137;5587:1058;;5538:1107::o;21149:174:74:-;21226:90;21240:7;21273:11;-1:-1:-1;;;;;21257:29:74;21249:38;;21289:1;21300:3;21306:9;;;;;;;;;;;;21226:13;:90::i;23482:633::-;23645:19;23678:9;:32;23688:21;:12;;:19;:21::i;:::-;23678:32;;;;;;;;;;;;;-1:-1:-1;23678:32:74;;;;-1:-1:-1;;;;;23678:32:74;;-1:-1:-1;;23754:36:74;23781:8;23754:26;:36::i;:::-;23721:69;;;;;23801:20;23824:74;;;;;;;;23831:21;:12;;:19;:21::i;:::-;23824:74;;;;;;23854:21;:12;;:19;:21::i;:::-;23824:74;;;;23877:20;:12;;:18;:20::i;:::-;23824:74;;;;23801:97;-1:-1:-1;;;;;;23908:18:74;;;:200;;;;;;;23801:97;23986:26;:12;;:24;:26::i;:::-;24026:19;:12;;:17;:19::i;:::-;24089:9;;;;;;;;-1:-1:-1;24089:9:74;;23908:200;;;;;;;;;;;;;;;24059:16;;23908:200;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23635:480;;;;23482:633;;;;:::o;981:106:137:-;1032:13;:11;:13::i;:::-;1063:5;;1055:25;;;;;-1:-1:-1;;;;;1063:5:137;;;1055:25;;;25946:74:139;1070:9:137;26036:18:139;;;26029:34;336:42:88;;1055:7:137;;25919:18:139;;1055:25:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;981:106::o;1653:104:135:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5226:166:74:-;5313:72;5329:12;5343;5371;5357:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5357:27:74;;5313:15;:72::i;2907:134:94:-;2954:33;3018:16;2999:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2999:35:94;;;;;;;;;;;;;;;;;;;;;;;2907:134;:::o;16845:490:74:-;16976:22;17032:8;17018:23;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17018:23:74;-1:-1:-1;17010:31:74;-1:-1:-1;17068:9:74;17051:234;17085:20;17097:8;17085:9;:20;:::i;:::-;17079:26;;:3;:26;;;17051:234;;;17193:14;;;17128:12;17193:14;;;:9;:14;;;;;;;;;17174:56;;-1:-1:-1;;;;;17193:14:74;;;17174:56;;;31388:34:139;;;;17218:4:74;31438:18:139;;;31431:43;17193:14:74;31490:18:139;;;31483:50;17143:88:74;;17155:17;;31300:18:139;;17174:56:74;;;;;;;;;;;;17143:11;:88::i;:::-;17128:103;-1:-1:-1;17128:103:74;17245:5;17251:15;17257:9;17251:3;:15;:::i;:::-;17245:22;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17245:29:74;;;:22;;;;;;;;;;;:29;-1:-1:-1;17107:5:74;;17051:234;;;;17312:16;17322:5;17312:9;:16::i;:::-;16845:490;;;;;:::o;3823:151:94:-;3872:42;3948:19;3926:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3926:41:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3823:151;:::o;25280:469:74:-;25524:18;;;25491:19;25524:18;;;:9;:18;;;;;;-1:-1:-1;;;;;25524:18:74;;25491:19;;25598:39;25628:8;25598:29;:39::i;:::-;25553:84;;;;;;25647:8;-1:-1:-1;;;;;25647:18:74;;25674:5;25686:3;25647:95;25692:5;25699:3;25704:5;25711;25718:12;;25732:9;;;;;;;;;;;;25647:95;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25481:268;;;;25280:469;;;;;;;:::o;3684:133:94:-;3730:33;3794:16;3775:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3775:35:94;;;;;;;;;;;;;;;;;;;;;;3684:133;:::o;3385:141::-;3433:35;3501:18;3480:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3480:39:94;;;;;;;;;;;;;;;;;;;;;;3385:141;:::o;5976:204:73:-;6068:12;6082:11;6095:13;6127:46;6165:7;;6127:37;:46::i;:::-;6120:53;;;;;;5976:204;;;;;:::o;1093:847:137:-;1201:74;;;;;;;;;1088:1:135;1201:74:137;;1237:5;;-1:-1:-1;;1201:74:137;;;;;-1:-1:-1;;;;;1237:5:137;1201:74;;1862:7:135;1201:74:137;;;;;;;-1:-1:-1;1201:74:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1285:12;;1311:5;;1285:49;;;;;-1:-1:-1;;;;;1311:5:137;;;1285:49;;;25946:74:139;26036:18;;;26029:34;;;;1172:103:137;;-1:-1:-1;1285:12:137;;;;;;:17;;25919:18:139;;1285:49:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1344:9:137;;1367:5;;1344:46;;;;;-1:-1:-1;;;;;1367:5:137;;;1344:46;;;25946:74:139;1862:7:135;26036:18:139;;;26029:34;1344:9:137;;;-1:-1:-1;1344:14:137;;-1:-1:-1;25919:18:139;;1344:46:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1415:5:137;;1401:20;;;;;-1:-1:-1;;;;;1415:5:137;;;1401:20;;;836:74:139;336:42:88;;-1:-1:-1;1401:13:137;;-1:-1:-1;809:18:139;;1401:20:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1431:12:137;;1460:20;;1431:67;;;;;-1:-1:-1;;;;;1460:20:137;;;1431:67;;;25946:74:139;1862:7:135;26036:18:139;;;26029:34;1431:12:137;;;;;;-1:-1:-1;1431:20:137;;-1:-1:-1;25919:18:139;;1431:67:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1508:9:137;;1534:20;;1508:64;;;;;-1:-1:-1;;;;;1534:20:137;;;1508:64;;;25946:74:139;1862:7:135;26036:18:139;;;26029:34;1508:9:137;;;:17;;25919:18:139;;1508:64:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1583:63:137;;;;;1599:46;1583:63;;;32820:98:139;336:42:88;;1583:15:137;;32793:18:139;;1583:63:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1656:20:137;;1735:5;;1656:85;;;;;-1:-1:-1;;;;;1656:20:137;;;;-1:-1:-1;1656:35:137;;-1:-1:-1;1656:20:137;;:85;;1862:7:135;;1724:9:137;;1735:5;;;;1656:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1752:63:137;;;;;1768:46;1752:63;;;32820:98:139;336:42:88;;-1:-1:-1;1752:15:137;;-1:-1:-1;32793:18:139;;;-1:-1:-1;1752:63:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1825:20:137;;1903:5;;1825:84;;;;;-1:-1:-1;;;;;1825:20:137;;;;-1:-1:-1;1825:34:137;;-1:-1:-1;1868:5:137;;1825:84;;1862:7:135;;1892:9:137;;1903:5;;;;1825:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:42:88;-1:-1:-1;;;;;1919:12:137;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1162:778;1093:847::o;30440:228:74:-;30592:21;;;30525:9;30592:21;;;:12;:21;;;;;;;:34;;;;;;;;30525:9;30643:14;30592:34;5464:12:132;;;;;5451:10;;;;;;:25;;;;5443:34;;5326:168;30643:14:74;:18;30636:25;;;30440:228;;;;;:::o;26061:4058::-;26164:13;26180:21;:12;;:19;:21::i;:::-;26244:17;;;26211:19;26244:17;;;:9;:17;;;;;;26164:37;;-1:-1:-1;;;;;;26244:17:74;;;;;26297:26;26324;:12;;:24;:26::i;:::-;26352:21;:12;;:19;:21::i;:::-;26297:77;;;;;;;;;;-1:-1:-1;;;;;33119:55:139;;;26297:77:74;;;33101:74:139;26297:77:74;33211:23:139;33191:18;;;33184:51;33074:18;;26297:77:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26272:102;;;26384:25;26412:21;:12;;:19;:21::i;:::-;26384:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26465:33:74;;;;;;;;26384:49;;-1:-1:-1;26384:49:74;;-1:-1:-1;;;;;26465:31:74;;;-1:-1:-1;26465:31:74;;-1:-1:-1;26465:33:74;;;;;-1:-1:-1;26465:33:74;;;;;;;:31;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26444:54;;;;26512:5;:10;;26521:1;26512:10;26508:3605;;26613:10;26576:20;-1:-1:-1;;;;;26660:16:74;;;26677:21;:12;;:19;:21::i;:::-;26700:26;:12;;:24;:26::i;:::-;26660:70;;;;;;;;;;;34762:15:139;;;;26660:70:74;;;34744:34:139;-1:-1:-1;;;;;34814:55:139;34794:18;;;34787:83;26728:1:74;34886:18:139;;;34879:43;34688:18;;26660:70:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26660:70:74;;;;;;;;;;;;:::i;:::-;26638:92;;26763:7;26788:6;26777:31;;;;;;;;;;;;:::i;:::-;:44;;;26822:1;26777:47;;;;;;;;:::i;:::-;;;;;;;26763:62;;26840:19;26872:22;:12;;:20;:22::i;:::-;26862:33;;;;;;;:::i;:::-;;;;;;;;26840:55;;26930:23;26967:27;27037:29;;;27084:12;27114:11;27143:3;26997:163;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26997:163:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;27207:16:74;;;27224:6;27240;26997:163;27265:22;:15;27283:4;27265:22;:::i;:::-;27207:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27192:96;;27319:10;27324:4;27319;:10::i;:::-;27388:21;;;27407:1;27388:21;;;;;;;;;27306:23;;-1:-1:-1;27357:28:74;;-1:-1:-1;27388:21:74;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27388:21:74;;;;;;;;;;;;;;;27357:52;;27435:89;;;;;;;;27448:6;27435:89;;;;;;27464:6;-1:-1:-1;;;;;27435:89:74;;;;;27473:14;27435:89;;;;27489:15;27507:4;27489:22;;;;:::i;:::-;27435:89;;;;27513:10;27435:89;;;27423:6;27430:1;27423:9;;;;;;;;:::i;:::-;;;;;;;;;;:101;27538:19;;;;;-1:-1:-1;;;;;27538:11:74;;;;;:19;;27550:6;;27538:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27607:21;27671:41;;;27730:12;27760:11;27631:154;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;27631:154:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;27832:16:74;;;27849:6;27865;27631:154;27884:22;:15;27902:4;27884:22;:::i;:::-;27832:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27817:90;;27938:10;27943:4;27938;:10::i;:::-;27925:23;;27799:164;27988:83;;;;;;;;28001:6;27988:83;;;;;;28017:6;-1:-1:-1;;;;;27988:83:74;;;;;28026:8;27988:83;;;;28036:15;28054:4;28036:22;;;;:::i;:::-;27988:83;;;;28060:10;27988:83;;;27976:6;27983:1;27976:9;;;;;;;;:::i;:::-;;;;;;;;;;:95;28085:19;;;;;-1:-1:-1;;;;;28085:11:74;;;;;:19;;28097:6;;28085:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26524:1591;;;;;;;;26508:3605;;;28125:5;:11;;28134:2;28125:11;28121:1992;;28193:10;28152:18;-1:-1:-1;;;;;28241:16:74;;;28258:21;:12;;:19;:21::i;:::-;28281:26;:12;;:24;:26::i;:::-;28241:70;;;;;;;;;;;34762:15:139;;;;28241:70:74;;;34744:34:139;-1:-1:-1;;;;;34814:55:139;34794:18;;;34787:83;28309:1:74;34886:18:139;;;34879:43;34688:18;;28241:70:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28241:70:74;;;;;;;;;;;;:::i;:::-;28219:92;;28355:7;28380:6;28369:35;;;;;;;;;;;;:::i;:::-;:48;;;28418:1;28369:51;;;;;;;;:::i;:::-;;;;;;;28355:66;;28436:19;28468:22;:12;;:20;:22::i;:::-;28458:33;;;;;;;:::i;:::-;;;;;;;;28436:55;;28505:27;28562:19;:12;;:17;:19::i;:::-;28583:16;28545:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28535:66;;;;;;28505:96;;28615:23;28671:27;28745;;;28794:12;28828:11;28861:19;28701:197;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;28701:197:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;28937:16:74;;;28954:6;28970;28701:197;28995:22;:15;29013:4;28995:22;:::i;:::-;28937:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28916:102;;29049:16;29054:10;29049:4;:16::i;:::-;29114:21;;;29133:1;29114:21;;;;;;;;;29036:29;;-1:-1:-1;29083:28:74;;29114:21;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29114:21:74;;;;;;;;;;;;;;;29083:52;;29165:89;;;;;;;;29178:6;29165:89;;;;;;29194:6;-1:-1:-1;;;;;29165:89:74;;;;;29203:14;29165:89;;;;29219:15;29237:4;29219:22;;;;:::i;:::-;29165:89;;;;29243:10;29165:89;;;29153:6;29160:1;29153:9;;;;;;;;:::i;:::-;;;;;;;;;;:101;29272:19;;;;;-1:-1:-1;;;;;29272:11:74;;;;;:19;;29284:6;;29272:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28653:653;;;29373:21;29441:39;;;29502:12;29536:11;29569:19;29397:209;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;29397:209:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;29645:16:74;;;29662:6;29678;29397:209;29697:22;:15;29715:4;29697:22;:::i;:::-;29645:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29624:96;;29751:16;29756:10;29751:4;:16::i;:::-;29816:21;;;29835:1;29816:21;;;;;;;;;29738:29;;-1:-1:-1;29785:28:74;;29816:21;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29816:21:74;;;;;;;;;;;;;;;29785:52;;29867:83;;;;;;;;29880:6;29867:83;;;;;;29896:6;-1:-1:-1;;;;;29867:83:74;;;;;29905:8;29867:83;;;;29915:15;29933:4;29915:22;;;;:::i;:::-;29867:83;;;;29939:10;29867:83;;;29855:6;29862:1;29855:9;;;;;;;;:::i;:::-;;;;;;;;;;:95;29968:19;;;;;-1:-1:-1;;;;;29968:11:74;;;;;:19;;29980:6;;29968:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29355:647;;;28138:1874;;;;;;28121:1992;;;30032:70;;;;;-1:-1:-1;;;;;30032:56:74;;;;;:70;;30089:12;;;;30032:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28121:1992;26154:3965;;;;;26061:4058;;;:::o;2503:658:137:-;2573:22;2598:18;1862:7:135;2615:1:137;2598:18;:::i;:::-;2695:74;;;;;;;;;1088:1:135;2695:74:137;;2731:5;;2573:43;;-1:-1:-1;;;2695:74:137;;;;-1:-1:-1;;;;;2731:5:137;2695:74;;;;;;;;;-1:-1:-1;2695:74:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2779:12;;2805:5;;2779:49;;;;;-1:-1:-1;;;;;2805:5:137;;;2779:49;;;25946:74:139;26036:18;;;26029:34;;;2666:103:137;;-1:-1:-1;2779:12:137;;;;;:17;;25919:18:139;;2779:49:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2853:5:137;;2839:20;;;;;-1:-1:-1;;;;;2853:5:137;;;2839:20;;;836:74:139;336:42:88;;-1:-1:-1;2839:13:137;;-1:-1:-1;809:18:139;;2839:20:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2869:12:137;;2898:20;;2869:67;;;;;-1:-1:-1;;;;;2898:20:137;;;2869:67;;;25946:74:139;26036:18;;;26029:34;;;2869:12:137;;;;;;-1:-1:-1;2869:20:137;;-1:-1:-1;25919:18:139;;2869:67:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2946:20:137;;3009:5;;2946:69;;;;;-1:-1:-1;;;;;2946:20:137;;;;:35;;:69;;2982:14;;2998:9;;3009:5;;2946:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:42:88;-1:-1:-1;;;;;3025:12:137;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3059:9:137;;3079:5;;3059:26;;;;;-1:-1:-1;;;;;3079:5:137;;;3059:26;;;836:74:139;3050:52:137;;-1:-1:-1;3059:9:137;;;-1:-1:-1;3059:19:137;;809:18:139;;3059:26:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3087:14;3050:8;:52::i;:::-;3121:12;;3144:5;;3121:29;;;;;-1:-1:-1;;;;;3144:5:137;;;3121:29;;;836:74:139;3112:42:137;;3121:12;;;;;;;:22;;809:18:139;;3121:29:137;690:226:139;4498:1034:137;4587:74;;;;;;;;;1128:1:135;4587:74:137;;4623:5;;-1:-1:-1;;4587:74:137;;;;;-1:-1:-1;;;;;4623:5:137;4587:74;;1862:7:135;4587:74:137;;;;;;;-1:-1:-1;4587:74:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4671:12;;4697:5;;4671:49;;;;;-1:-1:-1;;;;;4697:5:137;;;4671:49;;;25946:74:139;26036:18;;;26029:34;;;;4558:103:137;;-1:-1:-1;4671:12:137;;;;;;:17;;25919:18:139;;4671:49:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4757:20:137;;4801:5;;4828:12;;4757:145;;;;;4731:23;;-1:-1:-1;;;;;;4757:20:137;;;;-1:-1:-1;4757:30:137;;:145;;4801:5;;;4828:12;;1862:7:135;;4883:9:137;;4757:145;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4927:5;;4913:20;;;;;-1:-1:-1;;;;;4927:5:137;;;4913:20;;;836:74:139;4731:171:137;;-1:-1:-1;336:42:88;;4913:13:137;;809:18:139;;4913:20:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4943:12:137;;4972:20;;4943:67;;;;;-1:-1:-1;;;;;4972:20:137;;;4943:67;;;25946:74:139;1862:7:135;26036:18:139;;;26029:34;4943:12:137;;;;;;-1:-1:-1;4943:20:137;;-1:-1:-1;25919:18:139;;4943:67:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5020:20:137;;5064:13;;5107:5;;5020:93;;;;;-1:-1:-1;;;;;5020:20:137;;;;:35;;5064:13;5020:93;;1862:7:135;;5096:9:137;;5107:5;;5020:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:42:88;-1:-1:-1;;;;;5123:12:137;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5148:96;5157:12;;;;;;;;;-1:-1:-1;;;;;5157:12:137;-1:-1:-1;;;;;5157:24:137;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5185:12;;5216:9;;5185:42;;;;;-1:-1:-1;;;;;5216:9:137;;;5185:42;;;836:74:139;5185:12:137;;;;;;:22;;809:18:139;;5185:42:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1862:7:135;5148:8:137;:96::i;:::-;5263:9;;:23;;;;;;;;5254:49;;-1:-1:-1;;;;;5263:9:137;;:21;;:23;;;;;;;;;;;;;;:9;:23;;;;;;;;;;;;;;5254:49;5322:12;;5345:5;;5322:29;;;;;-1:-1:-1;;;;;5345:5:137;;;5322:29;;;836:74:139;5313:42:137;;5322:12;;;;;:22;;809:18:139;;5322:29:137;690:226:139;5313:42:137;5397:12;;5366:45;;1128:1:135;;-1:-1:-1;;;;;5397:12:137;5366:13;:45::i;:::-;5430:12;;5453:5;;5430:29;;;;;-1:-1:-1;;;;;5453:5:137;;;5430:29;;;836:74:139;5421:55:137;;5430:12;;;;;:22;;809:18:139;;5430:29:137;690:226:139;18447:360:74;18542:9;18537:264;18561:5;:12;18557:1;:16;18537:264;;;18594:29;18646:5;18652:1;18646:8;;;;;;;;:::i;:::-;;;;;;;18594:61;;18674:9;18669:122;18693:8;:15;18689:1;:19;18669:122;;;18733:9;-1:-1:-1;;;;;18733:24:74;;18758:8;18767:1;18758:11;;;;;;;;:::i;:::-;;;;;;;;;;;18733:43;;;;;;;;;;;43607:23:139;;;18733:43:74;;;43589:42:139;18771:4:74;43647:18:139;;;43640:50;43562:18;;18733:43:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18710:3:74;;;;;-1:-1:-1;18669:122:74;;-1:-1:-1;18669:122:74;;-1:-1:-1;;18575:3:74;;18537:264;;;;18447:360;;:::o;3193:186:94:-;3249:56;3346:26;3317:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5349:249:73;5464:16;5482:21;;5505:14;5538:53;5573:8;;5583:7;5538:34;:53::i;:::-;5531:60;;;;;;;;5349:249;;;;;;;:::o;17605:528:74:-;17680:12;;17665;17702:425;17726:4;17722:1;:8;17702:425;;;17751:22;17789:5;17795:1;17789:8;;;;;;;;:::i;:::-;;;;;;;17751:47;;17817:9;17812:305;17836:4;17832:1;:8;17812:305;;;17865:20;;;17877:8;17865:20;17903:23;17942:5;17948:1;17942:8;;;;;;;;:::i;:::-;;;;;;;17903:48;;17969:16;17989:10;-1:-1:-1;;;;;17989:19:74;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17988:27:74;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17969:48;;18035:9;-1:-1:-1;;;;;18035:17:74;;18053:9;18064:37;18089:10;-1:-1:-1;;;;;31116:23:74;;31018:129;18064:37;18035:67;;;;;;;;;;;44430:23:139;;;;18035:67:74;;;44412:42:139;44470:18;;;44463:34;44385:18;;18035:67:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17847:270;;17812:305;17842:3;;17812:305;;;-1:-1:-1;;17732:3:74;;17702:425;;3167:606:137;3251:74;;;;;;;;;1088:1:135;3251:74:137;;3287:5;;-1:-1:-1;;3251:74:137;;;;;-1:-1:-1;;;;;3287:5:137;3251:74;;1862:7:135;3251:74:137;;;;;;;-1:-1:-1;3251:74:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3335:12;;3361:9;;3335:53;;;;;-1:-1:-1;;;;;3361:9:137;;;3335:53;;;25946:74:139;26036:18;;;26029:34;;;;3222:103:137;;-1:-1:-1;3335:12:137;;;;;;:17;;25919:18:139;;3335:53:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3398:9:137;;3421:5;;3398:46;;;;;-1:-1:-1;;;;;3421:5:137;;;3398:46;;;25946:74:139;1862:7:135;26036:18:139;;;26029:34;3398:9:137;;;-1:-1:-1;3398:14:137;;-1:-1:-1;25919:18:139;;3398:46:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3469:5:137;;3455:20;;;;;-1:-1:-1;;;;;3469:5:137;;;3455:20;;;836:74:139;336:42:88;;-1:-1:-1;3455:13:137;;-1:-1:-1;809:18:139;;3455:20:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3485:9:137;;3511:20;;3485:64;;;;;-1:-1:-1;;;;;3511:20:137;;;3485:64;;;25946:74:139;1862:7:135;26036:18:139;;;26029:34;3485:9:137;;;-1:-1:-1;3485:17:137;;-1:-1:-1;25919:18:139;;3485:64:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3559:20:137;;3621:5;;3559:68;;;;;-1:-1:-1;;;;;3559:20:137;;;;:34;;:68;;1862:7:135;;3610:9:137;;3621:5;;3559:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:42:88;-1:-1:-1;;;;;3637:12:137;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3671:9:137;;3691:5;;3671:26;;;;;-1:-1:-1;;;;;3691:5:137;;;3671:26;;;836:74:139;3662:39:137;;-1:-1:-1;3671:9:137;;;-1:-1:-1;3671:19:137;;809:18:139;;3671:26:137;690:226:139;3662:39:137;3720:12;;3743:5;;3720:29;;;;;-1:-1:-1;;;;;3743:5:137;;;3720:29;;;836:74:139;3711:55:137;;3720:12;;;;;;;:22;;809:18:139;;3720:29:137;690:226:139;3711:55:137;3212:561;3167:606::o;30674:338:74:-;30845:21;;;30799:43;30845:21;;;:12;:21;;;;;;;:34;;;;;;;;30763:24;;30893:14;30845:34;5464:12:132;;;;;5451:10;;;;;;:25;;;;5443:34;;5326:168;30893:14:74;:18;30889:117;;;30927:12;30942;:5;:10;:12::i;:::-;30982:13;;;;:7;:13;;;;;30968:27;;30927;;-1:-1:-1;30982:13:74;30968:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30913:93;30889:117;30789:223;30674:338;;;;:::o;21518:1958::-;21722:18;;;21752:1;21722:18;;;:9;:18;;;;;;-1:-1:-1;;;;;21722:18:74;21714:72;;;;;;;44710:2:139;21714:72:74;;;44692:21:139;44749:2;44729:18;;;44722:30;44788:29;44768:18;;;44761:57;44835:18;;21714:72:74;;;;;;;;;21843:21;;;21797:43;21843:21;;;:12;:21;;;;;;;:34;;;;;;;;;21916:14;21843:34;5464:12:132;;;;;5451:10;;;;;;:25;;;;5443:34;;5326:168;21916:14:74;21887:43;;21940:23;21977:13;21994:1;21977:18;21973:201;;-1:-1:-1;5464:12:132;;;;;;5451:10;;;;;;:25;;;;5443:34;21973:201:74;;;22113:13;22092:18;:34;:71;;22145:18;22092:71;;;22129:13;22092:71;22074:89;;21973:201;22190:19;;22183:1287;;22225:17;;;;:::i;:::-;;;;22290:12;22305:15;:5;:13;:15::i;:::-;22334:24;22361:13;;;:7;:13;;;;;22334:40;;22290:30;;-1:-1:-1;22334:24:74;;:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22388:34:74;;;;;22334:40;;-1:-1:-1;22388:4:74;;:15;;-1:-1:-1;22388:34:74;;-1:-1:-1;22334:40:74;;-1:-1:-1;22417:4:74;;22388:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22436:50:74;;;;;:4;;-1:-1:-1;22436:19:74;;-1:-1:-1;22436:50:74;;22456:11;;22469:16;;22436:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22501:20:74;22524:19;;;:13;:19;;;;;22501:42;;:20;;-1:-1:-1;22524:19:74;22501:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22561:71;22583:7;363:1:13;22561:21:74;:71::i;:::-;22557:369;;;22653:14;22669:16;22689:39;22720:7;22689:30;:39::i;:::-;22828:28;;22652:76;;-1:-1:-1;22652:76:74;-1:-1:-1;22652:76:74;;22746:10;;-1:-1:-1;;;;;22828:7:74;;;22652:76;;22746:10;22828:28;22746:10;22828:28;22652:76;22828:7;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22812:44;;;22882:4;22874:37;;;;;;;45859:2:139;22874:37:74;;;45841:21:139;45898:2;45878:18;;;45871:30;45937:22;45917:18;;;45910:50;45977:18;;22874:37:74;45657:344:139;22874:37:74;22634:292;;;;22557:369;22943:69;22965:7;306:1:13;22943:21:74;:69::i;:::-;22939:144;;;23032:36;;;;;:4;;:14;;:36;;23047:11;;23060:7;;23032:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22939:144;23100:66;23122:7;533:1:13;23100:21:74;:66::i;:::-;23096:163;;;23186:58;;;;;:4;;:18;;:58;;23205:11;;23218:7;;23227:16;;23186:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23096:163;-1:-1:-1;;;;;23276:23:74;;;;;;:96;;;23303:69;23325:7;418:1:13;23303:21:74;:69::i;:::-;23272:188;;;23392:53;;;;;:4;;:14;;:53;;23407:11;;23420:7;;23429:4;;23435:9;;23392:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23272:188;22211:1259;;;22183:1287;;3047:140:94;3095:34;3162:18;3141:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3532:146;3580:40;3653:18;3632:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3632:39:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6186:197:73;6275:11;6288;6301:13;6333:43;6368:7;;6333:34;:43::i;30125:187:74:-;30211:18;30232;:11;;:16;:18::i;:::-;30211:39;;30282:4;30268:10;:18;30260:45;;;;;;;47325:2:139;30260:45:74;;;47307:21:139;47364:2;47344:18;;;47337:30;47403:16;47383:18;;;47376:44;47437:18;;30260:45:74;47123:338:139;1946:551:137;2031:74;;;;;;;;;1088:1:135;2031:74:137;;2067:5;;-1:-1:-1;;2031:74:137;;;;;-1:-1:-1;;;;;2067:5:137;2031:74;;1862:7:135;2031:74:137;;;;;;;-1:-1:-1;2031:74:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2115:12;;2141:5;;2115:49;;;;;-1:-1:-1;;;;;2141:5:137;;;2115:49;;;25946:74:139;26036:18;;;26029:34;;;;2002:103:137;;-1:-1:-1;2115:12:137;;;;;;:17;;25919:18:139;;2115:49:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2189:5:137;;2175:20;;;;;-1:-1:-1;;;;;2189:5:137;;;2175:20;;;836:74:139;336:42:88;;-1:-1:-1;2175:13:137;;-1:-1:-1;809:18:139;;2175:20:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2205:12:137;;2234:20;;2205:67;;;;;-1:-1:-1;;;;;2234:20:137;;;2205:67;;;25946:74:139;1862:7:135;26036:18:139;;;26029:34;2205:12:137;;;;;;-1:-1:-1;2205:20:137;;-1:-1:-1;25919:18:139;;2205:67:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2282:20:137;;2345:5;;2282:69;;;;;-1:-1:-1;;;;;2282:20:137;;;;:35;;:69;;1862:7:135;;2334:9:137;;2345:5;;2282:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:42:88;-1:-1:-1;;;;;2361:12:137;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2395:9:137;;2415:5;;2395:26;;;;;-1:-1:-1;;;;;2415:5:137;;;2395:26;;;836:74:139;2386:52:137;;-1:-1:-1;2395:9:137;;;-1:-1:-1;2395:19:137;;809:18:139;;2395:26:137;690:226:139;2386:52:137;2457:12;;2480:5;;2457:29;;;;;-1:-1:-1;;;;;2480:5:137;;;2457:29;;;836:74:139;2448:42:137;;2457:12;;;;;;;:22;;809:18:139;;2457:29:137;690:226:139;3779:713:137;3848:22;3873:18;1862:7:135;3890:1:137;3873:18;:::i;:::-;3970:74;;;;;;;;;1088:1:135;3970:74:137;;4006:5;;3848:43;;-1:-1:-1;;;3970:74:137;;;;-1:-1:-1;;;;;4006:5:137;3970:74;;;;;;;;;-1:-1:-1;3970:74:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4054:12;;4080:9;;4054:53;;;;;-1:-1:-1;;;;;4080:9:137;;;4054:53;;;25946:74:139;26036:18;;;26029:34;;;3941:103:137;;-1:-1:-1;4054:12:137;;;;;:17;;25919:18:139;;4054:53:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4117:9:137;;4140:5;;4117:46;;;;;-1:-1:-1;;;;;4140:5:137;;;4117:46;;;25946:74:139;26036:18;;;26029:34;;;4117:9:137;;;-1:-1:-1;4117:14:137;;-1:-1:-1;25919:18:139;;4117:46:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4188:5:137;;4174:20;;;;;-1:-1:-1;;;;;4188:5:137;;;4174:20;;;836:74:139;336:42:88;;-1:-1:-1;4174:13:137;;-1:-1:-1;809:18:139;;4174:20:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4204:9:137;;4230:20;;4204:64;;;;;-1:-1:-1;;;;;4230:20:137;;;4204:64;;;25946:74:139;26036:18;;;26029:34;;;4204:9:137;;;-1:-1:-1;4204:17:137;;-1:-1:-1;25919:18:139;;4204:64:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4278:20:137;;4340:5;;4278:68;;;;;-1:-1:-1;;;;;4278:20:137;;;;:34;;:68;;4313:14;;4329:9;;4340:5;;4278:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:42:88;-1:-1:-1;;;;;4356:12:137;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4390:9:137;;4410:5;;4390:26;;;;;-1:-1:-1;;;;;4410:5:137;;;4390:26;;;836:74:139;4381:39:137;;-1:-1:-1;4390:9:137;;;-1:-1:-1;4390:19:137;;809:18:139;;4390:26:137;690:226:139;4381:39:137;4439:12;;4462:5;;4439:29;;;;;-1:-1:-1;;;;;4462:5:137;;;4439:29;;;836:74:139;4430:55:137;;4439:12;;;;;;;:22;;809:18:139;;4439:29:137;690:226:139;24702:376:74;24872:4;:14;24900:21;:12;;:19;:21::i;:::-;24935:26;:12;;:24;:26::i;:::-;24975:8;24997:5;25016:9;25039:22;:12;;:20;:22::i;:::-;24872:199;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24702:376;;;;;:::o;30318:116::-;30418:8;30382:9;:25;30392:8;-1:-1:-1;;;;;30392:12:74;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30382:25;;;;;;;;;;;;;-1:-1:-1;30382:25:74;:45;;;;-1:-1:-1;;;;;30382:45:74;;;;;;;;;;-1:-1:-1;30318:116:74:o;2754:147:94:-;2803:40;2876:18;2855:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2855:39:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2459:141;2508:34;2575:18;2554:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20814:147:74;20891:63;20905:7;20914:11;20927:1;20938:3;20944:9;;;;;;;;;;;;20891:13;:63::i;5786:184:73:-;5865:14;5881:16;5916:47;5955:7;;5916:38;:47::i;:::-;5909:54;;;;5786:184;;;;;;:::o;1243:204:89:-;1302:7;;1282:4;;1302:7;;1298:143;;;-1:-1:-1;1332:7:89;;;;;1243:204::o;1298:143::-;1377:39;;;;;:7;:39;;;25946:74:139;;;1398:17:89;26036:18:139;;;26029:34;1428:1:89;;1377:7;;25919:18:139;;1377:39:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;1370:60;;1243:204;:::o;5621:10886:74:-;5824:12;5807:30;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5807:30:74;-1:-1:-1;5778:59:74;;;;:13;;:59;;;;;;:::i;:::-;;5884:12;5871:26;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5871:26:74;-1:-1:-1;5847:50:74;;;;:21;;:50;;;;;;:::i;:::-;;5946:12;5932:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5932:27:74;-1:-1:-1;5907:52:74;;;;:22;;:52;;;;;;:::i;:::-;;6011:12;5997:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5997:27:74;-1:-1:-1;5969:55:74;;;;:25;;:55;;;;;;:::i;:::-;;6073:12;6059:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6059:27:74;-1:-1:-1;6034:52:74;;;;:22;;:52;;;;;;:::i;:::-;-1:-1:-1;6120:16:74;;;6134:1;6120:16;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6096:40:74;;;;:21;;-1:-1:-1;6096:40:74;;;;:::i;:::-;-1:-1:-1;6173:10:74;;;;;6181:1;6173:10;;;4392:25:139;336:42:88;;6173:7:74;;4365:18:139;;6173:10:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6146:21;:24;;6168:1;;6146:24;;;;:::i;:::-;;;;;;;;;:37;;;;-1:-1:-1;;;;;6146:37:74;;;;;;;;;;;6240:552;6262:12;6258:16;;:1;:16;;;6240:552;;;6299:10;6312:5;:1;6316;6312:5;:::i;:::-;6299:18;;;;6335:19;6357:20;6378:1;6357:23;;;;;;;;;;:::i;:::-;;;;;;;6335:45;;6425:3;6398:13;:21;;6420:1;6398:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;6473:1;-1:-1:-1;;;;;6450:25:74;:11;-1:-1:-1;;;;;6450:25:74;;6446:267;;6546:3;6559:4;6531:34;;;;;:::i;:::-;49207:10:139;49195:23;;;49177:42;;-1:-1:-1;;;;;49255:55:139;49250:2;49235:18;;49228:83;49165:2;49150:18;6531:34:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6499:13:74;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;:66;;;;;-1:-1:-1;;;;;6499:66:74;;;;;-1:-1:-1;;;;;6499:66:74;;;;;;6446:267;;;6662:3;6675:4;6682:11;6644:50;;;;;:::i;:::-;49552:10:139;49540:23;;;49522:42;;-1:-1:-1;;;;;49661:15:139;;;49656:2;49641:18;;49634:43;49713:15;49708:2;49693:18;;49686:43;49510:2;49495:18;6644:50:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6612:13:74;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;:82;;;;;-1:-1:-1;;;;;6612:82:74;;;;;-1:-1:-1;;;;;6612:82:74;;;;;;6446:267;6730:47;6747:13;:26;;6774:1;6747:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6747:29:74;6730:16;:47::i;:::-;-1:-1:-1;;6276:3:74;;6240:552;;;;6918:4;6896:28;;;;;:::i;:::-;-1:-1:-1;;;;;854:55:139;;;836:74;;824:2;809:18;6896:28:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6870:23:74;:54;;;;-1:-1:-1;;;;;6870:54:74;;;;;;;;;;-1:-1:-1;6935:8866:74;6957:12;6953:16;;:1;:16;;;6935:8866;;;7010:26;6994:12;:42;;;;;;;;:::i;:::-;;6990:8801;;7056:20;7087:13;:26;;7114:1;7087:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7087:29:74;7056:61;;7199:4;7226:12;4147:13;4217:6;7155:185;;;;;:::i;:::-;-1:-1:-1;;;;;50255:15:139;;;50237:34;;50307:15;;;;50302:2;50287:18;;50280:43;50354:2;50339:18;;50332:34;50397:2;50382:18;;50375:34;50163:3;50148:19;7155:185:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7136:8:74;:204;;;;-1:-1:-1;;;;;7136:204:74;;;;;;;;;;7380:31;;7398:12;;7380:31;;;:::i;:::-;-1:-1:-1;;;;;854:55:139;;;836:74;;824:2;809:18;7380:31:74;;;;;;;;;;;;;;;;;;;;;;;7358:8;:19;;;:53;;;;;-1:-1:-1;;;;;7358:53:74;;;;;-1:-1:-1;;;;;7358:53:74;;;;;;7493:4;7520:12;4147:13;4217:6;7448:186;;;;;:::i;:::-;-1:-1:-1;;;;;50255:15:139;;;50237:34;;50307:15;;;;50302:2;50287:18;;50280:43;50354:2;50339:18;;50332:34;50397:2;50382:18;;50375:34;50163:3;50148:19;7448:186:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7429:16:74;:205;;;;-1:-1:-1;;;;;7429:205:74;;;;;;;;;;7652:13;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;7706:8;:16;7652:72;;;;;-1:-1:-1;;;;;7706:16:74;;;7652:72;;;836:74:139;7652:29:74;;;:45;;809:18:139;;7652:72:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7742:13;:26;;7769:1;7742:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;7796:19;;7742:75;;;;;-1:-1:-1;;;;;7796:19:74;;;7742:75;;;836:74:139;7742:29:74;;;:45;;809:18:139;;7742:75:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7835:13;:26;;7862:1;7835:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;7889:16;;7835:72;;;;;-1:-1:-1;;;;;7889:16:74;;;7835:72;;;836:74:139;7835:29:74;;;:45;;809:18:139;;7835:72:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7961:8:74;:16;7925:22;:25;;-1:-1:-1;;;;;7961:16:74;;;;-1:-1:-1;7925:22:74;-1:-1:-1;7925:25:74;;;;;;;;;;:::i;:::-;;;;;;;;;;:53;;;;-1:-1:-1;;;;;7925:53:74;;;;;;8035:19;;7996:25;:28;;8035:19;;;;;7996:25;:28;;;;;;;;;;:::i;:::-;;;;;;;;;;:59;;;;-1:-1:-1;;;;;7996:59:74;;;;;;8109:16;;8073:22;:25;;8109:16;;;;;8073:22;:25;;;;;;;;;;:::i;:::-;;;;;;;;;:53;;-1:-1:-1;;;;;8073:53:74;;;;;;;;;;;;;;;8193:16;;;-1:-1:-1;8193:16:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8193:16:74;8167:42;;8251:4;8231:6;8238:1;8231:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8231:25:74;;;;:9;;;;;;;;;;:25;8310:16;;;8324:1;8310:16;;;;;;;;;8279:28;;8310:16;;8324:1;8310:16;;;;;;;-1:-1:-1;;8373:8:74;:16;8348:14;;;;-1:-1:-1;;;;;;8373:16:74;;8348:14;;-1:-1:-1;8373:16:74;;8348:14;;;;:::i;:::-;-1:-1:-1;;;;;8348:42:74;;;:14;;;;;;;;;:42;8437:19;;8412:14;;8437:19;;;8412:11;;8437:19;;8412:14;;;;;;:::i;:::-;-1:-1:-1;;;;;8412:45:74;;;:14;;;;;;;;;:45;8504:16;;8479:14;;8504:16;;;8479:11;;8504:16;;8479:14;;;;;;:::i;:::-;-1:-1:-1;;;;;8479:42:74;;;:14;;;;;;;;;:42;8723:23;;8564:276;;8602:12;;8648:3;;8678:11;;8723:23;;;8781:4;;8812:6;;8564:276;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8544:17:74;:296;;;;-1:-1:-1;;;;;8544:296:74;;;;;;;;;;8905:21;:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;8886:44;;;;;:::i;:::-;4223:10:139;4211:23;;;4193:42;;4181:2;4166:18;8886:44:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8863:20:74;:67;;;;-1:-1:-1;;;;;8863:67:74;;;;;;;;;8952:17;;:64;;;;;;;;836:74:139;;;;8952:17:74;;;;:33;;809:18:139;;8952:64:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9087:13;:21;;9109:1;9087:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;9137:5;:1;9141;9137:5;:::i;:::-;9213:23;;9054:311;;9168:11;;-1:-1:-1;;;;;9213:23:74;;9263:21;;9213:23;;9337:6;;9054:311;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9039:12:74;:326;;;;-1:-1:-1;;;;;9039:326:74;;;;;;;;;;9419:21;:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;9445:4;9405:45;;;;;:::i;:::-;44442:10:139;44430:23;;;44412:42;;44485:2;44470:18;;44463:34;44400:2;44385:18;9405:45:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9387:15:74;:63;;;;-1:-1:-1;;;;;9387:63:74;;;;;;;;;9472:96;;;;;4343:4;9472:96;;;53370:34:139;;;53420:18;;;53413:43;4461:5:74;53472:18:139;;;53465:47;9472:26:74;;53292:18:139;;9472:96:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9590:12:74;;9627:15;;9590:54;;;;;-1:-1:-1;;;;;9627:15:74;;;9590:12;:54;;836:74:139;9590:12:74;;;-1:-1:-1;9590:28:74;;-1:-1:-1;809:18:139;;9590:54:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8145:1518;;9681:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;9681:32:74;9798:16;:12;9813:1;9798:16;:::i;:::-;9767:48;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9767:48:74;;;;;;;;;;;;;;-1:-1:-1;9731:84:74;;9890:16;:12;9905:1;9890:16;:::i;:::-;9864:43;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9864:43:74;;;;;;;;;;;;;;-1:-1:-1;9833:28:74;;;:74;10004:16;:12;10019:1;10004:16;:::i;:::-;9962:59;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;9962:59:74;;;;;;;;;;;;;;;-1:-1:-1;9925:34:74;;;;:96;;;;10071:16;;10085:1;10071:16;;;;;;;;;10040:28;;10071:16;;;;;;;;;-1:-1:-1;;10137:16:74;;;10105:29;10137:16;;;;;;;;;10196:12;;10171:14;;10040:47;;-1:-1:-1;10137:16:74;;-1:-1:-1;;;;;10196:12:74;;;;-1:-1:-1;10040:47:74;;10105:29;10171:14;;;;:::i;:::-;;;;;;:38;-1:-1:-1;;;;;10171:38:74;;;-1:-1:-1;;;;;10171:38:74;;;;;10233:7;10228:2850;10250:12;10246:16;;:1;:16;;;10228:2850;;;10300:1;10295:6;;:1;:6;;;10291:20;10303:8;10291:20;10333:13;10349:5;:1;10353;10349:5;:::i;:::-;10423:33;;;10454:1;10423:33;;;;;;;;;10333:21;;;;;;-1:-1:-1;10377:43:74;;10423:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10377:79;;10478:26;10507:265;;;;;;;;10542:3;10507:265;;;;;;10577:11;:18;10507:265;;;;;;10628:12;:19;10507:265;;;;;;10674:1;10507:265;;;;;;10701:11;10507:265;;;;10738:12;10507:265;;;10478:294;;10836:43;;;;;;;;10861:6;10836:43;;;;;;10869:9;10836:43;;;10821:9;10831:1;10821:12;;;;;;;;:::i;:::-;;;;;;;;;;:58;10905:8;:16;:48;;;;;-1:-1:-1;;;;;10905:16:74;;;;:37;;:48;;10943:9;;10905:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10979:19:74;;:51;;;;;-1:-1:-1;;;;;10979:19:74;;;;-1:-1:-1;10979:40:74;;-1:-1:-1;10979:51:74;;11020:9;;10979:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11101:49:74;;-1:-1:-1;11189:1:74;;-1:-1:-1;11153:38:74;;-1:-1:-1;11153:38:74;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;11252:49:74;;;;;;;;11267:5;11252:49;;11282:17;;-1:-1:-1;;;;;11282:17:74;11252:49;;;;;;;;11343;;;;;;;;11252;11343;;;;;;;;;11327:13;;11101:90;;-1:-1:-1;11252:49:74;11101:90;;11217:32;;11327:13;;;;:::i;:::-;;;;;;;;;;:65;11418:8;:16;:54;;;;;-1:-1:-1;;;;;11418:16:74;;;;:42;;:54;;11461:10;;11418:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11595:329:74;;;;;;;;;;;;;11704:4;11595:329;;;;;;;;;;;;;11797:5;11595:329;;;;11844:4;11595:329;;;;11885:16;;11595:329;11885:16;11595:329;;;;11556:33;;:36;;11595:329;;-1:-1:-1;11556:33:74;-1:-1:-1;11556:36:74;;;;-1:-1:-1;11556:36:74;;;-1:-1:-1;11556:36:74;;;;:::i;:::-;;;;;;:368;;;;12015:210;;;;;;;;12069:6;12015:210;;;;;;12106:4;12015:210;;;;;;12151:5;12015:210;;;;;;12198:4;12015:210;;;;;11981:12;:28;;;12010:1;11981:31;;;;;;;;;;:::i;:::-;;;;;;:244;;;;12330:175;;;;;;;;12403:6;12330:175;;;;;;4523:1;12330:175;;;12290:12;:34;;;12325:1;12290:37;;;;;;;;;;:::i;:::-;;;;;;:215;;;;12528:19;12550:13;:23;;;;;;;;;;-1:-1:-1;;;;;12550:23:74;-1:-1:-1;;;;;12550:48:74;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12672:40;;;12710:1;12672:40;;;;;;;;;12528:72;;-1:-1:-1;12622:47:74;;12672:40;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12672:40:74;;;;;;;;;;;;;;;;12622:90;;12746:159;;;;;;;;12803:6;12746:159;;;;;;12835:48;;;;;;;;12865:11;12861:1;:15;;;;:::i;:::-;12835:48;;;;12878:1;12835:48;;;;;;;;;;;12746:159;;12734:9;;:6;;-1:-1:-1;;12734:9:74;;;;:::i;:::-;;;;;;;;;;:171;12927:23;;:40;;;;;-1:-1:-1;;;;;12927:23:74;;;;:32;;:40;;12960:6;;12927:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12989:23:74;;:70;;;;;4278:4;12989:70;;;6989:66:139;-1:-1:-1;;;;;12989:23:74;;;;-1:-1:-1;12989:46:74;;-1:-1:-1;6962:18:139;;12989:70:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10269:2809;;;;;10228:2850;10264:3;;10228:2850;;;-1:-1:-1;13234:37:74;;;13269:1;13234:37;;;;;;;;;13180:51;;13234:37;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;13334:320:74;;;;;;;;13385:17;;-1:-1:-1;;;;;13385:17:74;13334:320;;13439:18;;13334:320;;;;;;;;;;;;13494:19;;13334:320;;;;;;;-1:-1:-1;13334:320:74;;;;;;;;;;;;;;;;;;13699:63;;;;;;;;4574:5;13699:63;;;;;;;;13680:16;;;;-1:-1:-1;13334:320:74;;13680:16;;-1:-1:-1;13680:16:74;;;;:::i;:::-;;;;;;;;;;:82;13788:16;;:56;;;;;-1:-1:-1;;;;;13788:16:74;;;;:41;;:56;;13830:13;;13788:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13154:713;;13965:375;;;;;;;;14028:13;:21;;14050:1;14028:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;13965:375;;14100:4;13965:375;;;;;;;;;;14201:5;13965:375;;;;14252:4;13965:375;;;;14297:16;;13965:375;14297:16;13965:375;;;;;13915:33;;:47;;;;;;;;;;;;:::i;:::-;;;;;;:425;;;;14412:248;;;;;;;;14470:13;:21;;14492:1;14470:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;14412:248;;14529:4;14412:248;;;;14578:5;14412:248;;;;14629:4;14412:248;;;;;;;;14367:28;;;:42;;;;;;;;;;;;:::i;:::-;;;;;;:293;;;;14738:205;;;;;;;;14815:13;:21;;14837:1;14815:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;14738:205;;4523:1;14738:205;;;14687:34;;;;:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:256;15002:17;;15033:33;;15002:65;;;;;-1:-1:-1;;;;;15002:17:74;;;;:30;;:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15085:12:74;;15111:28;;;;15085:55;;;;;-1:-1:-1;;;;;15085:12:74;;;;-1:-1:-1;15085:25:74;;-1:-1:-1;15085:55:74;;:12;:55;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15158:15:74;;15195:34;;;;;15158:72;;;;;-1:-1:-1;;;;;15158:15:74;;;;-1:-1:-1;15158:36:74;;-1:-1:-1;15158:72:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7038:8207;;;;6990:8801;;;15271:28;15255:12;:44;;;;;;;;:::i;:::-;;15251:540;;15319:31;15407:4;15442:13;:26;;15469:1;15442:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;15353:137;;-1:-1:-1;;;;;15442:29:74;;;;15353:137;;;:::i;:::-;-1:-1:-1;;;;;64461:15:139;;;64443:34;;64513:15;;64508:2;64493:18;;64486:43;64370:2;64355:18;15353:137:74;;;;;;;;;;;;;;;;;;;;;;;15319:171;;15508:13;:26;;15535:1;15508:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;:66;;;;;-1:-1:-1;;;;;854:55:139;;;15508:66:74;;;836:74:139;15508:29:74;;;;:45;;809:18:139;;15508:66:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15628:10;15592:13;:22;;15615:1;15592:25;;;;;;;;;;:::i;:::-;;;;;;;;;:47;;;;;-1:-1:-1;;;;;15592:47:74;;;;;-1:-1:-1;;;;;15592:47:74;;;;;;15696:10;15657:13;:25;;15683:1;15657:28;;;;;;;;;;:::i;:::-;;;;;;;;;:50;;;;;-1:-1:-1;;;;;15657:50:74;;;;;-1:-1:-1;;;;;15657:50:74;;;;;;15301:421;15251:540;;;15746:30;;;;;64742:2:139;15746:30:74;;;64724:21:139;64781:2;64761:18;;;64754:30;64820:22;64800:18;;;64793:50;64860:18;;15746:30:74;64540:344:139;15251:540:74;6971:3;;6935:8866;;;;15837:7;15832:669;15854:12;15850:16;;:1;:16;;;15832:669;;;15887:19;15909:13;:26;;15936:1;15909:29;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;15909:29:74;;-1:-1:-1;15956:12:74;:42;;;;;;;;:::i;:::-;;15952:259;;16018:8;-1:-1:-1;;;;;16018:30:74;;4574:5;16069:13;:22;;16092:1;16069:25;;;;;;;;;;:::i;:::-;;;;;;;;;;;16018:77;;;;;;;;;;49207:10:139;49195:23;;;16018:77:74;;;49177:42:139;-1:-1:-1;;;;;16069:25:74;49235:18:139;;;49228:83;49150:18;;16018:77:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16113:8;-1:-1:-1;;;;;16113:33:74;;4574:5;16167:13;:22;;16190:1;16167:25;;;;;;;;;;:::i;:::-;;;;;;;;;;16113:83;;;;;;;;;;65127:10:139;65115:23;;;16113:83:74;;;65097:42:139;-1:-1:-1;;;;;16167:25:74;65155:18:139;;;65148:83;65247:18;;;65240:34;65070:18;;16113:83:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15952:259;16229:7;16224:267;16246:12;16242:16;;:1;:16;;;16224:267;;;16292:1;16287:6;;:1;:6;;;16283:20;16295:8;16283:20;-1:-1:-1;;;;;16321:30:74;;;16352:5;:1;16356;16352:5;:::i;:::-;16359:22;:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;16321:64;;;;;;;;;;65486:4:139;65474:17;;;16321:64:74;;;65456:36:139;-1:-1:-1;;;;;16359:25:74;65508:18:139;;;65501:83;65429:18;;16321:64:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16403:8;-1:-1:-1;;;;;16403:33:74;;16437:1;16441;16437:5;;;;:::i;:::-;16444:25;:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16403:73;;;;;;;;;;65832:4:139;65820:17;;;16403:73:74;;;65802:36:139;-1:-1:-1;;;;;16444:28:74;65854:18:139;;;65847:83;65946:18;;;65939:34;65775:18;;16403:73:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16224:267;16260:3;;16224:267;;;-1:-1:-1;;15868:3:74;;15832:669;;2606:142:94;2655:35;2723:18;2702:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2702:39:94;;;;;;;;;;;;;;;;;;;;;;2606:142;:::o;24121:575:74:-;24219:19;24252:9;:32;24262:21;:12;;:19;:21::i;:::-;24252:32;;;;;;;;;;;;;-1:-1:-1;24252:32:74;;;;-1:-1:-1;;;;;24252:32:74;;-1:-1:-1;;24326:39:74;24356:8;24326:29;:39::i;:::-;24295:70;;;;24376:20;24399:74;;;;;;;;24406:21;:12;;:19;:21::i;:::-;24399:74;;;;;;24429:21;:12;;:19;:21::i;:::-;24399:74;;;;24452:20;:12;;:18;:20::i;:::-;24399:74;;;;24376:97;-1:-1:-1;;;;;;24483:18:74;;;24522:3;24510:5;24376:97;24561:26;:12;;:24;:26::i;:::-;24601:19;:12;;:17;:19::i;:::-;24634:22;:12;;:20;:22::i;:::-;24670:9;;;;;;;;;;;;24483:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24209:487;;;;24121:575;;;:::o;5604:176:73:-;5682:11;5695:13;5727:46;5765:7;;5727:37;:46::i;19989:464:74:-;20084:13;20100:21;:12;;:19;:21::i;:::-;20084:37;;20131:18;20152:23;:12;;:21;:23::i;:::-;20231:20;;;20185:43;20231:20;;;:12;:20;;;;;;;:32;;;;;;;;20131:44;;-1:-1:-1;20318:19:74;:12;;:17;:19::i;:::-;20303:34;-1:-1:-1;20347:21:74;:5;20303:34;20347:15;:21::i;:::-;20378:13;;;;:7;:13;;;;;:28;20394:12;;20378:13;:28;:::i;:::-;-1:-1:-1;20416:19:74;;;;:13;:19;;;;;:30;20438:8;;20416:19;:30;:::i;2386:134:89:-;2484:29;;;;;:11;;;;:29;;2496:4;;2502:5;;2509:3;;2484:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2386:134;;;:::o;2270:110::-;2349:24;;;;;;;;69349:25:139;;;69390:18;;;69383:34;;;2349:11:89;;;;69322:18:139;;2349:24:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2270:110;;:::o;2671:150:50:-;2734:6;2773:39;706:2;655;2773:7;;:39;:::i;:::-;2766:47;;;:::i;:::-;2759:55;;;2671:150;-1:-1:-1;;;2671:150:50:o;2148:414:73:-;2244:11;2257;2270:13;2296:10;2308:19;2331:110;2375:8;533:1:13;2331:30:73;:110::i;:::-;2295:146;;;;2459:5;2451:56;;;;;;;70340:2:139;2451:56:73;;;70322:21:139;70379:2;70359:18;;;70352:30;70418:34;70398:18;;;70391:62;70489:8;70469:18;;;70462:36;70515:19;;2451:56:73;70138:402:139;2451:56:73;2524:31;;;;;:4;;:23;;:31;;2548:6;;2524:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2517:38;;;;;;;;2148:414;;;;;:::o;2230:148:50:-;2293:6;2332:37;605:2;557:1;2332:7;;:37;:::i;2384:142::-;2447:7;2481:37;655:2;605;2481:7;;:37;:::i;:::-;2473:46;;;:::i;2078:146::-;2140:6;2179:36;557:1;493;2179:7;;:36;:::i;:::-;2172:44;;;:::i;:::-;2165:52;;;2078:146;-1:-1:-1;;;2078:146:50:o;2976:130::-;3044:7;3070:29;:17;3079:7;;3070:8;:17::i;:::-;1210:15:42;1084:151;3112:138:50;3173:7;3207:35;862:3;785:2;3207:7;;:35;:::i;1997:3163:135:-;2048:13;:11;:13::i;:::-;2086:11;;2071:55;;2086:11;;;2071:14;:55::i;:::-;1088:1;2159:18;;:9;:18;;;;2137:11;:41;;;;-1:-1:-1;;;;;2159:18:135;;;2137:41;;;;;2159:18;2311:79;2384:4;;2311:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2296:12:135;:94;;;;;-1:-1:-1;;;;;2296:94:135;;;;;;;-1:-1:-1;;2459:18:135;:9;:18;;;;;2415:79;2459:18;;;2488:4;;2415:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2400:12:135;:94;;;;-1:-1:-1;;;;;2400:94:135;;;;;;1128:1;-1:-1:-1;2563:18:135;:9;:18;;;;;2519:79;2563:18;;;2592:4;;2519:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2504:12:135;:94;;;;-1:-1:-1;;;;;2504:94:135;;;;;;;;;;2688:11;;-1:-1:-1;;2688:11:135;;2674:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2674:26:135;-1:-1:-1;2733:12:135;;2710;;2645:55;;-1:-1:-1;;;;;;2733:12:135;;2645:55;;2733:12;;2710;;;;:::i;:::-;-1:-1:-1;;;;;2710:36:135;;;:12;;;;;;;;;:36;2779:12;;2756;;2779;;;;;;;;2756:9;;2779:12;;2756;;;;;;:::i;:::-;-1:-1:-1;;;;;2756:36:135;;;:12;;;;;;;;;:36;2825:12;;2802;;2825;;;2802:9;;2812:1;;2802:12;;;;;;:::i;:::-;-1:-1:-1;;;;;2802:36:135;;;:12;;;;;;;;;;;:36;2848:25;;;;;:4;;:14;;:25;;2863:9;;2848:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3029:12;;;;;;;;;-1:-1:-1;;;;;3029:12:135;2983:60;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2971:9:135;:72;;;;-1:-1:-1;;;;;2971:72:135;;;;;;;;;1088:1;-1:-1:-1;3115:18:135;:9;:18;;;;;3068:82;2971:72;;3115:18;;3144:4;;3068:82;;;:::i;:::-;-1:-1:-1;;;;;75483:15:139;;;75465:34;;75535:15;;;75530:2;75515:18;;75508:43;75587:15;;;75582:2;75567:18;;75560:43;75392:2;75377:18;3068:82:135;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3053:12:135;:97;;;;-1:-1:-1;;;;;3053:97:135;;;;;;;;;3213:9;;3233:12;;3183:87;;3213:9;;;;3053:97;3233:12;;;;;3053:97;3183:87;;;:::i;:::-;-1:-1:-1;;;;;75483:15:139;;;75465:34;;75535:15;;;75530:2;75515:18;;75508:43;75587:15;;;75582:2;75567:18;;75560:43;75392:2;75377:18;3183:87:135;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3160:20:135;:110;;;;-1:-1:-1;;;;;3160:110:135;;;;;;-1:-1:-1;;3426:18:135;:9;:18;;;;;3382:79;3426:18;;;3455:4;;3382:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3367:12:135;:94;;;;-1:-1:-1;;;;;3367:94:135;;;;;;1128:1;-1:-1:-1;3530:18:135;:9;:18;;;;;3486:79;3530:18;;;3559:4;;3486:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3471:12:135;:94;;;;-1:-1:-1;;;;;3471:94:135;;;;;;;;;;3619:11;;-1:-1:-1;;3619:11:135;;3605:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3605:26:135;-1:-1:-1;3664:12:135;;3641;;3576:55;;-1:-1:-1;;;;;;3664:12:135;;3576:55;;3664:12;;3641;;;;:::i;:::-;-1:-1:-1;;;;;3641:36:135;;;:12;;;;;;;;;:36;3710:12;;3687;;3710;;;3687:9;;3710:12;;3687;;;;;;:::i;:::-;-1:-1:-1;;;;;3687:36:135;;;:12;;;;;;;;;:36;3756:12;;3733;;3756;;;3733:9;;3743:1;;3733:12;;;;;;:::i;:::-;-1:-1:-1;;;;;3733:36:135;;;:12;;;;;;;;;;;:36;3779:25;;;;;:4;;:14;;:25;;3794:9;;3779:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3832:12:135;;3815:48;;;;;;3832:12;;;;-1:-1:-1;;;;;3832:12:135;3815:48;;;77598:74:139;77688:18;;;77681:30;77747:2;77727:18;;;77720:30;77786:15;77766:18;;;77759:43;336:42:88;;-1:-1:-1;3815:8:135;;-1:-1:-1;77819:19:139;;3815:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3890:12:135;;3873:48;;;;;;-1:-1:-1;;;;;3890:12:135;;;3873:48;;;78061:74:139;78151:18;;;78144:30;78210:2;78190:18;;;78183:30;78249:15;78229:18;;;78222:43;336:42:88;;-1:-1:-1;3873:8:135;;-1:-1:-1;78282:19:139;;3873:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3948:12:135;;3931:48;;;;;;-1:-1:-1;;;;;3948:12:135;;;3931:48;;;78524:74:139;78614:18;;;78607:30;78673:2;78653:18;;;78646:30;78712:15;78692:18;;;78685:43;336:42:88;;-1:-1:-1;3931:8:135;;-1:-1:-1;78745:19:139;;3931:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4007:12:135;;3990:55;;;;;;-1:-1:-1;;;;;4007:12:135;;;3990:55;;;78987:74:139;79077:18;;;79070:30;79136:2;79116:18;;;79109:30;79175:22;79155:18;;;79148:50;336:42:88;;-1:-1:-1;3990:8:135;;-1:-1:-1;79215:19:139;;3990:55:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4072:12:135;;4055:48;;;;;;-1:-1:-1;;;;;4072:12:135;;;4055:48;;;79457:74:139;79547:18;;;79540:30;79606:2;79586:18;;;79579:30;79645:15;79625:18;;;79618:43;336:42:88;;-1:-1:-1;4055:8:135;;-1:-1:-1;79678:19:139;;4055:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4130:12:135;;4113:48;;;;;;-1:-1:-1;;;;;4130:12:135;;;4113:48;;;79920:74:139;80010:18;;;80003:30;80069:2;80049:18;;;80042:30;80108:15;80088:18;;;80081:43;336:42:88;;-1:-1:-1;4113:8:135;;-1:-1:-1;80141:19:139;;4113:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4189:9:135;;4172:42;;;;;;-1:-1:-1;;;;;4189:9:135;;;4172:42;;;80383:74:139;80473:18;;;80466:30;80532:2;80512:18;;;80505:30;80571:12;80551:18;;;80544:40;336:42:88;;-1:-1:-1;4172:8:135;;-1:-1:-1;80601:19:139;;4172:42:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4241:20:135;;4224:65;;;;;;-1:-1:-1;;;;;4241:20:135;;;4224:65;;;80843:74:139;80933:18;;;80926:30;80992:2;80972:18;;;80965:30;81031:24;81011:18;;;81004:52;336:42:88;;-1:-1:-1;4224:8:135;;-1:-1:-1;81073:19:139;;4224:65:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4305:11:135;;4300:34;;-1:-1:-1;;;;;;4305:11:135;;-1:-1:-1;1806:9:135;4300:4;:34::i;:::-;4349:11;;4344:34;;-1:-1:-1;;;;;4349:11:135;1806:9;4344:4;:34::i;:::-;4436:28;;;4462:1;4436:28;;;;;;;;;4389:44;;4436:28;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;4436:28:135;;;;;;;;;;;;;;;4389:75;;4495:82;;;;;;;;1128:1;4495:82;;;;;;4540:1;4495:82;;;;;;4552:22;4495:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4474:15;4490:1;4474:18;;;;;;;;:::i;:::-;;;;;;:103;;;;4608:82;;;;;;;;1088:1;4608:82;;;;;;4653:1;4608:82;;;;;;4665:22;4608:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4587:15;4603:1;4587:18;;;;;;;;:::i;:::-;;;;;;:103;;;;4721:82;;;;;;;;1048:1;4721:82;;;;;;4766:1;4721:82;;;;;;4778:22;4721:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4700:15;4716:1;4700:18;;;;;;;;:::i;:::-;;;;;;;;;;:103;4814:12;;:48;;;;;:12;;;;-1:-1:-1;;;;;4814:12:135;;:31;;:48;;4846:15;;4814:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4872:12:135;;:48;;;;;-1:-1:-1;;;;;4872:12:135;;;;-1:-1:-1;4872:31:135;;-1:-1:-1;4872:48:135;;4904:15;;4872:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4930:12:135;;:48;;;;;-1:-1:-1;;;;;4930:12:135;;;;-1:-1:-1;4930:31:135;;-1:-1:-1;4930:48:135;;4962:15;;4930:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4989:12:135;;:48;;;;;-1:-1:-1;;;;;4989:12:135;;;;-1:-1:-1;4989:31:135;;-1:-1:-1;4989:48:135;;5021:15;;4989:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5047:12:135;;:48;;;;;-1:-1:-1;;;;;5047:12:135;;;;-1:-1:-1;5047:31:135;;-1:-1:-1;5047:48:135;;5079:15;;5047:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5105:12:135;;:48;;;;;-1:-1:-1;;;;;5105:12:135;;;;-1:-1:-1;5105:31:135;;-1:-1:-1;5105:48:135;;5137:15;;5105:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19244:399:74;19342:12;19366:21;19420:13;19403:31;;;;;;;;:::i;:::-;;;;-1:-1:-1;;19403:31:74;;;;;;;;;;19390:63;;19436:16;;19403:31;19390:63;;:::i;:::-;;;;;;;;;;;;;19366:87;;19531:8;19525:15;19518:4;19508:8;19504:19;19501:1;19494:47;19486:55;;19576:4;19564:17;19554:73;;19611:1;19608;19601:12;1715:427:73;1814:12;1828:11;1841:13;1867:10;1879:19;1902:113;1946:8;418:1:13;1902:30:73;:113::i;:::-;1866:149;;;;2033:5;2025:59;;;;;;;83323:2:139;2025:59:73;;;83305:21:139;83362:2;83342:18;;;83335:30;83401:34;83381:18;;;83374:62;83472:11;83452:18;;;83445:39;83501:19;;2025:59:73;83121:405:139;2025:59:73;2101:34;;;;;:4;;:26;;:34;;2128:6;;2101:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2094:41;;;;;;;-1:-1:-1;2094:41:73;;;-1:-1:-1;1715:427:73;-1:-1:-1;;;;1715:427:73:o;2697:371:13:-;2789:12;;;2863:2;2845:20;;;;;:44;;-1:-1:-1;2887:2:13;2869:20;;;2845:44;2841:90;;;2898:33;;;;;;;;;;;;;;2841:90;2949:16;:7;;2963:1;2949:13;:16::i;:::-;2941:24;-1:-1:-1;2981:17:13;:7;;2996:1;2981:14;:17::i;:::-;2975:23;-1:-1:-1;3034:2:13;3016:20;;:45;;3060:1;3016:45;;;3039:18;:7;;3054:2;3039:14;:18::i;:::-;3008:53;;2697:371;;;;;:::o;1788:125:50:-;1851:14;;1884:22;785:2;1851:14;1884:7;;:22;:::i;3397:132::-;3461:14;;3500:21;:7;785:2;3500:7;;:21;:::i;25755:300:74:-;25871:58;;84295:66:139;25871:58:74;;;84283:79:139;84378:12;;;84371:28;;;25806:12:74;;25830:28;;84415:12:139;;25871:58:74;;;-1:-1:-1;;25871:58:74;;;;;;;;;;25861:69;;25871:58;25861:69;;;;25974:32;;;25982:1;25974:32;;;69349:25:139;69390:18;;;69383:34;;;25861:69:74;-1:-1:-1;25941:7:74;;;;;;336:42:88;;25974:7:74;;69322:18:139;;25974:32:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26023:25;;;;;;85254:19:139;;;;85289:12;;;85282:28;;;;85348:3;85344:16;;;;85362:66;85340:89;85326:12;;;85319:111;26023:25:74;;;;;;;;;85446:12:139;;;;26023:25:74;;;;25755:300;-1:-1:-1;;;;;;25755:300:74:o;3256:135:50:-;3320:14;;3359:24;:7;862:3;3359:7;;:24;:::i;7702:184:135:-;7789:40;7798:5;7805;7789:40;;;;;;;;;;;;;;;;;:8;:40::i;:::-;7839;7848:5;7855;7839:40;;;;;;;;;;;;;;;;;:8;:40::i;1357:742:13:-;1472:16;1490:21;1472:16;1612:1;1602:11;;1472:16;1674:22;:8;;1602:11;1674:14;:22::i;:::-;1720:1;1710:11;;;;;1660:36;-1:-1:-1;1781:21:13;:8;;1710:11;1781:13;:21::i;:::-;1768:34;-1:-1:-1;1932:1:13;1923:10;;1987:13;;;;;2023:31;1987:13;1923:10;2023:8;;:31;:::i;:::-;1357:742;;2014:40;;-1:-1:-1;2014:40:13;;-1:-1:-1;;;2068:14:13;;;;-1:-1:-1;;;1357:742:13:o;4032:231:132:-;4097:13;4126:12;4132:5;5667:12;5653:10;;;5667:12;5653:10;;;5667:12;;5653:26;;5564:122;4126:12;4122:56;;;4140:38;1413:4:124;4140:11:132;:38::i;:::-;-1:-1:-1;4231:10:132;;:14;:10;;;;;;;:14;4219:27;;;;;:11;;;;:27;;;;;;;4032:231::o;2119:386::-;2251:10;;2182:13;;2251:10;;;;;;;2292:12;2279:25;;2275:65;;2306:34;1315:4:124;2306:11:132;:34::i;:::-;2354:11;;2387:22;;;;;;;;2354:11;2387;;:22;;;;;;;2423:29;;;2466:22;;;;;;;;;;;;;-1:-1:-1;2387:22:132;2119:386::o;2568:228:73:-;2694:10;2728:61;2759:8;2769:19;2728:30;:61::i;:::-;-1:-1:-1;2716:73:73;2568:228;-1:-1:-1;;;2568:228:73:o;1271:438::-;1371:14;1387:16;1416:10;1428:19;1451:115;1495:8;363:1:13;1451:30:73;:115::i;:::-;1415:151;;;;1584:5;1576:60;;;;;;;85671:2:139;1576:60:73;;;85653:21:139;85710:2;85690:18;;;85683:30;85749:34;85729:18;;;85722:62;85820:12;85800:18;;;85793:40;85850:19;;1576:60:73;85469:406:139;1576:60:73;1667:35;;;;;:4;;:27;;:35;;1695:6;;1667:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1646:56;;;;;;;-1:-1:-1;1271:438:73;-1:-1:-1;;;;1271:438:73:o;3074:380:13:-;3163:11;;;3244:2;3226:20;;;;;:44;;-1:-1:-1;3268:2:13;3250:20;;;3226:44;3222:87;;;3279:30;;;;;;;;;;;;;;3222:87;3325:17;:7;;3340:1;3325:14;:17::i;:::-;3319:23;-1:-1:-1;3367:17:13;:7;;3381:2;3367:13;:17::i;:::-;3352:32;-1:-1:-1;3420:2:13;3402:20;;:45;;3446:1;3402:45;;;3425:18;:7;;3440:2;3425:14;:18::i;2420:271::-;2499:14;;2565:2;2547:20;;2543:67;;2576:34;;;;;;;;;;;;;;2543:67;2629:17;:7;;2644:1;2629:14;:17::i;:::-;2620:26;-1:-1:-1;2667:17:13;:7;;2681:2;2667:13;:17::i;:::-;2656:28;;2420:271;;;;;:::o;858:407:73:-;943:11;956:13;982:10;994:19;1017:113;1061:8;306:1:13;1017:30:73;:113::i;:::-;981:149;;;;1148:5;1140:59;;;;;;;86399:2:139;1140:59:73;;;86381:21:139;86438:2;86418:18;;;86411:30;86477:34;86457:18;;;86450:62;86548:11;86528:18;;;86521:39;86577:19;;1140:59:73;86197:405:139;1140:59:73;1224:34;;;;;:4;;:26;;:34;;1251:6;;1224:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1209:49;;;;;;;;-1:-1:-1;858:407:73;-1:-1:-1;;;;858:407:73:o;2105:309:13:-;2183:11;;2243:2;2225:20;;;;;:44;;-1:-1:-1;2267:2:13;2249:20;;;2225:44;2221:90;;;2278:33;;;;;;;;;;;;;;2221:90;2327:17;:7;;2342:1;2327:14;:17::i;:::-;2321:23;-1:-1:-1;2380:2:13;2362:20;;:45;;2406:1;2362:45;;;2385:18;:7;;2400:2;2385:14;:18::i;2827:143:50:-;2892:7;2926:36;785:2;706;2926:7;;:36;:::i;2658:320:132:-;2784:12;;;;;;:16;;;2832:10;;;;;2818:24;;;;2814:63;;2844:33;1536:4:124;2844:11:132;:33::i;:::-;2891:23;;;;;;:11;;;:23;;;;;:31;;;;2936:25;;;;;;;2658:320::o;2802:2541:73:-;3012:10;;:27;;;;;2937:10;;2949:19;;2937:10;;3012;;;-1:-1:-1;;;;;3012:10:73;;:17;;:27;;3030:8;;3012:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3012:27:73;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3306:12:73;;;3050:14;3306:12;;;;;;;;;2980:59;;-1:-1:-1;3050:14:73;;;;;;;3329:1893;3345:12;:19;3336:6;:28;3329:1893;;;3438:45;;;;;3381:16;;;;;;3438:4;;:23;;:45;;3462:12;;3476:6;;3438:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3438:45:73;;;;;;;;;;;;:::i;:::-;3380:103;;;;;;3606:19;3592:33;;:10;:33;;;3588:1591;;3645:11;;;;;3802:51;;;;;3798:1367;;3892:30;;;;;:4;;:26;;:30;;3919:2;;3892:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3877:45;;-1:-1:-1;3877:45:73;-1:-1:-1;3944:18:73;3877:45;3944:18;;:::i;:::-;;-1:-1:-1;3984:22:73;4001:5;3984:22;;:::i;:::-;;;4055:11;4068:13;4038:44;;;;;;;;88842:3:139;88838:16;;;88747:66;88834:25;;;88822:38;;88894:16;;;;88890:25;88885:2;88876:12;;88869:47;88941:2;88932:12;;88580:370;4038:44:73;;;;;;;;;;;;;4028:54;;3798:1367;;;4111:53;;;;;4107:1058;;4311:31;;;;;:4;;:27;;:31;;4339:2;;4311:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4291:51;;-1:-1:-1;4291:51:73;-1:-1:-1;4364:22:73;4291:51;4364:22;;:::i;:::-;4418:41;;89146:66:139;89132:3;89128:16;;;89124:89;4418:41:73;;;89112:102:139;89230:12;;;89223:28;;;4364:22:73;;-1:-1:-1;89267:12:139;;4418:41:73;88955:330:139;4107:1058:73;4488:51;;;;;4484:681;;4585:30;;;;;:4;;:26;;:30;;4612:2;;4585:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4563:52;;-1:-1:-1;4563:52:73;-1:-1:-1;4563:52:73;-1:-1:-1;4637:18:73;4563:52;4637:18;;:::i;:::-;;-1:-1:-1;4677:22:73;4694:5;4677:22;;:::i;:::-;4731:51;;89507:66:139;89493:3;89489:16;;;89485:89;4731:51:73;;;89473:102:139;89594:66;89697:3;89693:16;;;89689:25;;89676:11;;;89669:46;89749:16;;;89745:25;89731:12;;;89724:47;4677:22:73;;-1:-1:-1;89787:12:139;;4731:51:73;89290:515:139;4484:681:73;4811:48;;;;;4807:358;;4904:27;;;;;:4;;:23;;:27;;4928:2;;4904:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4883:48;;-1:-1:-1;4883:48:73;;-1:-1:-1;4883:48:73;-1:-1:-1;4953:22:73;4883:48;4953:22;;:::i;:::-;;-1:-1:-1;4997:18:73;5012:3;4997:18;;:::i;:::-;;-1:-1:-1;5037:20:73;5053:4;5037:20;;:::i;:::-;5089:57;;90180:66:139;90275:3;90271:16;;;90267:25;;5089:57:73;;;90255:38:139;90345:66;90331:3;90327:16;;;90323:89;90309:12;;;90302:111;90447:16;;;90443:25;90429:12;;;90422:47;5037:20:73;;-1:-1:-1;90485:12:139;;5089:57:73;;;;;;;;;;;;5079:67;;4807:358;3627:1552;;;;;3588:1591;5201:10;-1:-1:-1;3329:1893:73;;-1:-1:-1;;3329:1893:73;;5236:7;:14;5254:1;5236:19;5232:73;;5279:5;;-1:-1:-1;5286:7:73;-1:-1:-1;5271:23:73;;-1:-1:-1;;;;;5271:23:73;5232:73;5322:4;;5328:7;;-1:-1:-1;2802:2541:73;-1:-1:-1;;;;;;;;2802:2541:73:o;4800:67:74:-;4842:18;:16;:18::i;:::-;4800:67::o;27055:91:91:-;27122:17;;;;;-1:-1:-1;;;;;25964:55:139;;27122:17:91;;;25946:74:139;26036:18;;;26029:34;;;27122:7:91;;;;25919:18:139;;27122:17:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;229:215:43;306:6;371:1;362:10;;407:18;362:10;:6;407;;:18;:::i;:::-;400:26;;;:::i;:::-;393:34;;;229:215;-1:-1:-1;;;;;229:215:43:o;892:220::-;970:7;1036:2;1027:11;;1075:18;1027:11;:6;1075;;:18;:::i;:::-;1067:27;;;:::i;:::-;1059:36;;;892:220;-1:-1:-1;;;;;892:220:43:o;95:128::-;171:5;201:6;;208;201:14;;;;;;;:::i;:::-;;;;;;;;;95:128;-1:-1:-1;;;;;95:128:43:o;1776:194:124:-;1881:10;1875:4;1868:24;1918:4;1912;1905:18;1949:4;1943;1936:18;450:215:43;527:6;592:1;583:10;;628:18;583:10;:6;628;;:18;:::i;:::-;621:26;;;:::i;:::-;614:34;;;450:215;-1:-1:-1;;;;;450:215:43:o;1570:210::-;1647:7;1713:2;1704:11;;1744:18;1704:11;:6;1744;;:18;:::i;:::-;1736:27;;;:::i;:::-;1729:34;1570:210;-1:-1:-1;;;;;1570:210:43:o;765:87:73:-;825:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;812:10;;:33;;;;;-1:-1:-1;;;;;812:33:73;;;;;-1:-1:-1;;;;;812:33:73;;;;;;765:87::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:121:139;99:10;92:5;88:22;81:5;78:33;68:61;;125:1;122;115:12;140:154;-1:-1:-1;;;;;219:5:139;215:54;208:5;205:65;195:93;;284:1;281;274:12;299:386;366:6;374;427:2;415:9;406:7;402:23;398:32;395:52;;;443:1;440;433:12;395:52;482:9;469:23;501:30;525:5;501:30;:::i;:::-;550:5;-1:-1:-1;607:2:139;592:18;;579:32;620:33;579:32;620:33;:::i;:::-;672:7;662:17;;;299:386;;;;;:::o;921:347::-;972:8;982:6;1036:3;1029:4;1021:6;1017:17;1013:27;1003:55;;1054:1;1051;1044:12;1003:55;-1:-1:-1;1077:20:139;;1120:18;1109:30;;1106:50;;;1152:1;1149;1142:12;1106:50;1189:4;1181:6;1177:17;1165:29;;1241:3;1234:4;1225:6;1217;1213:19;1209:30;1206:39;1203:59;;;1258:1;1255;1248:12;1273:184;1325:77;1322:1;1315:88;1422:4;1419:1;1412:15;1446:4;1443:1;1436:15;1462:254;1535:2;1529:9;1577:4;1565:17;;1612:18;1597:34;;1633:22;;;1594:62;1591:88;;;1659:18;;:::i;:::-;1695:2;1688:22;1462:254;:::o;1721:334::-;1792:2;1786:9;1848:2;1838:13;;-1:-1:-1;;1834:86:139;1822:99;;1951:18;1936:34;;1972:22;;;1933:62;1930:88;;;1998:18;;:::i;:::-;2034:2;2027:22;1721:334;;-1:-1:-1;1721:334:139:o;2060:245::-;2108:4;2141:18;2133:6;2130:30;2127:56;;;2163:18;;:::i;:::-;-1:-1:-1;2220:2:139;2208:15;-1:-1:-1;;2204:88:139;2294:4;2200:99;;2060:245::o;2310:462::-;2352:5;2405:3;2398:4;2390:6;2386:17;2382:27;2372:55;;2423:1;2420;2413:12;2372:55;2459:6;2446:20;2490:48;2506:31;2534:2;2506:31;:::i;:::-;2490:48;:::i;:::-;2563:2;2554:7;2547:19;2609:3;2602:4;2597:2;2589:6;2585:15;2581:26;2578:35;2575:55;;;2626:1;2623;2616:12;2575:55;2691:2;2684:4;2676:6;2672:17;2665:4;2656:7;2652:18;2639:55;2739:1;2714:16;;;2732:4;2710:27;2703:38;;;;2718:7;2310:462;-1:-1:-1;;;2310:462:139:o;2777:826::-;2883:6;2891;2899;2907;2960:2;2948:9;2939:7;2935:23;2931:32;2928:52;;;2976:1;2973;2966:12;2928:52;3016:9;3003:23;3045:18;3086:2;3078:6;3075:14;3072:34;;;3102:1;3099;3092:12;3072:34;3141:58;3191:7;3182:6;3171:9;3167:22;3141:58;:::i;:::-;3218:8;;-1:-1:-1;3115:84:139;-1:-1:-1;3306:2:139;3291:18;;3278:32;;-1:-1:-1;3322:16:139;;;3319:36;;;3351:1;3348;3341:12;3319:36;3374:51;3417:7;3406:8;3395:9;3391:24;3374:51;:::i;:::-;3364:61;;3478:2;3467:9;3463:18;3450:32;3434:48;;3507:2;3497:8;3494:16;3491:36;;;3523:1;3520;3513:12;3491:36;;3546:51;3589:7;3578:8;3567:9;3563:24;3546:51;:::i;:::-;3536:61;;;2777:826;;;;;;;:::o;4649:250::-;4734:1;4744:113;4758:6;4755:1;4752:13;4744:113;;;4834:11;;;4828:18;4815:11;;;4808:39;4780:2;4773:10;4744:113;;;-1:-1:-1;;4891:1:139;4873:16;;4866:27;4649:250::o;4904:329::-;4945:3;4983:5;4977:12;5010:6;5005:3;4998:19;5026:76;5095:6;5088:4;5083:3;5079:14;5072:4;5065:5;5061:16;5026:76;:::i;:::-;5147:2;5135:15;-1:-1:-1;;5131:88:139;5122:98;;;;5222:4;5118:109;;4904:329;-1:-1:-1;;4904:329:139:o;5238:217::-;5385:2;5374:9;5367:21;5348:4;5405:44;5445:2;5434:9;5430:18;5422:6;5405:44;:::i;5460:114::-;5544:4;5537:5;5533:16;5526:5;5523:27;5513:55;;5564:1;5561;5554:12;5579:152;5656:20;;5705:1;5695:12;;5685:40;;5721:1;5718;5711:12;5685:40;5579:152;;;:::o;5736:343::-;5819:6;5827;5880:2;5868:9;5859:7;5855:23;5851:32;5848:52;;;5896:1;5893;5886:12;5848:52;5935:9;5922:23;5954:29;5977:5;5954:29;:::i;:::-;6002:5;-1:-1:-1;6026:47:139;6069:2;6054:18;;6026:47;:::i;6084:488::-;6137:3;6175:5;6169:12;6202:6;6197:3;6190:19;6228:4;6257;6252:3;6248:14;6241:21;;6296:4;6289:5;6285:16;6319:1;6329:218;6343:6;6340:1;6337:13;6329:218;;;6408:13;;-1:-1:-1;;;;;6404:62:139;6392:75;;6487:12;;;;6522:15;;;;6365:1;6358:9;6329:218;;;-1:-1:-1;6563:3:139;;6084:488;-1:-1:-1;;;;;6084:488:139:o;6577:261::-;6756:2;6745:9;6738:21;6719:4;6776:56;6828:2;6817:9;6813:18;6805:6;6776:56;:::i;7066:588::-;7148:6;7156;7164;7217:2;7205:9;7196:7;7192:23;7188:32;7185:52;;;7233:1;7230;7223:12;7185:52;7273:9;7260:23;7306:18;7298:6;7295:30;7292:50;;;7338:1;7335;7328:12;7292:50;7361:49;7402:7;7393:6;7382:9;7378:22;7361:49;:::i;:::-;7351:59;;;7460:2;7449:9;7445:18;7432:32;7473:29;7496:5;7473:29;:::i;:::-;7521:5;-1:-1:-1;7578:2:139;7563:18;;7550:32;7591:31;7550:32;7591:31;:::i;:::-;7641:7;7631:17;;;7066:588;;;;;:::o;7659:656::-;7711:3;7742;7774:5;7768:12;7801:6;7796:3;7789:19;7827:4;7856;7851:3;7847:14;7840:21;;7914:4;7904:6;7901:1;7897:14;7890:5;7886:26;7882:37;7953:4;7946:5;7942:16;7976:1;7986:303;8000:6;7997:1;7994:13;7986:303;;;-1:-1:-1;;8075:5:139;8069:4;8065:16;8061:89;8056:3;8049:102;8172:37;8204:4;8195:6;8189:13;8172:37;:::i;:::-;8267:12;;;;8164:45;-1:-1:-1;8232:15:139;;;;8022:1;8015:9;7986:303;;;-1:-1:-1;8305:4:139;;7659:656;-1:-1:-1;;;;;;;7659:656:139:o;8320:1159::-;8526:4;8555:2;8595;8584:9;8580:18;8625:2;8614:9;8607:21;8648:6;8683;8677:13;8714:6;8706;8699:22;8740:2;8730:12;;8773:2;8762:9;8758:18;8751:25;;8835:2;8825:6;8822:1;8818:14;8807:9;8803:30;8799:39;8873:2;8865:6;8861:15;8894:1;8904:546;8918:6;8915:1;8912:13;8904:546;;;8983:22;;;9007:66;8979:95;8967:108;;9098:13;;9143:9;;-1:-1:-1;;;;;9139:58:139;9124:74;;9237:11;;9231:18;9269:15;;;9262:27;;;9312:58;9354:15;;;9231:18;9312:58;:::i;:::-;9428:12;;;;9302:68;-1:-1:-1;;9393:15:139;;;;8940:1;8933:9;8904:546;;;-1:-1:-1;9467:6:139;;8320:1159;-1:-1:-1;;;;;;;;8320:1159:139:o;9739:1114::-;9862:6;9870;9878;9886;9894;9902;9910;9963:3;9951:9;9942:7;9938:23;9934:33;9931:53;;;9980:1;9977;9970:12;9931:53;10019:9;10006:23;10038:30;10062:5;10038:30;:::i;:::-;10087:5;-1:-1:-1;10144:2:139;10129:18;;10116:32;10157:33;10116:32;10157:33;:::i;:::-;10209:7;-1:-1:-1;10267:2:139;10252:18;;10239:32;10290:18;10320:14;;;10317:34;;;10347:1;10344;10337:12;10317:34;10370:49;10411:7;10402:6;10391:9;10387:22;10370:49;:::i;:::-;10360:59;;10466:2;10455:9;10451:18;10438:32;10428:42;;10522:3;10511:9;10507:19;10494:33;10479:48;;10536:33;10561:7;10536:33;:::i;:::-;10588:7;;-1:-1:-1;10648:3:139;10633:19;;10620:33;;10665:16;;;10662:36;;;10694:1;10691;10684:12;10662:36;;10733:60;10785:7;10774:8;10763:9;10759:24;10733:60;:::i;:::-;9739:1114;;;;-1:-1:-1;9739:1114:139;;-1:-1:-1;9739:1114:139;;;;10707:86;;-1:-1:-1;;;9739:1114:139:o;10858:409::-;10928:6;10936;10989:2;10977:9;10968:7;10964:23;10960:32;10957:52;;;11005:1;11002;10995:12;10957:52;11045:9;11032:23;11078:18;11070:6;11067:30;11064:50;;;11110:1;11107;11100:12;11064:50;11149:58;11199:7;11190:6;11179:9;11175:22;11149:58;:::i;:::-;11226:8;;11123:84;;-1:-1:-1;10858:409:139;-1:-1:-1;;;;10858:409:139:o;11678:117::-;11763:6;11756:5;11752:18;11745:5;11742:29;11732:57;;11785:1;11782;11775:12;11800:313;11867:6;11875;11928:2;11916:9;11907:7;11903:23;11899:32;11896:52;;;11944:1;11941;11934:12;11896:52;11983:9;11970:23;12002:30;12026:5;12002:30;:::i;:::-;12051:5;12103:2;12088:18;;;;12075:32;;-1:-1:-1;;;11800:313:139:o;12310:628::-;12398:6;12406;12414;12467:2;12455:9;12446:7;12442:23;12438:32;12435:52;;;12483:1;12480;12473:12;12435:52;12523:9;12510:23;12552:18;12593:2;12585:6;12582:14;12579:34;;;12609:1;12606;12599:12;12579:34;12648:58;12698:7;12689:6;12678:9;12674:22;12648:58;:::i;:::-;12725:8;;-1:-1:-1;12622:84:139;-1:-1:-1;12813:2:139;12798:18;;12785:32;;-1:-1:-1;12829:16:139;;;12826:36;;;12858:1;12855;12848:12;12826:36;;12881:51;12924:7;12913:8;12902:9;12898:24;12881:51;:::i;:::-;12871:61;;;12310:628;;;;;:::o;12943:183::-;13003:4;13036:18;13028:6;13025:30;13022:56;;;13058:18;;:::i;:::-;-1:-1:-1;13103:1:139;13099:14;13115:4;13095:25;;12943:183::o;13131:743::-;13185:5;13238:3;13231:4;13223:6;13219:17;13215:27;13205:55;;13256:1;13253;13246:12;13205:55;13292:6;13279:20;13318:4;13342:60;13358:43;13398:2;13358:43;:::i;13342:60::-;13424:3;13448:2;13443:3;13436:15;13476:4;13471:3;13467:14;13460:21;;13533:4;13527:2;13524:1;13520:10;13512:6;13508:23;13504:34;13490:48;;13561:3;13553:6;13550:15;13547:35;;;13578:1;13575;13568:12;13547:35;13614:4;13606:6;13602:17;13628:217;13644:6;13639:3;13636:15;13628:217;;;13724:3;13711:17;13741:31;13766:5;13741:31;:::i;:::-;13785:18;;13823:12;;;;13661;;13628:217;;;-1:-1:-1;13863:5:139;13131:743;-1:-1:-1;;;;;;13131:743:139:o;13879:1211::-;13996:6;14004;14057:2;14045:9;14036:7;14032:23;14028:32;14025:52;;;14073:1;14070;14063:12;14025:52;14113:9;14100:23;14142:18;14183:2;14175:6;14172:14;14169:34;;;14199:1;14196;14189:12;14169:34;14222:61;14275:7;14266:6;14255:9;14251:22;14222:61;:::i;:::-;14212:71;;14302:2;14292:12;;14357:2;14346:9;14342:18;14329:32;14386:2;14376:8;14373:16;14370:36;;;14402:1;14399;14392:12;14370:36;14425:24;;;-1:-1:-1;14480:4:139;14472:13;;14468:27;-1:-1:-1;14458:55:139;;14509:1;14506;14499:12;14458:55;14545:2;14532:16;14568:60;14584:43;14624:2;14584:43;:::i;14568:60::-;14662:15;;;14744:1;14740:10;;;;14732:19;;14728:28;;;14693:12;;;;14768:19;;;14765:39;;;14800:1;14797;14790:12;14765:39;14824:11;;;;14844:216;14860:6;14855:3;14852:15;14844:216;;;14940:3;14927:17;14957:30;14981:5;14957:30;:::i;:::-;15000:18;;14877:12;;;;15038;;;;14844:216;;;15079:5;15069:15;;;;;;;13879:1211;;;;;:::o;15095:511::-;15147:3;15185:5;15179:12;15212:6;15207:3;15200:19;15238:4;15267;15262:3;15258:14;15251:21;;15306:4;15299:5;15295:16;15329:1;15339:242;15353:6;15350:1;15347:13;15339:242;;;15418:13;;15433:66;15414:86;15402:99;;15521:12;;;;15556:15;;;;15375:1;15368:9;15339:242;;15611:1245;15831:4;15860:2;15900;15889:9;15885:18;15930:2;15919:9;15912:21;15953:6;15988;15982:13;16019:6;16011;16004:22;16045:2;16035:12;;16078:2;16067:9;16063:18;16056:25;;16140:2;16130:6;16127:1;16123:14;16112:9;16108:30;16104:39;16178:2;16170:6;16166:15;16199:1;16209:618;16223:6;16220:1;16217:13;16209:618;;;16312:66;16300:9;16292:6;16288:22;16284:95;16279:3;16272:108;16409:6;16403:13;16455:2;16449:9;16486:2;16478:6;16471:18;16516:47;16559:2;16551:6;16547:15;16533:12;16516:47;:::i;:::-;16604:11;;;16598:18;16653:19;;;16636:15;;;16629:44;16598:18;16502:61;-1:-1:-1;16696:51:139;16502:61;16598:18;16696:51;:::i;:::-;16805:12;;;;16686:61;-1:-1:-1;;;16770:15:139;;;;16245:1;16238:9;16209:618;;16861:477;16940:6;16948;16956;17009:2;16997:9;16988:7;16984:23;16980:32;16977:52;;;17025:1;17022;17015:12;16977:52;17065:9;17052:23;17098:18;17090:6;17087:30;17084:50;;;17130:1;17127;17120:12;17084:50;17169:58;17219:7;17210:6;17199:9;17195:22;17169:58;:::i;:::-;17246:8;;17143:84;;-1:-1:-1;17328:2:139;17313:18;;;;17300:32;;16861:477;-1:-1:-1;;;;16861:477:139:o;17343:325::-;17431:6;17426:3;17419:19;17483:6;17476:5;17469:4;17464:3;17460:14;17447:43;;17535:1;17528:4;17519:6;17514:3;17510:16;17506:27;17499:38;17401:3;17657:4;-1:-1:-1;;17582:2:139;17574:6;17570:15;17566:88;17561:3;17557:98;17553:109;17546:116;;17343:325;;;;:::o;17673:393::-;17894:4;17886:6;17882:17;17871:9;17864:36;17936:2;17931;17920:9;17916:18;17909:30;17845:4;17956:61;18013:2;18002:9;17998:18;17990:6;17982;17956:61;:::i;:::-;17948:69;;18053:6;18048:2;18037:9;18033:18;18026:34;17673:393;;;;;;;:::o;18071:348::-;18155:6;18208:2;18196:9;18187:7;18183:23;18179:32;18176:52;;;18224:1;18221;18214:12;18176:52;18264:9;18251:23;18297:18;18289:6;18286:30;18283:50;;;18329:1;18326;18319:12;18283:50;18352:61;18405:7;18396:6;18385:9;18381:22;18352:61;:::i;:::-;18342:71;18071:348;-1:-1:-1;;;;18071:348:139:o;18674:732::-;18777:6;18785;18793;18801;18809;18862:3;18850:9;18841:7;18837:23;18833:33;18830:53;;;18879:1;18876;18869:12;18830:53;18918:9;18905:23;18937:30;18961:5;18937:30;:::i;:::-;18986:5;-1:-1:-1;19038:2:139;19023:18;;19010:32;;-1:-1:-1;19089:2:139;19074:18;;19061:32;;-1:-1:-1;19145:2:139;19130:18;;19117:32;19158:33;19117:32;19158:33;:::i;:::-;19210:7;-1:-1:-1;19268:3:139;19253:19;;19240:33;19296:18;19285:30;;19282:50;;;19328:1;19325;19318:12;19282:50;19351:49;19392:7;19383:6;19372:9;19368:22;19351:49;:::i;:::-;19341:59;;;18674:732;;;;;;;;:::o;19411:280::-;19610:2;19599:9;19592:21;19573:4;19630:55;19681:2;19670:9;19666:18;19658:6;19630:55;:::i;19960:1157::-;20164:4;20193:2;20233;20222:9;20218:18;20263:2;20252:9;20245:21;20286:6;20321;20315:13;20352:6;20344;20337:22;20378:2;20368:12;;20411:2;20400:9;20396:18;20389:25;;20473:2;20463:6;20460:1;20456:14;20445:9;20441:30;20437:39;20511:2;20503:6;20499:15;20532:1;20542:546;20556:6;20553:1;20550:13;20542:546;;;20621:22;;;20645:66;20617:95;20605:108;;20736:13;;20781:9;;-1:-1:-1;;;;;20777:58:139;20762:74;;20875:11;;20869:18;20907:15;;;20900:27;;;20950:58;20992:15;;;20869:18;20950:58;:::i;:::-;21066:12;;;;20940:68;-1:-1:-1;;21031:15:139;;;;20578:1;20571:9;20542:546;;22014:832;22120:6;22128;22136;22144;22152;22205:3;22193:9;22184:7;22180:23;22176:33;22173:53;;;22222:1;22219;22212:12;22173:53;22262:9;22249:23;22291:18;22332:2;22324:6;22321:14;22318:34;;;22348:1;22345;22338:12;22318:34;22387:58;22437:7;22428:6;22417:9;22413:22;22387:58;:::i;:::-;22464:8;;-1:-1:-1;22361:84:139;-1:-1:-1;22552:2:139;22537:18;;22524:32;;-1:-1:-1;22568:16:139;;;22565:36;;;22597:1;22594;22587:12;22565:36;;22620:51;22663:7;22652:8;22641:9;22637:24;22620:51;:::i;:::-;22610:61;;;22718:2;22707:9;22703:18;22690:32;22680:42;;22772:2;22761:9;22757:18;22744:32;22785:31;22810:5;22785:31;:::i;:::-;22835:5;22825:15;;;22014:832;;;;;;;;:::o;22851:271::-;22934:6;22987:2;22975:9;22966:7;22962:23;22958:32;22955:52;;;23003:1;23000;22993:12;22955:52;23042:9;23029:23;23061:31;23086:5;23061:31;:::i;23127:313::-;23194:6;23202;23255:2;23243:9;23234:7;23230:23;23226:32;23223:52;;;23271:1;23268;23261:12;23223:52;23310:9;23297:23;23329:30;23353:5;23329:30;:::i;23739:579::-;23856:6;23864;23872;23925:2;23913:9;23904:7;23900:23;23896:32;23893:52;;;23941:1;23938;23931:12;23893:52;23980:9;23967:23;23999:29;24022:5;23999:29;:::i;:::-;24047:5;-1:-1:-1;24071:47:139;24114:2;24099:18;;24071:47;:::i;:::-;24061:57;;24169:2;24158:9;24154:18;24141:32;24196:18;24188:6;24185:30;24182:50;;;24228:1;24225;24218:12;24182:50;24251:61;24304:7;24295:6;24284:9;24280:22;24251:61;:::i;24323:146::-;24409:34;24402:5;24398:46;24391:5;24388:57;24378:85;;24459:1;24456;24449:12;24474:247;24533:6;24586:2;24574:9;24565:7;24561:23;24557:32;24554:52;;;24602:1;24599;24592:12;24554:52;24641:9;24628:23;24660:31;24685:5;24660:31;:::i;25050:717::-;25140:6;25148;25156;25164;25217:2;25205:9;25196:7;25192:23;25188:32;25185:52;;;25233:1;25230;25223:12;25185:52;25273:9;25260:23;25302:18;25343:2;25335:6;25332:14;25329:34;;;25359:1;25356;25349:12;25329:34;25398:58;25448:7;25439:6;25428:9;25424:22;25398:58;:::i;:::-;25475:8;;-1:-1:-1;25372:84:139;-1:-1:-1;25563:2:139;25548:18;;25535:32;;-1:-1:-1;25579:16:139;;;25576:36;;;25608:1;25605;25598:12;25576:36;;25647:60;25699:7;25688:8;25677:9;25673:24;25647:60;:::i;:::-;25050:717;;;;-1:-1:-1;25726:8:139;-1:-1:-1;;;;25050:717:139:o;26074:763::-;26174:10;26166:5;26160:12;26156:29;26151:3;26144:42;26235:4;26228:5;26224:16;26218:23;26211:4;26206:3;26202:14;26195:47;26291:4;26284:5;26280:16;26274:23;26267:4;26262:3;26258:14;26251:47;26347:4;26340:5;26336:16;26330:23;26323:4;26318:3;26314:14;26307:47;26126:3;26400:4;26393:5;26389:16;26383:23;26438:4;26431;26426:3;26422:14;26415:28;26464:46;26504:4;26499:3;26495:14;26481:12;26464:46;:::i;:::-;26452:58;;26558:4;26551:5;26547:16;26541:23;26606:3;26600:4;26596:14;26589:4;26584:3;26580:14;26573:38;26634;26667:4;26651:14;26634:38;:::i;:::-;26620:52;;;26720:4;26713:5;26709:16;26703:23;26770:3;26762:6;26758:16;26751:4;26746:3;26742:14;26735:40;26791;26824:6;26808:14;26791:40;:::i;26842:560::-;27074:4;-1:-1:-1;;;;;27184:2:139;27176:6;27172:15;27161:9;27154:34;27236:2;27228:6;27224:15;27219:2;27208:9;27204:18;27197:43;;27276:6;27271:2;27260:9;27256:18;27249:34;27319:3;27314:2;27303:9;27299:18;27292:31;27340:56;27391:3;27380:9;27376:19;27368:6;27340:56;:::i;:::-;27332:64;26842:560;-1:-1:-1;;;;;;26842:560:139:o;27407:506::-;27507:6;27560:2;27548:9;27539:7;27535:23;27531:32;27528:52;;;27576:1;27573;27566:12;27528:52;27609:2;27603:9;27651:2;27643:6;27639:15;27720:6;27708:10;27705:22;27684:18;27672:10;27669:34;27666:62;27663:88;;;27731:18;;:::i;:::-;27767:2;27760:22;27806:16;;27791:32;;27877:2;27862:18;;;27856:25;27839:15;;;27832:50;;;;-1:-1:-1;27798:6:139;27407:506;-1:-1:-1;27407:506:139:o;27918:164::-;27994:13;;28043;;28036:21;28026:32;;28016:60;;28072:1;28069;28062:12;28087:202;28154:6;28207:2;28195:9;28186:7;28182:23;28178:32;28175:52;;;28223:1;28220;28213:12;28175:52;28246:37;28273:9;28246:37;:::i;28294:457::-;28535:6;28524:9;28517:25;28578:2;28573;28562:9;28558:18;28551:30;28498:4;28598:55;28649:2;28638:9;28634:18;28626:6;28598:55;:::i;:::-;28590:63;;-1:-1:-1;;;;;28693:6:139;28689:55;28684:2;28673:9;28669:18;28662:83;28294:457;;;;;;:::o;28756:184::-;28826:6;28879:2;28867:9;28858:7;28854:23;28850:32;28847:52;;;28895:1;28892;28885:12;28847:52;-1:-1:-1;28918:16:139;;28756:184;-1:-1:-1;28756:184:139:o;29302:710::-;29128:12;;29142:10;29124:29;29112:42;;29203:4;29192:16;;;29186:23;29170:14;;;29163:47;29263:4;29252:16;;;29246:23;29271:18;29242:48;29226:14;;;29219:72;-1:-1:-1;;;;;29692:6:139;29688:55;29683:2;29672:9;29668:18;29661:83;29781:6;29775:3;29764:9;29760:19;29753:35;29825:3;29819;29808:9;29804:19;29797:32;29590:4;29852:45;29892:3;29881:9;29877:19;29869:6;29852:45;:::i;:::-;29946:9;29938:6;29934:22;29928:3;29917:9;29913:19;29906:51;29974:32;29999:6;29991;29974:32;:::i;:::-;29966:40;29302:710;-1:-1:-1;;;;;;;;29302:710:139:o;30347:437::-;30426:1;30422:12;;;;30469;;;30490:61;;30544:4;30536:6;30532:17;30522:27;;30490:61;30597:2;30589:6;30586:14;30566:18;30563:38;30560:218;;30634:77;30631:1;30624:88;30735:4;30732:1;30725:15;30763:4;30760:1;30753:15;30560:218;;30347:437;;;:::o;30789:184::-;30841:77;30838:1;30831:88;30938:4;30935:1;30928:15;30962:4;30959:1;30952:15;30978:148;31066:4;31045:12;;;31059;;;31041:31;;31084:13;;31081:39;;;31100:18;;:::i;31544:151::-;31634:4;31627:12;;;31613;;;31609:31;;31652:14;;31649:40;;;31669:18;;:::i;31700:184::-;31752:77;31749:1;31742:88;31849:4;31846:1;31839:15;31873:4;31870:1;31863:15;31889:782;32165:4;-1:-1:-1;;;;;32275:2:139;32267:6;32263:15;32252:9;32245:34;32327:2;32319:6;32315:15;32310:2;32299:9;32295:18;32288:43;;32367:6;32362:2;32351:9;32347:18;32340:34;32422:6;32414;32410:19;32405:2;32394:9;32390:18;32383:47;32467:3;32461;32450:9;32446:19;32439:32;32494:62;32551:3;32540:9;32536:19;32528:6;32520;32494:62;:::i;:::-;32605:9;32597:6;32593:22;32587:3;32576:9;32572:19;32565:51;32633:32;32658:6;32650;32633:32;:::i;:::-;32625:40;31889:782;-1:-1:-1;;;;;;;;;;31889:782:139:o;33246:138::-;33325:13;;33347:31;33325:13;33347:31;:::i;33389:330::-;33465:6;33473;33526:2;33514:9;33505:7;33501:23;33497:32;33494:52;;;33542:1;33539;33532:12;33494:52;33574:9;33568:16;33593:31;33618:5;33593:31;:::i;:::-;33643:5;-1:-1:-1;33667:46:139;33709:2;33694:18;;33667:46;:::i;33724:175::-;33802:13;;33855:18;33844:30;;33834:41;;33824:69;;33889:1;33886;33879:12;33904:134;33981:13;;34003:29;33981:13;34003:29;:::i;34043:460::-;34126:6;34134;34142;34195:2;34183:9;34174:7;34170:23;34166:32;34163:52;;;34211:1;34208;34201:12;34163:52;34234:39;34263:9;34234:39;:::i;:::-;34224:49;;34316:2;34305:9;34301:18;34295:25;34329:29;34352:5;34329:29;:::i;:::-;34427:2;34412:18;;34406:25;34377:5;;-1:-1:-1;34440:31:139;34406:25;34440:31;:::i;34933:441::-;34986:5;35039:3;35032:4;35024:6;35020:17;35016:27;35006:55;;35057:1;35054;35047:12;35006:55;35086:6;35080:13;35117:48;35133:31;35161:2;35133:31;:::i;35117:48::-;35190:2;35181:7;35174:19;35236:3;35229:4;35224:2;35216:6;35212:15;35208:26;35205:35;35202:55;;;35253:1;35250;35243:12;35202:55;35266:77;35340:2;35333:4;35324:7;35320:18;35313:4;35305:6;35301:17;35266:77;:::i;35379:335::-;35458:6;35511:2;35499:9;35490:7;35486:23;35482:32;35479:52;;;35527:1;35524;35517:12;35479:52;35560:9;35554:16;35593:18;35585:6;35582:30;35579:50;;;35625:1;35622;35615:12;35579:50;35648:60;35700:7;35691:6;35680:9;35676:22;35648:60;:::i;35719:740::-;35784:5;35837:3;35830:4;35822:6;35818:17;35814:27;35804:55;;35855:1;35852;35845:12;35804:55;35884:6;35878:13;35910:4;35934:60;35950:43;35990:2;35950:43;:::i;35934:60::-;36016:3;36040:2;36035:3;36028:15;36068:4;36063:3;36059:14;36052:21;;36125:4;36119:2;36116:1;36112:10;36104:6;36100:23;36096:34;36082:48;;36153:3;36145:6;36142:15;36139:35;;;36170:1;36167;36160:12;36139:35;36206:4;36198:6;36194:17;36220:210;36236:6;36231:3;36228:15;36220:210;;;36309:3;36303:10;36326:31;36351:5;36326:31;:::i;:::-;36370:18;;36408:12;;;;36253;;36220:210;;36464:1116;36561:6;36614:2;36602:9;36593:7;36589:23;36585:32;36582:52;;;36630:1;36627;36620:12;36582:52;36663:9;36657:16;36692:18;36733:2;36725:6;36722:14;36719:34;;;36749:1;36746;36739:12;36719:34;36772:22;;;;36828:4;36810:16;;;36806:27;36803:47;;;36846:1;36843;36836:12;36803:47;36872:23;;:::i;:::-;36918:32;36947:2;36918:32;:::i;:::-;36911:5;36904:47;36983:40;37019:2;37015;37011:11;36983:40;:::i;:::-;36978:2;36971:5;36967:14;36960:64;37056:40;37092:2;37088;37084:11;37056:40;:::i;:::-;37051:2;37044:5;37040:14;37033:64;37129:40;37165:2;37161;37157:11;37129:40;:::i;:::-;37124:2;37117:5;37113:14;37106:64;37209:3;37205:2;37201:12;37195:19;37239:2;37229:8;37226:16;37223:36;;;37255:1;37252;37245:12;37223:36;37292:67;37351:7;37340:8;37336:2;37332:17;37292:67;:::i;:::-;37286:3;37279:5;37275:15;37268:92;;37399:3;37395:2;37391:12;37385:19;37429:2;37419:8;37416:16;37413:36;;;37445:1;37442;37435:12;37413:36;37482:67;37541:7;37530:8;37526:2;37522:17;37482:67;:::i;:::-;37476:3;37465:15;;37458:92;-1:-1:-1;37469:5:139;36464:1116;-1:-1:-1;;;;;36464:1116:139:o;37585:271::-;37768:6;37760;37755:3;37742:33;37724:3;37794:16;;37819:13;;;37794:16;37585:271;-1:-1:-1;37585:271:139:o;37861:378::-;38072:2;38061:9;38054:21;38035:4;38092:44;38132:2;38121:9;38117:18;38109:6;38092:44;:::i;:::-;38084:52;;38172:6;38167:2;38156:9;38152:18;38145:34;38227:4;38219:6;38215:17;38210:2;38199:9;38195:18;38188:45;37861:378;;;;;;:::o;38244:125::-;38309:9;;;38330:10;;;38327:36;;;38343:18;;:::i;38374:496::-;38615:10;38607:6;38603:23;38592:9;38585:42;-1:-1:-1;;;;;38667:6:139;38663:55;38658:2;38647:9;38643:18;38636:83;38755:3;38750:2;38739:9;38735:18;38728:31;38566:4;38776:45;38816:3;38805:9;38801:19;38793:6;38776:45;:::i;:::-;38768:53;;38857:6;38852:2;38841:9;38837:18;38830:34;38374:496;;;;;;;:::o;39064:1533::-;39268:4;39297:2;39337;39326:9;39322:18;39367:2;39356:9;39349:21;39390:6;39425;39419:13;39456:6;39448;39441:22;39482:2;39472:12;;39515:2;39504:9;39500:18;39493:25;;39577:2;39567:6;39564:1;39560:14;39549:9;39545:30;39541:39;39615:2;39607:6;39603:15;39636:1;39646:922;39660:6;39657:1;39654:13;39646:922;;;39749:66;39737:9;39729:6;39725:22;39721:95;39716:3;39709:108;39846:6;39840:13;39876:4;39923:10;39918:2;39912:9;39908:26;39900:6;39893:42;-1:-1:-1;;;;;39990:2:139;39986;39982:11;39976:18;39972:67;39967:2;39959:6;39955:15;39948:92;40087:2;40083;40079:11;40073:18;40128:2;40123;40115:6;40111:15;40104:27;40158:47;40201:2;40193:6;40189:15;40175:12;40158:47;:::i;:::-;40144:61;;;40228:4;40283:2;40279;40275:11;40269:18;40264:2;40256:6;40252:15;40245:43;;40311:4;40364:2;40360;40356:11;40350:18;40328:40;;40417:6;40409;40405:19;40400:2;40392:6;40388:15;40381:44;;40448:40;40481:6;40465:14;40448:40;:::i;:::-;40546:12;;;;40438:50;-1:-1:-1;;;40511:15:139;;;;39682:1;39675:9;39646:922;;40602:288;40777:2;40766:9;40759:21;40740:4;40797:44;40837:2;40826:9;40822:18;40814:6;40797:44;:::i;:::-;40789:52;;40877:6;40872:2;40861:9;40857:18;40850:34;40602:288;;;;;:::o;41320:1121::-;41421:6;41474:2;41462:9;41453:7;41449:23;41445:32;41442:52;;;41490:1;41487;41480:12;41442:52;41523:9;41517:16;41552:18;41593:2;41585:6;41582:14;41579:34;;;41609:1;41606;41599:12;41579:34;41632:22;;;;41688:4;41670:16;;;41666:27;41663:47;;;41706:1;41703;41696:12;41663:47;41732:23;;:::i;:::-;41778:33;41808:2;41778:33;:::i;42446:359::-;42633:6;42628:3;42621:19;42603:3;42669:6;42663:13;42685:73;42751:6;42746:2;42741:3;42737:12;42732:2;42724:6;42720:15;42685:73;:::i;:::-;42778:16;;;;42796:2;42774:25;;42446:359;-1:-1:-1;;;42446:359:139:o;42810:::-;43013:2;43002:9;42995:21;42976:4;43033:44;43073:2;43062:9;43058:18;43050:6;43033:44;:::i;:::-;43108:2;43093:18;;43086:34;;;;-1:-1:-1;43151:2:139;43136:18;43129:34;43025:52;42810:359;-1:-1:-1;42810:359:139:o;43174:244::-;43331:2;43320:9;43313:21;43294:4;43351:61;43408:2;43397:9;43393:18;43385:6;43377;43351:61;:::i;43701:280::-;43800:6;43853:2;43841:9;43832:7;43828:23;43824:32;43821:52;;;43869:1;43866;43859:12;43821:52;43901:9;43895:16;43920:31;43945:5;43920:31;:::i;43986:249::-;44055:6;44108:2;44096:9;44087:7;44083:23;44079:32;44076:52;;;44124:1;44121;44114:12;44076:52;44156:9;44150:16;44175:30;44199:5;44175:30;:::i;44864:196::-;44903:3;44931:5;44921:39;;44940:18;;:::i;:::-;-1:-1:-1;44987:66:139;44976:78;;44864:196::o;45065:377::-;45258:2;45247:9;45240:21;45221:4;45284:44;45324:2;45313:9;45309:18;45301:6;45284:44;:::i;:::-;45376:9;45368:6;45364:22;45359:2;45348:9;45344:18;45337:50;45404:32;45429:6;45421;45404:32;:::i;46006:537::-;46245:2;46234:9;46227:21;46208:4;46271:44;46311:2;46300:9;46296:18;46288:6;46271:44;:::i;:::-;46363:9;46355:6;46351:22;46346:2;46335:9;46331:18;46324:50;46397:32;46422:6;46414;46397:32;:::i;:::-;46383:46;;46477:9;46469:6;46465:22;46460:2;46449:9;46445:18;46438:50;46505:32;46530:6;46522;46505:32;:::i;46548:570::-;46797:3;46786:9;46779:22;46760:4;46824:45;46864:3;46853:9;46849:19;46841:6;46824:45;:::i;:::-;46917:9;46909:6;46905:22;46900:2;46889:9;46885:18;46878:50;46945:32;46970:6;46962;46945:32;:::i;:::-;46937:40;;;47013:6;47008:2;46997:9;46993:18;46986:34;-1:-1:-1;;;;;47060:6:139;47056:55;47051:2;47040:9;47036:18;47029:83;46548:570;;;;;;;:::o;47466:786::-;47791:10;47783:6;47779:23;47768:9;47761:42;47742:4;-1:-1:-1;;;;;47912:2:139;47904:6;47900:15;47895:2;47884:9;47880:18;47873:43;47952:3;47947:2;47936:9;47932:18;47925:31;47979:45;48019:3;48008:9;48004:19;47996:6;47979:45;:::i;:::-;48060:6;48055:2;48044:9;48040:18;48033:34;48116:2;48108:6;48104:15;48098:3;48087:9;48083:19;48076:44;48169:9;48161:6;48157:22;48151:3;48140:9;48136:19;48129:51;48197:49;48239:6;48231;48223;48197:49;:::i;:::-;48189:57;47466:786;-1:-1:-1;;;;;;;;;;;47466:786:139:o;49740:184::-;49792:77;49789:1;49782:88;49889:4;49886:1;49879:15;49913:4;49910:1;49903:15;50420:850;50752:4;-1:-1:-1;;;;;50862:2:139;50854:6;50850:15;50839:9;50832:34;50914:2;50906:6;50902:15;50897:2;50886:9;50882:18;50875:43;50954:3;50949:2;50938:9;50934:18;50927:31;50981:57;51033:3;51022:9;51018:19;51010:6;50981:57;:::i;:::-;51086:2;51078:6;51074:15;51069:2;51058:9;51054:18;51047:43;51139:2;51131:6;51127:15;51121:3;51110:9;51106:19;51099:44;51192:9;51184:6;51180:22;51174:3;51163:9;51159:19;51152:51;51220:44;51257:6;51249;51220:44;:::i;51412:1408::-;51870:10;51862:6;51858:23;51847:9;51840:42;51821:4;51901:2;51951:4;51943:6;51939:17;51934:2;51923:9;51919:18;51912:45;51993:3;51988:2;51977:9;51973:18;51966:31;52020:57;52072:3;52061:9;52057:19;52049:6;52020:57;:::i;:::-;-1:-1:-1;;;;;52174:15:139;;;52169:2;52154:18;;52147:43;52227:22;;;52221:3;52206:19;;52199:51;52299:13;;52321:22;;;-1:-1:-1;52383:17:139;;;52371:2;52423:16;;;;52359:15;;52299:13;52467:177;52481:6;52478:1;52475:13;52467:177;;;52546:13;;52542:22;;52530:35;;52632:1;52620:14;;;;52585:12;;;;52496:9;52467:177;;;-1:-1:-1;;29021:18:139;29010:30;;52694:3;52679:19;;28998:43;52745:9;52740:3;52736:19;52730:3;52719:9;52715:19;52708:48;52773:41;52810:3;52802:6;52773:41;:::i;:::-;52765:49;51412:1408;-1:-1:-1;;;;;;;;;;;;;51412:1408:139:o;54027:2095::-;54253:4;54282:2;54322;54311:9;54307:18;54352:2;54341:9;54334:21;54375:6;54410;54404:13;54441:6;54433;54426:22;54467:2;54457:12;;54500:2;54489:9;54485:18;54478:25;;54562:2;54552:6;54549:1;54545:14;54534:9;54530:30;54526:39;54600:2;54592:6;54588:15;54621:1;54631:1462;54645:6;54642:1;54639:13;54631:1462;;;54704:66;54799:22;;;54795:31;;54783:44;;54850:13;;54895:9;;54906:10;54891:26;54876:42;;54957:11;;54951:18;54989:15;;;54982:27;;;55050:19;;55071:18;55046:44;55029:15;;;55022:69;55132:21;;;55126:28;55202:4;55243:23;;;55177:2;55226:15;;;55219:48;;;;55308:21;;;55302:28;55393:23;;55353:3;55376:15;;;55369:48;;;;55458:21;;;55452:28;55543:23;;;55503:3;55526:15;;;55519:48;;;;55608:21;;;55602:28;55653:4;55677:15;;;55670:27;55602:28;55724:73;55792:3;55780:16;;55602:28;55724:73;:::i;:::-;55838:21;;55832:28;55902:19;;;55898:28;;55892:3;55880:16;;55873:54;55832:28;55710:87;-1:-1:-1;55950:63:139;55710:87;55832:28;55950:63;:::i;:::-;56071:12;;;;55940:73;-1:-1:-1;;;56036:15:139;;;;-1:-1:-1;54667:1:139;54660:9;54631:1462;;56127:1049;56392:2;56444:21;;;56514:13;;56417:18;;;56536:22;;;56363:4;;56392:2;56577;;56595:18;;;;56636:15;;;56363:4;56679:471;56693:6;56690:1;56687:13;56679:471;;;56752:13;;56827:9;;56788:10;56823:18;;;56811:31;;56881:11;;;56875:18;56931:19;;56927:28;;;56913:12;;;56906:50;57000:21;;56994:28;-1:-1:-1;;;;;56990:77:139;56976:12;;;56969:99;57097:4;57088:14;;;;57125:15;;;;56715:1;56708:9;56679:471;;;-1:-1:-1;57167:3:139;;56127:1049;-1:-1:-1;;;;;;;56127:1049:139:o;57181:251::-;57251:6;57304:2;57292:9;57283:7;57279:23;57275:32;57272:52;;;57320:1;57317;57310:12;57272:52;57352:9;57346:16;57371:31;57396:5;57371:31;:::i;57437:274::-;57509:34;57575:10;;;57587;;;57571:27;57618:20;;;;57509:34;57657:24;;;57647:58;;57685:18;;:::i;:::-;57647:58;;57437:274;;;;:::o;57716:1093::-;57945:2;57997:21;;;58067:13;;57970:18;;;58089:22;;;57916:4;;57945:2;58130;;58148:18;;;;58189:15;;;57916:4;58232:551;58246:6;58243:1;58240:13;58232:551;;;58305:13;;58380:9;;58341:10;58376:18;;;58364:31;;58434:11;;;58428:18;58484:19;;58505:34;58480:60;58466:12;;;58459:82;58585:21;;;58579:28;58609:18;58575:53;58561:12;;;58554:75;58673:21;;58667:28;58663:37;58658:2;58649:12;;58642:59;58730:4;58721:14;;;;58758:15;;;;58268:1;58261:9;58232:551;;58814:2127;59048:4;59077:2;59117;59106:9;59102:18;59147:2;59136:9;59129:21;59170:6;59205;59199:13;59236:6;59228;59221:22;59262:2;59252:12;;59295:2;59284:9;59280:18;59273:25;;59357:2;59347:6;59344:1;59340:14;59329:9;59325:30;59321:39;59395:2;59387:6;59383:15;59416:1;59426:1486;59440:6;59437:1;59434:13;59426:1486;;;59499:66;59594:22;;;59590:31;;59578:44;;59645:13;;59690:9;;59701:10;59686:26;59671:42;;59752:11;;59746:18;59784:15;;;59777:27;;;59845:19;;-1:-1:-1;;;;;59841:68:139;59824:15;;;59817:93;59951:21;;;59945:28;60021:4;60062:23;;;59996:2;60045:15;;;60038:48;;;;60127:21;;;60121:28;60212:23;;60172:3;60195:15;;;60188:48;;;;60277:21;;;60271:28;60362:23;;;60322:3;60345:15;;;60338:48;;;;60427:21;;;60421:28;60472:4;60496:15;;;60489:27;60421:28;60543:73;60611:3;60599:16;;60421:28;60543:73;:::i;:::-;60657:21;;60651:28;60721:19;;;60717:28;;60711:3;60699:16;;60692:54;60651:28;60529:87;-1:-1:-1;60769:63:139;60529:87;60651:28;60769:63;:::i;:::-;60890:12;;;;60759:73;-1:-1:-1;;;60855:15:139;;;;-1:-1:-1;59462:1:139;59455:9;59426:1486;;60946:1355;61181:2;61233:21;;;61303:13;;61206:18;;;61325:22;;;61152:4;;61181:2;61366;;61384:18;;;;61425:15;;;61152:4;61468:807;61482:6;61479:1;61476:13;61468:807;;;61541:13;;61583:9;;61594:10;61579:26;61567:39;;61645:11;;;61639:18;61680;61732:21;;;61718:12;;;61711:43;61798:11;;;61792:18;61788:27;61774:12;;;61767:49;61839:4;61887:11;;;61881:18;61901:6;61877:31;61863:12;;;61856:53;61932:4;61977:11;;;61971:18;62012:34;62080:23;;;62066:12;;;62059:45;;;;62127:4;62175:11;;;62169:18;62165:27;62151:12;;;62144:49;62222:4;62213:14;;;;62250:15;;;;61504:1;61497:9;61468:807;;62306:1033;62541:2;62593:21;;;62663:13;;62566:18;;;62685:22;;;62512:4;;62541:2;62726;;62744:18;;;;62785:15;;;62512:4;62828:485;62842:6;62839:1;62836:13;62828:485;;;62901:13;;62943:9;;62954:10;62939:26;62927:39;;63010:11;;;63004:18;63024;63000:43;62986:12;;;62979:65;63088:11;;;63082:18;63102:6;63078:31;63064:12;;;63057:53;63133:4;63181:11;;;63175:18;63195:34;63171:59;63157:12;;;63150:81;63260:4;63251:14;;;;63288:15;;;;62864:1;62857:9;62828:485;;63344:843;63603:2;63655:21;;;63725:13;;63628:18;;;63747:22;;;63574:4;;63603:2;63788;;63806:18;;;;63847:15;;;63574:4;63890:271;63904:6;63901:1;63898:13;63890:271;;;63963:13;;64005:9;;64016:10;64001:26;63989:39;;64068:11;;64062:18;64048:12;;;64041:40;64101:12;;;;64136:15;;;;63926:1;63919:9;63890:271;;65984:737;29128:12;;29142:10;29124:29;29112:42;;29203:4;29192:16;;;29186:23;29170:14;;;29163:47;29263:4;29252:16;;;29246:23;29271:18;29242:48;29226:14;;;29219:72;-1:-1:-1;;;;;66384:6:139;66380:55;66375:2;66364:9;66360:18;66353:83;66473:6;66467:3;66456:9;66452:19;66445:35;66517:3;66511;66500:9;66496:19;66489:32;66282:4;66544:62;66601:3;66590:9;66586:19;66578:6;66570;66544:62;:::i;:::-;66655:9;66647:6;66643:22;66637:3;66626:9;66622:19;66615:51;66683:32;66708:6;66700;66683:32;:::i;:::-;66675:40;65984:737;-1:-1:-1;;;;;;;;;65984:737:139:o;66726:517::-;66827:2;66822:3;66819:11;66816:421;;;66863:5;66860:1;66853:16;66907:4;66904:1;66894:18;66977:2;66965:10;66961:19;66958:1;66954:27;66948:4;66944:38;67013:4;67001:10;66998:20;66995:47;;;-1:-1:-1;67036:4:139;66995:47;67091:2;67086:3;67082:12;67079:1;67075:20;67069:4;67065:31;67055:41;;67146:81;67164:2;67157:5;67154:13;67146:81;;;67223:1;67209:16;;67190:1;67179:13;67146:81;;67479:1325;67601:18;67596:3;67593:27;67590:53;;;67623:18;;:::i;:::-;67652:93;67741:3;67701:38;67733:4;67727:11;67701:38;:::i;:::-;67695:4;67652:93;:::i;:::-;67771:1;67796:2;67791:3;67788:11;67813:1;67808:738;;;;68590:1;68607:3;68604:93;;;-1:-1:-1;68663:19:139;;;68650:33;68604:93;67385:66;67376:1;67372:11;;;67368:84;67364:89;67354:100;67460:1;67456:11;;;67351:117;68710:78;;67781:1017;;67808:738;51359:1;51352:14;;;51396:4;51383:18;;-1:-1:-1;;67844:76:139;;;68029:229;68043:7;68040:1;68037:14;68029:229;;;68132:19;;;68119:33;68104:49;;68239:4;68224:20;;;;68192:1;68180:14;;;;68059:12;68029:229;;;68033:3;68286;68277:7;68274:16;68271:219;;;68406:66;68400:3;68394;68391:1;68387:11;68383:21;68379:94;68375:99;68362:9;68357:3;68353:19;68340:33;68336:139;68328:6;68321:155;68271:219;;;68533:1;68527:3;68524:1;68520:11;68516:19;68510:4;68503:33;67781:1017;;67479:1325;;;:::o;68809:361::-;69014:6;69003:9;68996:25;69057:6;69052:2;69041:9;69037:18;69030:34;69100:2;69095;69084:9;69080:18;69073:30;68977:4;69120:44;69160:2;69149:9;69145:18;69137:6;69120:44;:::i;69428:331::-;69533:9;69544;69586:8;69574:10;69571:24;69568:44;;;69608:1;69605;69598:12;69568:44;69637:6;69627:8;69624:20;69621:40;;;69657:1;69654;69647:12;69621:40;-1:-1:-1;;69683:23:139;;;69728:25;;;;;-1:-1:-1;69428:331:139:o;69764:369::-;69922:66;69884:19;;70006:11;;;;70037:1;70029:10;;70026:101;;;70098:1;70094:11;;;;70091:1;70087:19;70083:28;;;70075:37;70071:46;;;;69764:369;-1:-1:-1;;69764:369:139:o;70545:517::-;70632:6;70640;70648;70701:2;70689:9;70680:7;70676:23;70672:32;70669:52;;;70717:1;70714;70707:12;70669:52;70749:9;70743:16;70768:31;70793:5;70768:31;:::i;:::-;70868:2;70853:18;;70847:25;70818:5;;-1:-1:-1;70881:32:139;70847:25;70881:32;:::i;:::-;70984:2;70969:18;;70963:25;70932:7;;-1:-1:-1;70997:33:139;70963:25;70997:33;:::i;71067:315::-;71187:19;;71226:2;71218:11;;71215:161;;;71298:66;71287:2;71283:12;;;71280:1;71276:20;71272:93;71261:105;71067:315;;;;:::o;71387:369::-;71545:66;71507:19;;71629:11;;;;71660:1;71652:10;;71649:101;;;71721:1;71717:11;;;;71714:1;71710:19;71706:28;;;71698:37;71694:46;;;;71387:369;-1:-1:-1;;71387:369:139:o;71922:720::-;72281:3;72270:9;72263:22;72244:4;72308:50;72353:3;72342:9;72338:19;71838:1;71826:14;;71872:10;71865:4;71856:14;;71849:34;71908:2;71899:12;;71761:156;72308:50;72406:9;72398:6;72394:22;72389:2;72378:9;72374:18;72367:50;72434:37;72464:6;71838:1;71826:14;;71872:10;71865:4;71856:14;;71849:34;71908:2;71899:12;;71761:156;72434:37;72426:45;;;-1:-1:-1;;;;;72580:2:139;72572:6;72568:15;72563:2;72552:9;72548:18;72541:43;72632:2;72624:6;72620:15;72615:2;72604:9;72600:18;72593:43;;71922:720;;;;;:::o;72808:::-;73167:3;73156:9;73149:22;73130:4;73194:50;73239:3;73228:9;73224:19;72724:1;72712:14;;72758:10;72751:4;72742:14;;72735:34;72794:2;72785:12;;72647:156;73194:50;73292:9;73284:6;73280:22;73275:2;73264:9;73260:18;73253:50;73320:37;73350:6;72724:1;72712:14;;72758:10;72751:4;72742:14;;72735:34;72794:2;72785:12;;72647:156;73694:720;74053:3;74042:9;74035:22;74016:4;74080:50;74125:3;74114:9;74110:19;73610:1;73598:14;;73644:10;73637:4;73628:14;;73621:34;73680:2;73671:12;;73533:156;74080:50;74178:9;74170:6;74166:22;74161:2;74150:9;74146:18;74139:50;74206:37;74236:6;73610:1;73598:14;;73644:10;73637:4;73628:14;;73621:34;73680:2;73671:12;;73533:156;74580:617;74911:2;74900:9;74893:21;74874:4;74937:49;74982:2;74971:9;74967:18;74496:1;74484:14;;74530:10;74523:4;74514:14;;74507:34;74566:2;74557:12;;74419:156;74937:49;75034:9;75026:6;75022:22;75017:2;75006:9;75002:18;74995:50;75062:37;75092:6;74496:1;74484:14;;74530:10;74523:4;74514:14;;74507:34;74566:2;74557:12;;74419:156;75062:37;75054:45;;;-1:-1:-1;;;;;75139:6:139;75135:55;75130:2;75119:9;75115:18;75108:83;74580:617;;;;:::o;75775:720::-;76134:3;76123:9;76116:22;76097:4;76161:50;76206:3;76195:9;76191:19;75691:1;75679:14;;75725:10;75718:4;75709:14;;75702:34;75761:2;75752:12;;75614:156;76161:50;76259:9;76251:6;76247:22;76242:2;76231:9;76227:18;76220:50;76287:37;76317:6;75691:1;75679:14;;75725:10;75718:4;75709:14;;75702:34;75761:2;75752:12;;75614:156;76661:720;77020:3;77009:9;77002:22;76983:4;77047:50;77092:3;77081:9;77077:19;76577:1;76565:14;;76611:10;76604:4;76595:14;;76588:34;76647:2;76638:12;;76500:156;77047:50;77145:9;77137:6;77133:22;77128:2;77117:9;77113:18;77106:50;77173:37;77203:6;76577:1;76565:14;;76611:10;76604:4;76595:14;;76588:34;76647:2;76638:12;;76500:156;81103:1224;81321:4;81350:2;81390;81379:9;81375:18;81420:2;81409:9;81402:21;81443:6;81478;81472:13;81509:6;81501;81494:22;81535:2;81525:12;;81568:2;81557:9;81553:18;81546:25;;81630:2;81620:6;81617:1;81613:14;81602:9;81598:30;81594:39;81668:2;81660:6;81656:15;81689:1;81699:599;81713:6;81710:1;81707:13;81699:599;;;81778:22;;;81802:66;81774:95;81762:108;;81893:13;;81965:9;;81976:10;81961:26;81946:42;;82035:11;;;82029:18;82049:6;82025:31;82008:15;;;82001:56;82096:11;;82090:18;81929:4;82128:15;;;82121:27;;;82171:47;82202:15;;;82090:18;82171:47;:::i;:::-;82276:12;;;;82161:57;-1:-1:-1;;;82241:15:139;;;;81735:1;81728:9;81699:599;;82332:287;82461:3;82499:6;82493:13;82515:66;82574:6;82569:3;82562:4;82554:6;82550:17;82515:66;:::i;:::-;82597:16;;;;;82332:287;-1:-1:-1;;82332:287:139:o;82624:492::-;82799:3;82837:6;82831:13;82853:66;82912:6;82907:3;82900:4;82892:6;82888:17;82853:66;:::i;:::-;82982:13;;82941:16;;;;83004:70;82982:13;82941:16;83051:4;83039:17;;83004:70;:::i;:::-;83090:20;;82624:492;-1:-1:-1;;;;82624:492:139:o;83531:517::-;83618:6;83626;83634;83687:2;83675:9;83666:7;83662:23;83658:32;83655:52;;;83703:1;83700;83693:12;83655:52;83735:9;83729:16;83754:30;83778:5;83754:30;:::i;:::-;83853:2;83838:18;;83832:25;83803:5;;-1:-1:-1;83866:33:139;83832:25;83866:33;:::i;84699:369::-;84785:6;84793;84801;84854:2;84842:9;84833:7;84829:23;84825:32;84822:52;;;84870:1;84867;84860:12;84822:52;84902:9;84896:16;84921:29;84944:5;84921:29;:::i;:::-;85014:2;84999:18;;84993:25;85058:2;85043:18;;;85037:25;84969:5;;84993:25;;-1:-1:-1;85037:25:139;84699:369;-1:-1:-1;;;84699:369:139:o;85880:312::-;85959:6;85967;86020:2;86008:9;85999:7;85995:23;85991:32;85988:52;;;86036:1;86033;86026:12;85988:52;86068:9;86062:16;86087:31;86112:5;86087:31;:::i;:::-;86182:2;86167:18;;;;86161:25;86137:5;;86161:25;;-1:-1:-1;;;85880:312:139:o;86607:385::-;86686:6;86694;86747:2;86735:9;86726:7;86722:23;86718:32;86715:52;;;86763:1;86760;86753:12;86715:52;86795:9;86789:16;86814:31;86839:5;86814:31;:::i;:::-;86914:2;86899:18;;86893:25;86864:5;;-1:-1:-1;86927:33:139;86893:25;86927:33;:::i;86997:558::-;87094:6;87102;87155:2;87143:9;87134:7;87130:23;87126:32;87123:52;;;87171:1;87168;87161:12;87123:52;87204:9;87198:16;87233:18;87274:2;87266:6;87263:14;87260:34;;;87290:1;87287;87280:12;87260:34;87313:60;87365:7;87356:6;87345:9;87341:22;87313:60;:::i;:::-;87303:70;;87419:2;87408:9;87404:18;87398:25;87382:41;;87448:2;87438:8;87435:16;87432:36;;;87464:1;87461;87454:12;87432:36;;87487:62;87541:7;87530:8;87519:9;87515:24;87487:62;:::i;:::-;87477:72;;;86997:558;;;;;:::o;87853:520::-;87948:6;87956;87964;88017:2;88005:9;87996:7;87992:23;87988:32;87985:52;;;88033:1;88030;88023:12;87985:52;88065:9;88059:16;88084:29;88107:5;88084:29;:::i;:::-;88181:2;88166:18;;88160:25;88132:5;;-1:-1:-1;88208:18:139;88197:30;;88194:50;;;88240:1;88237;88230:12;88194:50;88263:60;88315:7;88306:6;88295:9;88291:22;88263:60;:::i;:::-;88253:70;;;88363:2;88352:9;88348:18;88342:25;88332:35;;87853:520;;;;;:::o;88378:197::-;88446:34;88500:10;;;88512;;;88496:27;;88535:11;;;88532:37;;;88549:18;;:::i;89810:172::-;89877:10;89907;;;89919;;;89903:27;;89942:11;;;89939:37;;;89956:18;;:::i;90508:369::-;90666:66;90628:19;;90750:11;;;;90781:1;90773:10;;90770:101;;;90842:1;90838:11;;;;90835:1;90831:19;90827:28;;;90819:37;90815:46;;;;90508:369;-1:-1:-1;;90508:369:139:o;90882:372::-;91041:66;91003:19;;91125:11;;;;91156:2;91148:11;;91145:103;;;91218:2;91214:12;;;;91211:1;91207:20;91203:29;;;91195:38;91191:47;;;;90882:372;-1:-1:-1;;90882:372:139:o",
+ "linkReferences": {}
+ },
+ "methodIdentifiers": {
+ "ARB_EID()": "5e42c9b2",
+ "BAD_EID()": "0fcaecfe",
+ "DEFAULT_CHANNEL_ID()": "51aa318b",
+ "ETH_EID()": "25996dae",
+ "EVM_COMPUTE_MAP_BPS()": "0afba868",
+ "EVM_COMPUTE_REDUCE_FEE_USD()": "82411c77",
+ "EVM_REQUEST_FEE_USD()": "1766f5a4",
+ "INITIAL_BALANCE()": "14525bce",
+ "IS_TEST()": "fa7626d4",
+ "MAP_REDUCE_COMPUTE_TYPES()": "b76bada5",
+ "NATIVE_TOKEN_PRICE_USD()": "699cbade",
+ "OPTIONS_LZRECEIVE_100k()": "178928d3",
+ "POL_EID()": "1f3280c5",
+ "TOKENS_TO_SEND()": "8c5e9f74",
+ "TREASURY_GAS_CAP()": "baead19c",
+ "TREASURY_GAS_FOR_FEE_CAP()": "b1dcf5c8",
+ "VaultComposerSyncArb()": "90a606f5",
+ "arbEndpoint()": "09c885c9",
+ "arbExecutor()": "677d4175",
+ "assertGuid(bytes,bytes32)": "997cff1b",
+ "assetOFT_arb()": "0c003ff7",
+ "assetOFT_eth()": "536e8d3a",
+ "assetOFT_pol()": "67d53a00",
+ "createEndpoints(uint8,uint8,address[])": "d6d62497",
+ "decodeLzComposeOption(bytes)": "518e8ab0",
+ "decodeLzReadOption(bytes)": "9751ca86",
+ "decodeLzReceiveOption(bytes)": "f93e1d61",
+ "decodeNativeDropOption(bytes)": "b954fdf6",
+ "excludeArtifacts()": "b5508aa9",
+ "excludeContracts()": "e20c9f71",
+ "excludeSelectors()": "b0464fdc",
+ "excludeSenders()": "1ed7831c",
+ "executorValueCap()": "2113ce62",
+ "failed()": "ba414fa6",
+ "getNextInflightPacket(uint16,bytes32)": "7982cf42",
+ "hasPendingPackets(uint16,bytes32)": "5ea0fefe",
+ "lzCompose(bytes,bytes,bytes32,address)": "a29c8984",
+ "lzCompose(uint32,address,bytes,bytes32,address,bytes)": "3bbd6a94",
+ "lzReadReceive(bytes,bytes,bytes)": "0a69faa9",
+ "lzReceive(bytes,bytes)": "ec53eaa0",
+ "msgValueToFail()": "556257df",
+ "msgValueToPass()": "f5e4efb5",
+ "nextExecutorOption(bytes,uint256)": "6e1775e3",
+ "registerEndpoint(address)": "ae6ce400",
+ "schedulePacket(bytes,bytes)": "faed6c58",
+ "setExecutorValueCap(uint128)": "defd9da6",
+ "setUp()": "0a9254e4",
+ "setUpEndpoints(uint8,uint8)": "1cc46525",
+ "setupOApps(bytes,uint8,uint8)": "2a35d250",
+ "shareOFT_arb()": "375591d7",
+ "shareOFT_eth()": "7f2e5936",
+ "shareOFT_pol()": "3cae7b8a",
+ "targetArtifactSelectors()": "66d9a9a0",
+ "targetArtifacts()": "85226c81",
+ "targetContracts()": "3f7286f4",
+ "targetInterfaces()": "2ade3880",
+ "targetSelectors()": "916a17c6",
+ "targetSenders()": "3e5e3c23",
+ "test_depositSend_target_hub()": "9c24cb30",
+ "test_depositSend_target_hub_can_have_dust()": "60416f0c",
+ "test_depositSend_target_not_hub()": "62c54cbe",
+ "test_redeemSend_target_hub()": "7388e272",
+ "test_redeemSend_target_hub_can_have_dust()": "9ea6d64e",
+ "test_redeemSend_target_not_hub()": "034d9421",
+ "test_target_is_hub_reverts_when_msg_value_provided()": "5d0e96e2",
+ "userA()": "deb22e9a",
+ "userB()": "cb1a295f",
+ "validatePacket(bytes,bytes)": "60197889",
+ "vault_arb()": "7a8b5d98",
+ "verifyPackets(uint32,address)": "090852b6",
+ "verifyPackets(uint32,bytes32)": "b752b72a",
+ "verifyPackets(uint32,bytes32,uint256,address,bytes)": "834bd159",
+ "wireOApps(address[])": "703ca254",
+ "wireReadOApps(address[],uint32[])": "65449eb0"
+ },
+ "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Executor_InvalidLzComposeOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReadOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReceiveOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidNativeDropOption\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"optionType\",\"type\":\"uint16\"}],\"name\":\"InvalidOptionType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ARB_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BAD_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_CHANNEL_ID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_COMPUTE_MAP_BPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_COMPUTE_REDUCE_FEE_USD\",\"outputs\":[{\"internalType\":\"uint120\",\"name\":\"\",\"type\":\"uint120\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_REQUEST_FEE_USD\",\"outputs\":[{\"internalType\":\"uint120\",\"name\":\"\",\"type\":\"uint120\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BALANCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAP_REDUCE_COMPUTE_TYPES\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_TOKEN_PRICE_USD\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIONS_LZRECEIVE_100k\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POL_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKENS_TO_SEND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREASURY_GAS_CAP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREASURY_GAS_FOR_FEE_CAP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VaultComposerSyncArb\",\"outputs\":[{\"internalType\":\"contract VaultComposerSync\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbEndpoint\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbExecutor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"}],\"name\":\"assertGuid\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assetOFT_arb\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assetOFT_eth\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assetOFT_pol\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_endpointNum\",\"type\":\"uint8\"},{\"internalType\":\"enum TestHelperOz5.LibraryType\",\"name\":\"_libraryType\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"nativeTokenAddresses\",\"type\":\"address[]\"}],\"name\":\"createEndpoints\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzComposeOption\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzReadOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"size\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzReceiveOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeNativeDropOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executorValueCap\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"getNextInflightPacket\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"packetBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"hasPendingPackets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_composerMsg\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_composer\",\"type\":\"address\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"lzReadReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgValueToFail\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgValueToPass\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_cursor\",\"type\":\"uint256\"}],\"name\":\"nextExecutorOption\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"optionType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"option\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract EndpointV2Mock\",\"name\":\"endpoint\",\"type\":\"address\"}],\"name\":\"registerEndpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"schedulePacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_valueCap\",\"type\":\"uint128\"}],\"name\":\"setExecutorValueCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_endpointNum\",\"type\":\"uint8\"},{\"internalType\":\"enum TestHelperOz5.LibraryType\",\"name\":\"_libraryType\",\"type\":\"uint8\"}],\"name\":\"setUpEndpoints\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_oappCreationCode\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"_startEid\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"_oappNum\",\"type\":\"uint8\"}],\"name\":\"setupOApps\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shareOFT_arb\",\"outputs\":[{\"internalType\":\"contract MockOFTAdapter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shareOFT_eth\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shareOFT_pol\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_depositSend_target_hub\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_depositSend_target_hub_can_have_dust\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_depositSend_target_not_hub\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_redeemSend_target_hub\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_redeemSend_target_hub_can_have_dust\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_redeemSend_target_not_hub\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_target_is_hub_reverts_when_msg_value_provided\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"userA\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"userB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"validatePacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault_arb\",\"outputs\":[{\"internalType\":\"contract MockVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_dstAddress\",\"type\":\"address\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_packetAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_composer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"}],\"name\":\"wireOApps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"channels\",\"type\":\"uint32[]\"}],\"name\":\"wireReadOApps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{\"createEndpoints(uint8,uint8,address[])\":{\"params\":{\"_endpointNum\":\"The number of endpoints to create.\",\"_libraryType\":\"The type of message library to use (UltraLightNode or SimpleMessageLib).\"}},\"schedulePacket(bytes,bytes)\":{\"details\":\"Adds the packet to the front of the queue and stores its options for later retrieval.\",\"params\":{\"_options\":\"The options associated with the packet, used during delivery.\",\"_packetBytes\":\"The packet data to be scheduled.\"}},\"setExecutorValueCap(uint128)\":{\"details\":\"set executorValueCap if more than 0.1 ether is necessarythis must be called prior to setUpEndpoints() if the value is to be used\",\"params\":{\"_valueCap\":\"amount executor can pass as msg.value to lzReceive()\"}},\"setUp()\":{\"details\":\"Initializes test environment setup, to be overridden by specific tests.\"},\"setupOApps(bytes,uint8,uint8)\":{\"params\":{\"_oappCreationCode\":\"The bytecode for creating OApp contracts.\",\"_oappNum\":\"The number of OApps to set up.\",\"_startEid\":\"The starting endpoint ID for OApp setup.\"},\"returns\":{\"oapps\":\"An array of addresses for the deployed OApps.\"}},\"verifyPackets(uint32,address)\":{\"details\":\"verify packets to destination chain's OApp address.\",\"params\":{\"_dstAddress\":\"The destination address.\",\"_dstEid\":\"The destination endpoint ID.\"}},\"verifyPackets(uint32,bytes32)\":{\"details\":\"Calls an overloaded version of verifyPackets with default values for packet amount and composer address.\",\"params\":{\"_dstAddress\":\"The destination address in bytes32 format.\",\"_dstEid\":\"The destination chain's endpoint ID.\"}},\"verifyPackets(uint32,bytes32,uint256,address,bytes)\":{\"details\":\"dst UA receive/execute packetswill NOT work calling this directly with composer IF the composed payload is different from the lzReceive msg payload\"},\"wireOApps(address[])\":{\"details\":\"Sets each OApp as a peer to every other OApp in the provided array, except itself.\",\"params\":{\"oapps\":\"An array of addresses representing the deployed OApp instances.\"}},\"wireReadOApps(address[],uint32[])\":{\"details\":\"Sets each OApp to read from the provided channels.\",\"params\":{\"channels\":\"An array of channel IDs to set as read channels.\",\"oapps\":\"An array of addresses representing the deployed OApp instances.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"createEndpoints(uint8,uint8,address[])\":{\"notice\":\"Sets up endpoints for testing.\"},\"schedulePacket(bytes,bytes)\":{\"notice\":\"Schedules a packet for delivery, storing it in the packets queue.\"},\"setupOApps(bytes,uint8,uint8)\":{\"notice\":\"Sets up mock OApp contracts for testing.\"},\"verifyPackets(uint32,bytes32)\":{\"notice\":\"Verifies and processes packets destined for a specific chain and user address.\"},\"wireOApps(address[])\":{\"notice\":\"Configures the peers between multiple OApp instances.\"},\"wireReadOApps(address[],uint32[])\":{\"notice\":\"Configures the read channels for multiple OApp instances.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/vault-sync/VaultComposerSync_ProxySend.t.sol\":\"VaultComposerSyncProxySendTest\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/\"]},\"sources\":{\"contracts/VaultComposerSync.sol\":{\"keccak256\":\"0xbbba257858c39e33201067897be32e7e2dac636726498e4f394115c2bc3bf93b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ff9ce61a8cd70dfea73b632241c852a040c0ae2c9470c7add66571cc32e0246\",\"dweb:/ipfs/QmauMyGN1mGiv9pLEtnZbXjpd8J49AzV6W8bSLQ9Uf2LEH\"]},\"contracts/interfaces/IVaultComposerSync.sol\":{\"keccak256\":\"0x86597121d142cdd98d7399abfe1109ab4052d570056758f71193b8a614c289cd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bcfb48d7d685e5e4d46dc16e3a74d18341c489ea4efcab2e593ec3b3f3cca48\",\"dweb:/ipfs/QmQG5PGYqVDrxBeGy7vcYKkk3jjqt3mLJ9kJpjwcRQzWZu\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":{\"keccak256\":\"0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2\",\"dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol\":{\"keccak256\":\"0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497\",\"dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":{\"keccak256\":\"0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79\",\"dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol\":{\"keccak256\":\"0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2\",\"dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":{\"keccak256\":\"0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc\",\"dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":{\"keccak256\":\"0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc\",\"dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":{\"keccak256\":\"0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899\",\"dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol\":{\"keccak256\":\"0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8\",\"dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":{\"keccak256\":\"0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691\",\"dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol\":{\"keccak256\":\"0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda\",\"dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol\":{\"keccak256\":\"0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d\",\"dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol\":{\"keccak256\":\"0xd40d91e8173cdb5bb821b4594f806b99344d5fd605bc6f2cf0fb21d5ab2500e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1278c26c077e3b1ee6a5f25385a3c00eaecc0efd7b622facac5569d1e47ac42e\",\"dweb:/ipfs/QmQZyrJV7UoUfdY1KYNJ2ru27Khtg4Z8v8XE9KNHFtsvA4\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol\":{\"keccak256\":\"0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7\",\"dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFTAdapter.sol\":{\"keccak256\":\"0xd65041c093c19792b66369a04b4aea5c988c32e2cf4ab952a442315426407fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1cc68778a40a45397f1ffcdba25920523a75d321da8852f7688f50885bbd08\",\"dweb:/ipfs/QmRUL7Q6dNxbc1Mz1hXgUz7eyCZDpt9eJD8BK1EMaJ9Yoz\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol\":{\"keccak256\":\"0xdda89798c66928bba9e0fa44b3edf4710ff15cf46edadcf3e15c92d78fcc9ca8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef0cf33304a4ae343e83e9c11bafb2516f2b256c290cba3e096455ff237fa78c\",\"dweb:/ipfs/QmQph8KfKf9o7JNoas4BmNQ9qL9whZsrchouPiUp7o4YFm\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0xc60c7b4374b3d89f33b8de982f463c92374a8548800c816fe776f0ec76351fb0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9e2ae9efc2a93373e822b148b3a3b50e3562c8c317f2e71d73cf4a11dede9d15\",\"dweb:/ipfs/QmahCbqvqEcWLJpqE6EbHHTuSbnGWyo35ZBVqoyKv18BSF\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":{\"keccak256\":\"0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973\",\"dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":{\"keccak256\":\"0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f\",\"dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol\":{\"keccak256\":\"0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688\",\"dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol\":{\"keccak256\":\"0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab\",\"dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol\":{\"keccak256\":\"0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b\",\"dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":{\"keccak256\":\"0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045\",\"dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol\":{\"keccak256\":\"0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff\",\"dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol\":{\"keccak256\":\"0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73\",\"dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol\":{\"keccak256\":\"0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f\",\"dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol\":{\"keccak256\":\"0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec\",\"dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol\":{\"keccak256\":\"0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0\",\"dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol\":{\"keccak256\":\"0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4\",\"dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol\":{\"keccak256\":\"0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574\",\"dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol\":{\"keccak256\":\"0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991\",\"dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":{\"keccak256\":\"0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1\",\"dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x399d0b11c8e4e902b6c95c21c187968e62e1bd2a86b8f6dad882c399a05404c1\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://82618dd9135c30870716bb9561f238b68b0c46cff6c7311a3d4b1c35a541c633\",\"dweb:/ipfs/QmSw3gEwXthgoDAqE3gemC5JfQnBnRBTFGEJaDNBj7JwxH\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]},\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09\",\"dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol\":{\"keccak256\":\"0x51aabf26e9682335ecf33b708cbcdf26e42bdc2f0a2e6fc09d6640219a0e00f6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9423a1603d9145e142d50aa0f9a31199731733535501a7d3918d36b1deed78f2\",\"dweb:/ipfs/QmQAArNnrZVfKrbY3vGer2G6775HozDmGrsovtz5NFqGrP\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol\":{\"keccak256\":\"0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb\",\"dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3\"]},\"test/mocks/MockOFT.sol\":{\"keccak256\":\"0x6c2143557accb95c3be9a0942cb8bca877ef94d3ec34f51112fe744a72dad047\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://437d64f216e278082bd978ccbb9fc64a27707c564678a08a827df0741ec63d44\",\"dweb:/ipfs/QmagfMbuJuJV7LLXrxAoftExfETeFcszkSZFvYJ1T2u9kJ\"]},\"test/mocks/MockVault.sol\":{\"keccak256\":\"0xd4a6b9e7c49512a7ed3548781d45d9082b3ecd25dd635873926c39184d485790\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://70acbb9b707cc17ee6cd36d71e21c7a8ab793a700c152c77a9babf2a1836aeca\",\"dweb:/ipfs/Qmef5Fs6DD5we9Qr3SQnYJUpne726JdpkGUqrq9BFbJgpn\"]},\"test/vault-sync/VaultComposerSync_Base.t.sol\":{\"keccak256\":\"0x31b5b3e30e1869648bb806871a9713d85ced6233448dfc9c0e6f59a31140d536\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6b43dc68a03a7305c8f5049b1080dd1387edbd99ea0de6e9e009471516aaa982\",\"dweb:/ipfs/QmVj6GGCCe2QvFf33dwYxHNWqLAdXh4aVnyacHBT8v4gRW\"]},\"test/vault-sync/VaultComposerSync_ProxySend.t.sol\":{\"keccak256\":\"0xc7d92b75a8e95de6e9b97ec836e8fd7a30b9ba7e8acfdc324e3da8e4f0b202bf\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c16c30117b3e62fd8ccc01f81aba485972b8f84e8ef53dd24328fe1695c269ce\",\"dweb:/ipfs/QmYvkAgRFGortejFGpcuu2tezALJ1ZCq9pXKxzTtmnREwg\"]}},\"version\":1}",
+ "metadata": {
+ "compiler": { "version": "0.8.22+commit.4fc1097e" },
+ "language": "Solidity",
+ "output": {
+ "abi": [
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidLzComposeOption"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidLzReadOption"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidLzReceiveOption"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidNativeDropOption"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint16", "name": "optionType", "type": "uint16" }
+ ],
+ "type": "error",
+ "name": "InvalidOptionType"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint8", "name": "bits", "type": "uint8" },
+ { "internalType": "uint256", "name": "value", "type": "uint256" }
+ ],
+ "type": "error",
+ "name": "SafeCastOverflowedUintDowncast"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_address",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "int256[]",
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "val",
+ "type": "address[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_bytes",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_bytes32",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "int256",
+ "name": "",
+ "type": "int256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_int",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "address",
+ "name": "val",
+ "type": "address",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_address",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "int256[]",
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "address[]",
+ "name": "val",
+ "type": "address[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "bytes",
+ "name": "val",
+ "type": "bytes",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_bytes",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "bytes32",
+ "name": "val",
+ "type": "bytes32",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_bytes32",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "int256",
+ "name": "val",
+ "type": "int256",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_decimal_int",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "val",
+ "type": "uint256",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_decimal_uint",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "int256",
+ "name": "val",
+ "type": "int256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_int",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "string",
+ "name": "val",
+ "type": "string",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_string",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "val",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_uint",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_string",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_uint",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "logs",
+ "anonymous": false
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "ARB_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "BAD_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "DEFAULT_CHANNEL_ID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "ETH_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "EVM_COMPUTE_MAP_BPS",
+ "outputs": [
+ { "internalType": "uint16", "name": "", "type": "uint16" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "EVM_COMPUTE_REDUCE_FEE_USD",
+ "outputs": [
+ { "internalType": "uint120", "name": "", "type": "uint120" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "EVM_REQUEST_FEE_USD",
+ "outputs": [
+ { "internalType": "uint120", "name": "", "type": "uint120" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "INITIAL_BALANCE",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "IS_TEST",
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "MAP_REDUCE_COMPUTE_TYPES",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "NATIVE_TOKEN_PRICE_USD",
+ "outputs": [
+ { "internalType": "uint128", "name": "", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "OPTIONS_LZRECEIVE_100k",
+ "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "POL_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "TOKENS_TO_SEND",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "TREASURY_GAS_CAP",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "TREASURY_GAS_FOR_FEE_CAP",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "VaultComposerSyncArb",
+ "outputs": [
+ {
+ "internalType": "contract VaultComposerSync",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "arbEndpoint",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "arbExecutor",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "packetBytes", "type": "bytes" },
+ { "internalType": "bytes32", "name": "guid", "type": "bytes32" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "assertGuid"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "assetOFT_arb",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "assetOFT_eth",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "assetOFT_pol",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint8",
+ "name": "_endpointNum",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum TestHelperOz5.LibraryType",
+ "name": "_libraryType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address[]",
+ "name": "nativeTokenAddresses",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "createEndpoints"
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeLzComposeOption",
+ "outputs": [
+ { "internalType": "uint16", "name": "index", "type": "uint16" },
+ { "internalType": "uint128", "name": "gas", "type": "uint128" },
+ { "internalType": "uint128", "name": "value", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeLzReadOption",
+ "outputs": [
+ { "internalType": "uint128", "name": "gas", "type": "uint128" },
+ { "internalType": "uint32", "name": "size", "type": "uint32" },
+ { "internalType": "uint128", "name": "value", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeLzReceiveOption",
+ "outputs": [
+ { "internalType": "uint128", "name": "gas", "type": "uint128" },
+ { "internalType": "uint128", "name": "value", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeNativeDropOption",
+ "outputs": [
+ { "internalType": "uint128", "name": "amount", "type": "uint128" },
+ { "internalType": "bytes32", "name": "receiver", "type": "bytes32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeArtifacts",
+ "outputs": [
+ {
+ "internalType": "string[]",
+ "name": "excludedArtifacts_",
+ "type": "string[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeContracts",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "excludedContracts_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeSelectors",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "name": "excludedSelectors_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeSenders",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "excludedSenders_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "executorValueCap",
+ "outputs": [
+ { "internalType": "uint128", "name": "", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "failed",
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint16", "name": "_dstEid", "type": "uint16" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "getNextInflightPacket",
+ "outputs": [
+ { "internalType": "bytes", "name": "packetBytes", "type": "bytes" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint16", "name": "_dstEid", "type": "uint16" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "hasPendingPackets",
+ "outputs": [
+ { "internalType": "bool", "name": "flag", "type": "bool" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ { "internalType": "address", "name": "_from", "type": "address" },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ { "internalType": "bytes32", "name": "_guid", "type": "bytes32" },
+ { "internalType": "address", "name": "_to", "type": "address" },
+ { "internalType": "bytes", "name": "_composerMsg", "type": "bytes" }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzCompose"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ { "internalType": "bytes32", "name": "_guid", "type": "bytes32" },
+ {
+ "internalType": "address",
+ "name": "_composer",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzCompose"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ {
+ "internalType": "bytes",
+ "name": "_resolvedPayload",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzReadReceive"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzReceive"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "msgValueToFail",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "msgValueToPass",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ { "internalType": "uint256", "name": "_cursor", "type": "uint256" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "nextExecutorOption",
+ "outputs": [
+ { "internalType": "uint8", "name": "optionType", "type": "uint8" },
+ { "internalType": "bytes", "name": "option", "type": "bytes" },
+ { "internalType": "uint256", "name": "cursor", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract EndpointV2Mock",
+ "name": "endpoint",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "registerEndpoint"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "schedulePacket"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint128",
+ "name": "_valueCap",
+ "type": "uint128"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setExecutorValueCap"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setUp"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint8",
+ "name": "_endpointNum",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum TestHelperOz5.LibraryType",
+ "name": "_libraryType",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setUpEndpoints"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_oappCreationCode",
+ "type": "bytes"
+ },
+ { "internalType": "uint8", "name": "_startEid", "type": "uint8" },
+ { "internalType": "uint8", "name": "_oappNum", "type": "uint8" }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setupOApps",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "oapps",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "shareOFT_arb",
+ "outputs": [
+ {
+ "internalType": "contract MockOFTAdapter",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "shareOFT_eth",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "shareOFT_pol",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetArtifactSelectors",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzArtifactSelector[]",
+ "name": "targetedArtifactSelectors_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "string",
+ "name": "artifact",
+ "type": "string"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetArtifacts",
+ "outputs": [
+ {
+ "internalType": "string[]",
+ "name": "targetedArtifacts_",
+ "type": "string[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetContracts",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "targetedContracts_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetInterfaces",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzInterface[]",
+ "name": "targetedInterfaces_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "string[]",
+ "name": "artifacts",
+ "type": "string[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetSelectors",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "name": "targetedSelectors_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetSenders",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "targetedSenders_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_depositSend_target_hub"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_depositSend_target_hub_can_have_dust"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_depositSend_target_not_hub"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_redeemSend_target_hub"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_redeemSend_target_hub_can_have_dust"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_redeemSend_target_not_hub"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_target_is_hub_reverts_when_msg_value_provided"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "userA",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "userB",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_resolvedPayload",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "validatePacket"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "vault_arb",
+ "outputs": [
+ {
+ "internalType": "contract MockVault",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ {
+ "internalType": "address",
+ "name": "_dstAddress",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "verifyPackets"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_packetAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_composer",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_resolvedPayload",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "verifyPackets"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "verifyPackets"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "oapps",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "wireOApps"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "oapps",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint32[]",
+ "name": "channels",
+ "type": "uint32[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "wireReadOApps"
+ },
+ { "inputs": [], "stateMutability": "payable", "type": "receive" }
+ ],
+ "devdoc": {
+ "kind": "dev",
+ "methods": {
+ "createEndpoints(uint8,uint8,address[])": {
+ "params": {
+ "_endpointNum": "The number of endpoints to create.",
+ "_libraryType": "The type of message library to use (UltraLightNode or SimpleMessageLib)."
+ }
+ },
+ "schedulePacket(bytes,bytes)": {
+ "details": "Adds the packet to the front of the queue and stores its options for later retrieval.",
+ "params": {
+ "_options": "The options associated with the packet, used during delivery.",
+ "_packetBytes": "The packet data to be scheduled."
+ }
+ },
+ "setExecutorValueCap(uint128)": {
+ "details": "set executorValueCap if more than 0.1 ether is necessarythis must be called prior to setUpEndpoints() if the value is to be used",
+ "params": {
+ "_valueCap": "amount executor can pass as msg.value to lzReceive()"
+ }
+ },
+ "setUp()": {
+ "details": "Initializes test environment setup, to be overridden by specific tests."
+ },
+ "setupOApps(bytes,uint8,uint8)": {
+ "params": {
+ "_oappCreationCode": "The bytecode for creating OApp contracts.",
+ "_oappNum": "The number of OApps to set up.",
+ "_startEid": "The starting endpoint ID for OApp setup."
+ },
+ "returns": {
+ "oapps": "An array of addresses for the deployed OApps."
+ }
+ },
+ "verifyPackets(uint32,address)": {
+ "details": "verify packets to destination chain's OApp address.",
+ "params": {
+ "_dstAddress": "The destination address.",
+ "_dstEid": "The destination endpoint ID."
+ }
+ },
+ "verifyPackets(uint32,bytes32)": {
+ "details": "Calls an overloaded version of verifyPackets with default values for packet amount and composer address.",
+ "params": {
+ "_dstAddress": "The destination address in bytes32 format.",
+ "_dstEid": "The destination chain's endpoint ID."
+ }
+ },
+ "verifyPackets(uint32,bytes32,uint256,address,bytes)": {
+ "details": "dst UA receive/execute packetswill NOT work calling this directly with composer IF the composed payload is different from the lzReceive msg payload"
+ },
+ "wireOApps(address[])": {
+ "details": "Sets each OApp as a peer to every other OApp in the provided array, except itself.",
+ "params": {
+ "oapps": "An array of addresses representing the deployed OApp instances."
+ }
+ },
+ "wireReadOApps(address[],uint32[])": {
+ "details": "Sets each OApp to read from the provided channels.",
+ "params": {
+ "channels": "An array of channel IDs to set as read channels.",
+ "oapps": "An array of addresses representing the deployed OApp instances."
+ }
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {
+ "createEndpoints(uint8,uint8,address[])": {
+ "notice": "Sets up endpoints for testing."
+ },
+ "schedulePacket(bytes,bytes)": {
+ "notice": "Schedules a packet for delivery, storing it in the packets queue."
+ },
+ "setupOApps(bytes,uint8,uint8)": {
+ "notice": "Sets up mock OApp contracts for testing."
+ },
+ "verifyPackets(uint32,bytes32)": {
+ "notice": "Verifies and processes packets destined for a specific chain and user address."
+ },
+ "wireOApps(address[])": {
+ "notice": "Configures the peers between multiple OApp instances."
+ },
+ "wireReadOApps(address[],uint32[])": {
+ "notice": "Configures the read channels for multiple OApp instances."
+ }
+ },
+ "version": 1
+ }
+ },
+ "settings": {
+ "remappings": [
+ "@layerzerolabs/=node_modules/@layerzerolabs/",
+ "@openzeppelin/=node_modules/@openzeppelin/",
+ "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/",
+ "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/",
+ "solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/"
+ ],
+ "optimizer": { "enabled": true, "runs": 20000 },
+ "metadata": { "bytecodeHash": "ipfs" },
+ "compilationTarget": {
+ "test/vault-sync/VaultComposerSync_ProxySend.t.sol": "VaultComposerSyncProxySendTest"
+ },
+ "evmVersion": "shanghai",
+ "libraries": {}
+ },
+ "sources": {
+ "contracts/VaultComposerSync.sol": {
+ "keccak256": "0xbbba257858c39e33201067897be32e7e2dac636726498e4f394115c2bc3bf93b",
+ "urls": [
+ "bzz-raw://7ff9ce61a8cd70dfea73b632241c852a040c0ae2c9470c7add66571cc32e0246",
+ "dweb:/ipfs/QmauMyGN1mGiv9pLEtnZbXjpd8J49AzV6W8bSLQ9Uf2LEH"
+ ],
+ "license": "MIT"
+ },
+ "contracts/interfaces/IVaultComposerSync.sol": {
+ "keccak256": "0x86597121d142cdd98d7399abfe1109ab4052d570056758f71193b8a614c289cd",
+ "urls": [
+ "bzz-raw://0bcfb48d7d685e5e4d46dc16e3a74d18341c489ea4efcab2e593ec3b3f3cca48",
+ "dweb:/ipfs/QmQG5PGYqVDrxBeGy7vcYKkk3jjqt3mLJ9kJpjwcRQzWZu"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": {
+ "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1",
+ "urls": [
+ "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9",
+ "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": {
+ "keccak256": "0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9",
+ "urls": [
+ "bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2",
+ "dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": {
+ "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1",
+ "urls": [
+ "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4",
+ "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": {
+ "keccak256": "0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e",
+ "urls": [
+ "bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497",
+ "dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": {
+ "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af",
+ "urls": [
+ "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696",
+ "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": {
+ "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc",
+ "urls": [
+ "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d",
+ "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": {
+ "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347",
+ "urls": [
+ "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4",
+ "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": {
+ "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc",
+ "urls": [
+ "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8",
+ "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": {
+ "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657",
+ "urls": [
+ "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab",
+ "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": {
+ "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345",
+ "urls": [
+ "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5",
+ "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": {
+ "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1",
+ "urls": [
+ "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534",
+ "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": {
+ "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c",
+ "urls": [
+ "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb",
+ "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": {
+ "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d",
+ "urls": [
+ "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89",
+ "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh"
+ ],
+ "license": "MIT OR Apache-2.0"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": {
+ "keccak256": "0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44",
+ "urls": [
+ "bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79",
+ "dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": {
+ "keccak256": "0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5",
+ "urls": [
+ "bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2",
+ "dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": {
+ "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3",
+ "urls": [
+ "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4",
+ "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": {
+ "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284",
+ "urls": [
+ "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c",
+ "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": {
+ "keccak256": "0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9",
+ "urls": [
+ "bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc",
+ "dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": {
+ "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b",
+ "urls": [
+ "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3",
+ "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": {
+ "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8",
+ "urls": [
+ "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5",
+ "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": {
+ "keccak256": "0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91",
+ "urls": [
+ "bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc",
+ "dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": {
+ "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35",
+ "urls": [
+ "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141",
+ "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": {
+ "keccak256": "0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda",
+ "urls": [
+ "bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899",
+ "dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": {
+ "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a",
+ "urls": [
+ "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9",
+ "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": {
+ "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27",
+ "urls": [
+ "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850",
+ "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": {
+ "keccak256": "0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3",
+ "urls": [
+ "bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8",
+ "dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": {
+ "keccak256": "0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f",
+ "urls": [
+ "bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691",
+ "dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": {
+ "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a",
+ "urls": [
+ "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241",
+ "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": {
+ "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73",
+ "urls": [
+ "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c",
+ "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": {
+ "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1",
+ "urls": [
+ "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a",
+ "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": {
+ "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420",
+ "urls": [
+ "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54",
+ "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": {
+ "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49",
+ "urls": [
+ "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf",
+ "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": {
+ "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3",
+ "urls": [
+ "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083",
+ "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": {
+ "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0",
+ "urls": [
+ "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933",
+ "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": {
+ "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c",
+ "urls": [
+ "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0",
+ "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": {
+ "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc",
+ "urls": [
+ "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b",
+ "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": {
+ "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972",
+ "urls": [
+ "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927",
+ "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": {
+ "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901",
+ "urls": [
+ "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d",
+ "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": {
+ "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e",
+ "urls": [
+ "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6",
+ "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": {
+ "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625",
+ "urls": [
+ "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97",
+ "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": {
+ "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb",
+ "urls": [
+ "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1",
+ "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": {
+ "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875",
+ "urls": [
+ "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d",
+ "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": {
+ "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7",
+ "urls": [
+ "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24",
+ "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": {
+ "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5",
+ "urls": [
+ "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b",
+ "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": {
+ "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a",
+ "urls": [
+ "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0",
+ "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": {
+ "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9",
+ "urls": [
+ "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f",
+ "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": {
+ "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9",
+ "urls": [
+ "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f",
+ "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": {
+ "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28",
+ "urls": [
+ "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2",
+ "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": {
+ "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680",
+ "urls": [
+ "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09",
+ "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": {
+ "keccak256": "0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22",
+ "urls": [
+ "bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda",
+ "dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa"
+ ],
+ "license": "BUSL-1.1"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": {
+ "keccak256": "0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5",
+ "urls": [
+ "bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28",
+ "dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": {
+ "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc",
+ "urls": [
+ "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0",
+ "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": {
+ "keccak256": "0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b",
+ "urls": [
+ "bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075",
+ "dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": {
+ "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20",
+ "urls": [
+ "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2",
+ "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol": {
+ "keccak256": "0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae",
+ "urls": [
+ "bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d",
+ "dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": {
+ "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58",
+ "urls": [
+ "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd",
+ "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": {
+ "keccak256": "0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c",
+ "urls": [
+ "bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e",
+ "dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": {
+ "keccak256": "0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461",
+ "urls": [
+ "bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc",
+ "dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": {
+ "keccak256": "0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d",
+ "urls": [
+ "bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2",
+ "dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": {
+ "keccak256": "0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01",
+ "urls": [
+ "bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af",
+ "dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol": {
+ "keccak256": "0xd40d91e8173cdb5bb821b4594f806b99344d5fd605bc6f2cf0fb21d5ab2500e3",
+ "urls": [
+ "bzz-raw://1278c26c077e3b1ee6a5f25385a3c00eaecc0efd7b622facac5569d1e47ac42e",
+ "dweb:/ipfs/QmQZyrJV7UoUfdY1KYNJ2ru27Khtg4Z8v8XE9KNHFtsvA4"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": {
+ "keccak256": "0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750",
+ "urls": [
+ "bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82",
+ "dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": {
+ "keccak256": "0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2",
+ "urls": [
+ "bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a",
+ "dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": {
+ "keccak256": "0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84",
+ "urls": [
+ "bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e",
+ "dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": {
+ "keccak256": "0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6",
+ "urls": [
+ "bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc",
+ "dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol": {
+ "keccak256": "0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a",
+ "urls": [
+ "bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7",
+ "dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/OFTAdapter.sol": {
+ "keccak256": "0xd65041c093c19792b66369a04b4aea5c988c32e2cf4ab952a442315426407fd0",
+ "urls": [
+ "bzz-raw://1f1cc68778a40a45397f1ffcdba25920523a75d321da8852f7688f50885bbd08",
+ "dweb:/ipfs/QmRUL7Q6dNxbc1Mz1hXgUz7eyCZDpt9eJD8BK1EMaJ9Yoz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol": {
+ "keccak256": "0xdda89798c66928bba9e0fa44b3edf4710ff15cf46edadcf3e15c92d78fcc9ca8",
+ "urls": [
+ "bzz-raw://ef0cf33304a4ae343e83e9c11bafb2516f2b256c290cba3e096455ff237fa78c",
+ "dweb:/ipfs/QmQph8KfKf9o7JNoas4BmNQ9qL9whZsrchouPiUp7o4YFm"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": {
+ "keccak256": "0xc60c7b4374b3d89f33b8de982f463c92374a8548800c816fe776f0ec76351fb0",
+ "urls": [
+ "bzz-raw://9e2ae9efc2a93373e822b148b3a3b50e3562c8c317f2e71d73cf4a11dede9d15",
+ "dweb:/ipfs/QmahCbqvqEcWLJpqE6EbHHTuSbnGWyo35ZBVqoyKv18BSF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": {
+ "keccak256": "0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5",
+ "urls": [
+ "bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e",
+ "dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": {
+ "keccak256": "0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b",
+ "urls": [
+ "bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258",
+ "dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": {
+ "keccak256": "0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0",
+ "urls": [
+ "bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973",
+ "dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q"
+ ],
+ "license": "UNLICENSED"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": {
+ "keccak256": "0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63",
+ "urls": [
+ "bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f",
+ "dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq"
+ ],
+ "license": "UNLICENSED"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": {
+ "keccak256": "0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1",
+ "urls": [
+ "bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688",
+ "dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol": {
+ "keccak256": "0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f",
+ "urls": [
+ "bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab",
+ "dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": {
+ "keccak256": "0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9",
+ "urls": [
+ "bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b",
+ "dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": {
+ "keccak256": "0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff",
+ "urls": [
+ "bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045",
+ "dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": {
+ "keccak256": "0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01",
+ "urls": [
+ "bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff",
+ "dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": {
+ "keccak256": "0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f",
+ "urls": [
+ "bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73",
+ "dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": {
+ "keccak256": "0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830",
+ "urls": [
+ "bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f",
+ "dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": {
+ "keccak256": "0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44",
+ "urls": [
+ "bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec",
+ "dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol": {
+ "keccak256": "0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc",
+ "urls": [
+ "bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0",
+ "dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": {
+ "keccak256": "0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121",
+ "urls": [
+ "bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4",
+ "dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol": {
+ "keccak256": "0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348",
+ "urls": [
+ "bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574",
+ "dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol": {
+ "keccak256": "0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9",
+ "urls": [
+ "bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991",
+ "dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": {
+ "keccak256": "0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97",
+ "urls": [
+ "bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1",
+ "dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": {
+ "keccak256": "0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd",
+ "urls": [
+ "bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d",
+ "dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": {
+ "keccak256": "0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270",
+ "urls": [
+ "bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe",
+ "dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": {
+ "keccak256": "0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e",
+ "urls": [
+ "bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351",
+ "dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": {
+ "keccak256": "0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746",
+ "urls": [
+ "bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41",
+ "dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdConstants.sol": {
+ "keccak256": "0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534",
+ "urls": [
+ "bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc",
+ "dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": {
+ "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77",
+ "urls": [
+ "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6",
+ "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": {
+ "keccak256": "0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d",
+ "urls": [
+ "bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391",
+ "dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": {
+ "keccak256": "0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500",
+ "urls": [
+ "bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974",
+ "dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": {
+ "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2",
+ "urls": [
+ "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92",
+ "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": {
+ "keccak256": "0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc",
+ "urls": [
+ "bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57",
+ "dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": {
+ "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d",
+ "urls": [
+ "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8",
+ "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdToml.sol": {
+ "keccak256": "0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861",
+ "urls": [
+ "bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3",
+ "dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": {
+ "keccak256": "0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737",
+ "urls": [
+ "bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138",
+ "dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": {
+ "keccak256": "0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c",
+ "urls": [
+ "bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4",
+ "dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": {
+ "keccak256": "0x399d0b11c8e4e902b6c95c21c187968e62e1bd2a86b8f6dad882c399a05404c1",
+ "urls": [
+ "bzz-raw://82618dd9135c30870716bb9561f238b68b0c46cff6c7311a3d4b1c35a541c633",
+ "dweb:/ipfs/QmSw3gEwXthgoDAqE3gemC5JfQnBnRBTFGEJaDNBj7JwxH"
+ ],
+ "license": "MIT OR Apache-2.0"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": {
+ "keccak256": "0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5",
+ "urls": [
+ "bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57",
+ "dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": {
+ "keccak256": "0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f",
+ "urls": [
+ "bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d",
+ "dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": {
+ "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a",
+ "urls": [
+ "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0",
+ "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": {
+ "keccak256": "0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11",
+ "urls": [
+ "bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab",
+ "dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/BytesLib.sol": {
+ "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a",
+ "urls": [
+ "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535",
+ "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq"
+ ],
+ "license": "Unlicense"
+ },
+ "node_modules/@openzeppelin/contracts/access/AccessControl.sol": {
+ "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308",
+ "urls": [
+ "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80",
+ "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": {
+ "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606",
+ "urls": [
+ "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1",
+ "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/access/Ownable.sol": {
+ "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
+ "urls": [
+ "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
+ "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": {
+ "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7",
+ "urls": [
+ "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b",
+ "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": {
+ "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724",
+ "urls": [
+ "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a",
+ "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": {
+ "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c",
+ "urls": [
+ "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba",
+ "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol": {
+ "keccak256": "0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17",
+ "urls": [
+ "bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1",
+ "dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
+ "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b",
+ "urls": [
+ "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b",
+ "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": {
+ "keccak256": "0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31",
+ "urls": [
+ "bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09",
+ "dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": {
+ "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7",
+ "urls": [
+ "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db",
+ "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol": {
+ "keccak256": "0x51aabf26e9682335ecf33b708cbcdf26e42bdc2f0a2e6fc09d6640219a0e00f6",
+ "urls": [
+ "bzz-raw://9423a1603d9145e142d50aa0f9a31199731733535501a7d3918d36b1deed78f2",
+ "dweb:/ipfs/QmQAArNnrZVfKrbY3vGer2G6775HozDmGrsovtz5NFqGrP"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
+ "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330",
+ "urls": [
+ "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf",
+ "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
+ "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310",
+ "urls": [
+ "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862",
+ "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Address.sol": {
+ "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5",
+ "urls": [
+ "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23",
+ "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Context.sol": {
+ "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
+ "urls": [
+ "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
+ "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Errors.sol": {
+ "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123",
+ "urls": [
+ "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf",
+ "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Panic.sol": {
+ "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a",
+ "urls": [
+ "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a",
+ "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Pausable.sol": {
+ "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd",
+ "urls": [
+ "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc",
+ "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": {
+ "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3",
+ "urls": [
+ "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a",
+ "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": {
+ "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84",
+ "urls": [
+ "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9",
+ "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": {
+ "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa",
+ "urls": [
+ "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287",
+ "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": {
+ "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8",
+ "urls": [
+ "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621",
+ "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/math/Math.sol": {
+ "keccak256": "0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea",
+ "urls": [
+ "bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d",
+ "dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": {
+ "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54",
+ "urls": [
+ "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8",
+ "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": {
+ "keccak256": "0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217",
+ "urls": [
+ "bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb",
+ "dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3"
+ ],
+ "license": "MIT"
+ },
+ "test/mocks/MockOFT.sol": {
+ "keccak256": "0x6c2143557accb95c3be9a0942cb8bca877ef94d3ec34f51112fe744a72dad047",
+ "urls": [
+ "bzz-raw://437d64f216e278082bd978ccbb9fc64a27707c564678a08a827df0741ec63d44",
+ "dweb:/ipfs/QmagfMbuJuJV7LLXrxAoftExfETeFcszkSZFvYJ1T2u9kJ"
+ ],
+ "license": "AGPL-3.0-only"
+ },
+ "test/mocks/MockVault.sol": {
+ "keccak256": "0xd4a6b9e7c49512a7ed3548781d45d9082b3ecd25dd635873926c39184d485790",
+ "urls": [
+ "bzz-raw://70acbb9b707cc17ee6cd36d71e21c7a8ab793a700c152c77a9babf2a1836aeca",
+ "dweb:/ipfs/Qmef5Fs6DD5we9Qr3SQnYJUpne726JdpkGUqrq9BFbJgpn"
+ ],
+ "license": "AGPL-3.0-only"
+ },
+ "test/vault-sync/VaultComposerSync_Base.t.sol": {
+ "keccak256": "0x31b5b3e30e1869648bb806871a9713d85ced6233448dfc9c0e6f59a31140d536",
+ "urls": [
+ "bzz-raw://6b43dc68a03a7305c8f5049b1080dd1387edbd99ea0de6e9e009471516aaa982",
+ "dweb:/ipfs/QmVj6GGCCe2QvFf33dwYxHNWqLAdXh4aVnyacHBT8v4gRW"
+ ],
+ "license": "UNLICENSED"
+ },
+ "test/vault-sync/VaultComposerSync_ProxySend.t.sol": {
+ "keccak256": "0xc7d92b75a8e95de6e9b97ec836e8fd7a30b9ba7e8acfdc324e3da8e4f0b202bf",
+ "urls": [
+ "bzz-raw://c16c30117b3e62fd8ccc01f81aba485972b8f84e8ef53dd24328fe1695c269ce",
+ "dweb:/ipfs/QmYvkAgRFGortejFGpcuu2tezALJ1ZCq9pXKxzTtmnREwg"
+ ],
+ "license": "UNLICENSED"
+ }
+ },
+ "version": 1
+ },
+ "id": 137
+}
diff --git a/packages/ovault-evm/artifacts/VaultComposerSync_Unit.t.sol/VaultComposerSyncUnitTest.json b/packages/ovault-evm/artifacts/VaultComposerSync_Unit.t.sol/VaultComposerSyncUnitTest.json
new file mode 100644
index 0000000000..cabfb27e49
--- /dev/null
+++ b/packages/ovault-evm/artifacts/VaultComposerSync_Unit.t.sol/VaultComposerSyncUnitTest.json
@@ -0,0 +1,3975 @@
+{
+ "abi": [
+ { "type": "receive", "stateMutability": "payable" },
+ {
+ "type": "function",
+ "name": "ARB_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "BAD_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "DEFAULT_CHANNEL_ID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "ETH_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "EVM_COMPUTE_MAP_BPS",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "EVM_COMPUTE_REDUCE_FEE_USD",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint120", "internalType": "uint120" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "EVM_REQUEST_FEE_USD",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint120", "internalType": "uint120" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "INITIAL_BALANCE",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "IS_TEST",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "MAP_REDUCE_COMPUTE_TYPES",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "NATIVE_TOKEN_PRICE_USD",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "OPTIONS_LZRECEIVE_100k",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "POL_EID",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "TOKENS_TO_SEND",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "TREASURY_GAS_CAP",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "TREASURY_GAS_FOR_FEE_CAP",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "VaultComposerSyncArb",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract VaultComposerSync"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "arbEndpoint",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "arbExecutor",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "assertGuid",
+ "inputs": [
+ { "name": "packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "guid", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "assetOFT_arb",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "assetOFT_eth",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "assetOFT_pol",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "createEndpoints",
+ "inputs": [
+ { "name": "_endpointNum", "type": "uint8", "internalType": "uint8" },
+ {
+ "name": "_libraryType",
+ "type": "uint8",
+ "internalType": "enum TestHelperOz5.LibraryType"
+ },
+ {
+ "name": "nativeTokenAddresses",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "decodeLzComposeOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "index", "type": "uint16", "internalType": "uint16" },
+ { "name": "gas", "type": "uint128", "internalType": "uint128" },
+ { "name": "value", "type": "uint128", "internalType": "uint128" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "decodeLzReadOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "gas", "type": "uint128", "internalType": "uint128" },
+ { "name": "size", "type": "uint32", "internalType": "uint32" },
+ { "name": "value", "type": "uint128", "internalType": "uint128" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "decodeLzReceiveOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "gas", "type": "uint128", "internalType": "uint128" },
+ { "name": "value", "type": "uint128", "internalType": "uint128" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "decodeNativeDropOption",
+ "inputs": [
+ { "name": "_option", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [
+ { "name": "amount", "type": "uint128", "internalType": "uint128" },
+ { "name": "receiver", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "excludeArtifacts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedArtifacts_",
+ "type": "string[]",
+ "internalType": "string[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "excludeContracts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedContracts_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "excludeSelectors",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedSelectors_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "components": [
+ { "name": "addr", "type": "address", "internalType": "address" },
+ {
+ "name": "selectors",
+ "type": "bytes4[]",
+ "internalType": "bytes4[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "excludeSenders",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "excludedSenders_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "executorValueCap",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "failed",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getNextInflightPacket",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint16", "internalType": "uint16" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [
+ { "name": "packetBytes", "type": "bytes", "internalType": "bytes" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "hasPendingPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint16", "internalType": "uint16" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [{ "name": "flag", "type": "bool", "internalType": "bool" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "lzCompose",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_from", "type": "address", "internalType": "address" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_guid", "type": "bytes32", "internalType": "bytes32" },
+ { "name": "_to", "type": "address", "internalType": "address" },
+ { "name": "_composerMsg", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "lzCompose",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_guid", "type": "bytes32", "internalType": "bytes32" },
+ { "name": "_composer", "type": "address", "internalType": "address" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "lzReadReceive",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "lzReceive",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "msgValueToFail",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "msgValueToPass",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "nextExecutorOption",
+ "inputs": [
+ { "name": "_options", "type": "bytes", "internalType": "bytes" },
+ { "name": "_cursor", "type": "uint256", "internalType": "uint256" }
+ ],
+ "outputs": [
+ { "name": "optionType", "type": "uint8", "internalType": "uint8" },
+ { "name": "option", "type": "bytes", "internalType": "bytes" },
+ { "name": "cursor", "type": "uint256", "internalType": "uint256" }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "registerEndpoint",
+ "inputs": [
+ {
+ "name": "endpoint",
+ "type": "address",
+ "internalType": "contract EndpointV2Mock"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "schedulePacket",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_options", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setExecutorValueCap",
+ "inputs": [
+ { "name": "_valueCap", "type": "uint128", "internalType": "uint128" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setUp",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setUpEndpoints",
+ "inputs": [
+ { "name": "_endpointNum", "type": "uint8", "internalType": "uint8" },
+ {
+ "name": "_libraryType",
+ "type": "uint8",
+ "internalType": "enum TestHelperOz5.LibraryType"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "setupOApps",
+ "inputs": [
+ {
+ "name": "_oappCreationCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ { "name": "_startEid", "type": "uint8", "internalType": "uint8" },
+ { "name": "_oappNum", "type": "uint8", "internalType": "uint8" }
+ ],
+ "outputs": [
+ { "name": "oapps", "type": "address[]", "internalType": "address[]" }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "shareOFT_arb",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "contract MockOFTAdapter"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "shareOFT_eth",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "shareOFT_pol",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockOFT" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetArtifactSelectors",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedArtifactSelectors_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzArtifactSelector[]",
+ "components": [
+ { "name": "artifact", "type": "string", "internalType": "string" },
+ {
+ "name": "selectors",
+ "type": "bytes4[]",
+ "internalType": "bytes4[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetArtifacts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedArtifacts_",
+ "type": "string[]",
+ "internalType": "string[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetContracts",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedContracts_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetInterfaces",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedInterfaces_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzInterface[]",
+ "components": [
+ { "name": "addr", "type": "address", "internalType": "address" },
+ {
+ "name": "artifacts",
+ "type": "string[]",
+ "internalType": "string[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetSelectors",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedSelectors_",
+ "type": "tuple[]",
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "components": [
+ { "name": "addr", "type": "address", "internalType": "address" },
+ {
+ "name": "selectors",
+ "type": "bytes4[]",
+ "internalType": "bytes4[]"
+ }
+ ]
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "targetSenders",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "targetedSenders_",
+ "type": "address[]",
+ "internalType": "address[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "test_InsufficientMsgValue_causes_revert_no_refund",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "test_deployment",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "test_lzCompose_fail_invalid_payload_auto_refunds",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "test_lzCompose_fail_not_enough_value_for_refund_complete_revert",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "test_lzCompose_pass_dst_is_hub",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "test_lzCompose_pass_dst_is_hub_no_msgValue_causes_refund",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "test_lzCompose_pass_dst_not_hub",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "test_lzCompose_slippage_causes_refund",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "test_onlyEndpoint",
+ "inputs": [],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "test_onlyOFT",
+ "inputs": [
+ { "name": "_oft", "type": "address", "internalType": "address" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "userA",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "userB",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "validatePacket",
+ "inputs": [
+ { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" },
+ { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "vault_arb",
+ "inputs": [],
+ "outputs": [
+ { "name": "", "type": "address", "internalType": "contract MockVault" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "verifyPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_dstAddress", "type": "address", "internalType": "address" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "verifyPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" },
+ {
+ "name": "_packetAmount",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ { "name": "_composer", "type": "address", "internalType": "address" },
+ { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "verifyPackets",
+ "inputs": [
+ { "name": "_dstEid", "type": "uint32", "internalType": "uint32" },
+ { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "wireOApps",
+ "inputs": [
+ { "name": "oapps", "type": "address[]", "internalType": "address[]" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "wireReadOApps",
+ "inputs": [
+ { "name": "oapps", "type": "address[]", "internalType": "address[]" },
+ { "name": "channels", "type": "uint32[]", "internalType": "uint32[]" }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "event",
+ "name": "Deposit",
+ "inputs": [
+ {
+ "name": "sender",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "owner",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "assets",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "shares",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "Refunded",
+ "inputs": [
+ {
+ "name": "guid",
+ "type": "bytes32",
+ "indexed": true,
+ "internalType": "bytes32"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "Sent",
+ "inputs": [
+ {
+ "name": "guid",
+ "type": "bytes32",
+ "indexed": true,
+ "internalType": "bytes32"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "Transfer",
+ "inputs": [
+ {
+ "name": "from",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "to",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log",
+ "inputs": [
+ {
+ "name": "",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_address",
+ "inputs": [
+ {
+ "name": "",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_array",
+ "inputs": [
+ {
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false,
+ "internalType": "uint256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_array",
+ "inputs": [
+ {
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false,
+ "internalType": "int256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_array",
+ "inputs": [
+ {
+ "name": "val",
+ "type": "address[]",
+ "indexed": false,
+ "internalType": "address[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_bytes",
+ "inputs": [
+ {
+ "name": "",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_bytes32",
+ "inputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "indexed": false,
+ "internalType": "bytes32"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_int",
+ "inputs": [
+ {
+ "name": "",
+ "type": "int256",
+ "indexed": false,
+ "internalType": "int256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_address",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "address",
+ "indexed": false,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_array",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false,
+ "internalType": "uint256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_array",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false,
+ "internalType": "int256[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_array",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "address[]",
+ "indexed": false,
+ "internalType": "address[]"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_bytes",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_bytes32",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "bytes32",
+ "indexed": false,
+ "internalType": "bytes32"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_decimal_int",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "int256",
+ "indexed": false,
+ "internalType": "int256"
+ },
+ {
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_decimal_uint",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ },
+ {
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_int",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "int256",
+ "indexed": false,
+ "internalType": "int256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_string",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_named_uint",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ },
+ {
+ "name": "val",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_string",
+ "inputs": [
+ {
+ "name": "",
+ "type": "string",
+ "indexed": false,
+ "internalType": "string"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "log_uint",
+ "inputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "indexed": false,
+ "internalType": "uint256"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "logs",
+ "inputs": [
+ {
+ "name": "",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "Executor_InvalidLzComposeOption",
+ "inputs": []
+ },
+ { "type": "error", "name": "Executor_InvalidLzReadOption", "inputs": [] },
+ {
+ "type": "error",
+ "name": "Executor_InvalidLzReceiveOption",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "Executor_InvalidNativeDropOption",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidOptionType",
+ "inputs": [
+ { "name": "optionType", "type": "uint16", "internalType": "uint16" }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SafeCastOverflowedUintDowncast",
+ "inputs": [
+ { "name": "bits", "type": "uint8", "internalType": "uint8" },
+ { "name": "value", "type": "uint256", "internalType": "uint256" }
+ ]
+ }
+ ],
+ "bytecode": {
+ "object": "0x60806040819052600c8054600160ff199182168117909255601f805490911690911790556200002e9062000502565b604051809103905ff08015801562000048573d5f803e3d5ffd5b50601f80546001600160a01b039290921661010002610100600160a81b0319909216919091179055602480546001600160801b03191667016345785d8a00001790556033805460ff19166003179055604080518082019091526005815264757365724160d81b6020820152620000be90620001cd565b603b80546001600160a01b0319166001600160a01b03929092169190911790556040805180820190915260058152643ab9b2b92160d91b60208201526200010590620001cd565b603c80546001600160a01b0319166001600160a01b039290921691909117905560408051808201909152600b81526a30b93122bc32b1baba37b960a91b60208201526200015290620001cd565b603e80546001600160a01b0319166001600160a01b0392909216919091179055620001aa620186a05f620001a260408051600360f01b602082015281516002818303018152602290910190915290565b9190620001e0565b603f90620001b99082620005ae565b50348015620001c6575f80fd5b50620007f0565b5f620001d98262000253565b5092915050565b6060836003620001f1825f6200036a565b61ffff16146200022c5762000207815f6200036a565b604051633a51740d60e01b815261ffff90911660048201526024015b60405180910390fd5b5f620002398585620003d9565b9050620002498660018362000454565b9695505050505050565b5f80826040516020016200026891906200069e565b60408051808303601f190181529082905280516020909101206001625e79b760e01b03198252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015620002d2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f89190620006bb565b6040516318caf8e360e31b8152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c71890620003369085908790600401620006e3565b5f604051808303815f87803b1580156200034e575f80fd5b505af115801562000361573d5f803e3d5ffd5b50505050915091565b5f620003788260026200073a565b83511015620003ca5760405162461bcd60e51b815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e6473000000000000000000000000604482015260640162000223565b50818101600201515b92915050565b60606001600160801b038216156200042357604080516001600160801b0319608086811b8216602084015285901b166030820152016040516020818303038152906040526200044d565b6040516001600160801b0319608085901b1660208201526030016040516020818303038152906040525b9392505050565b606083600362000465825f6200036a565b61ffff16146200047b5762000207815f6200036a565b846001620004908551620004ce60201b60201c565b6200049d90600162000750565b8686604051602001620004b59594939291906200076e565b6040516020818303038152906040529150509392505050565b5f61ffff821115620004fe576040516306dfcc6560e41b8152601060048201526024810183905260440162000223565b5090565b610aa98062043ffc83390190565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200053957607f821691505b6020821081036200055857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620005a957805f5260205f20601f840160051c81016020851015620005855750805b601f840160051c820191505b81811015620005a6575f815560010162000591565b50505b505050565b81516001600160401b03811115620005ca57620005ca62000510565b620005e281620005db845462000524565b846200055e565b602080601f83116001811462000618575f8415620006005750858301515b5f19600386901b1c1916600185901b17855562000672565b5f85815260208120601f198616915b82811015620006485788860151825594840194600190910190840162000627565b50858210156200066657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f5b83811015620006965781810151838201526020016200067c565b50505f910152565b5f8251620006b18184602087016200067a565b9190910192915050565b5f60208284031215620006cc575f80fd5b81516001600160a01b03811681146200044d575f80fd5b60018060a01b0383168152604060208201525f8251806040840152620007118160608501602087016200067a565b601f01601f1916919091016060019392505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115620003d357620003d362000726565b61ffff818116838216019080821115620001d957620001d962000726565b5f865162000781818460208b016200067a565b7fff0000000000000000000000000000000000000000000000000000000000000060f888811b82169285019283526001600160f01b031960f089901b16600184015286901b1660038201528351620007e18160048401602088016200067a565b01600401979650505050505050565b620437fd80620007ff5f395ff3fe60806040526004361062000572575f3560e01c806367d53a0011620002d6578063ae6ce400116200018e578063d6d6249711620000e2578063f5cf63901162000092578063f93e1d611162000076578063f93e1d611462000f84578063fa7626d41462000fd2578063faed6c581462000fed575f80fd5b8063f5cf63901462000f54578063f5e4efb51462000f6b575f80fd5b8063defd9da611620000c6578063defd9da61462000ec5578063e20c9f711462000f26578063ec53eaa01462000f3d575f80fd5b8063d6d624971462000e80578063deb22e9a1462000ea4575f80fd5b8063b76bada5116200013e578063ba414fa61162000122578063ba414fa61462000e2e578063baead19c1462000e45578063cb1a295f1462000e5f575f80fd5b8063b76bada51462000dcb578063b954fdf61462000de1575f80fd5b8063b1dcf5c81162000172578063b1dcf5c814620009ab578063b5508aa91462000d90578063b752b72a1462000da7575f80fd5b8063ae6ce4001462000d55578063b0464fdc1462000d79575f80fd5b806385226c811162000246578063997cff1b11620001f65780639e0e8c5511620001da5780639e0e8c551462000d105780639fe4ee911462000d27578063a29c89841462000d3e575f80fd5b8063997cff1b1462000cd557806399ce8e8d1462000cf9575f80fd5b806390a606f5116200022a57806390a606f51462000c31578063916a17c61462000c525780639751ca861462000c78575f80fd5b806385226c811462000bee5780638c5e9f741462000c14575f80fd5b80637982cf4211620002a25780637f2e593611620002865780637f2e59361462000ba957806382411c77146200070c578063834bd1591462000bca575f80fd5b80637982cf421462000b645780637a8b5d981462000b88575f80fd5b806367d53a001462000acb578063699cbade1462000aec5780636e1775e31462000b0a578063703ca2541462000b40575f80fd5b80632ade3880116200042a578063536e8d3a116200039a5780635fe1413f116200034a57806365449eb0116200032e57806365449eb01462000a6057806366d9a9a01462000a84578063677d41751462000aaa575f80fd5b80635fe1413f1462000a25578063601978891462000a3c575f80fd5b80635e42c9b2116200037e5780635e42c9b214620009c35780635ea0fefe14620009d95780635f85148e1462000a0e575f80fd5b8063536e8d3a146200098a578063556257df14620009ab575f80fd5b80633e5e3c2311620003f657806345f81ff411620003da57806345f81ff41462000903578063518e8ab0146200091a57806351aa318b1462000972575f80fd5b80633e5e3c2314620008d55780633f7286f414620008ec575f80fd5b80632ade38801462000856578063375591d7146200087c5780633bbd6a94146200089d5780633cae7b8a14620008b4575f80fd5b80631015594a11620004e25780631ed7831c11620004925780632113ce6211620004765780632113ce6214620007d057806325996dae146200081c5780632a35d2501462000832575f80fd5b80631ed7831c14620007945780631f3280c514620007ba575f80fd5b80631766f5a411620004c65780631766f5a4146200070c578063178928d3146200074a5780631cc465251462000770575f80fd5b80631015594a14620006c857806314525bce14620006df575f80fd5b80630a69faa9116200053e5780630afba86811620005225780630afba868146200064b5780630c003ff714620006765780630fcaecfe146200069c575f80fd5b80630a69faa9146200061d5780630a9254e41462000634575f80fd5b806301acc0e2146200057e578063031c346314620005a4578063090852b614620005bb57806309c885c914620005df575f80fd5b366200057a57005b5f80fd5b3480156200058a575f80fd5b50620005a26200059c3660046200b43b565b62001011565b005b348015620005b0575f80fd5b50620005a2620012ed565b348015620005c7575f80fd5b50620005a2620005d93660046200b46b565b62001cb4565b348015620005eb575f80fd5b50603d5462000600906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620005a26200062e3660046200b5f7565b62001ce0565b34801562000640575f80fd5b50620005a262001e37565b34801562000657575f80fd5b506200066261271081565b60405161ffff909116815260200162000614565b34801562000682575f80fd5b50603354620006009061010090046001600160a01b031681565b348015620006a8575f80fd5b50620006b2606581565b60405163ffffffff909116815260200162000614565b348015620006d4575f80fd5b50620005a262001e43565b348015620006eb575f80fd5b50620006fd68056bc75e2d6310000081565b60405190815260200162000614565b34801562000718575f80fd5b5062000729670de0b6b3a764000081565b6040516effffffffffffffffffffffffffffff909116815260200162000614565b34801562000756575f80fd5b50620007616200201c565b6040516200061491906200b6da565b3480156200077c575f80fd5b50620005a26200078e3660046200b711565b620020b0565b348015620007a0575f80fd5b50620007ab62002106565b6040516200061491906200b785565b348015620007c6575f80fd5b50620006b2600381565b348015620007dc575f80fd5b50602454620007fa906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff909116815260200162000614565b34801562000828575f80fd5b50620006b2600181565b3480156200083e575f80fd5b50620007ab620008503660046200b799565b62002168565b34801562000862575f80fd5b506200086d62002281565b6040516200061491906200b85d565b34801562000888575f80fd5b5060345462000600906001600160a01b031681565b620005a2620008ae3660046200b8fc565b620023c9565b348015620008c0575f80fd5b5060385462000600906001600160a01b031681565b348015620008e1575f80fd5b50620007ab62002484565b348015620008f8575f80fd5b50620007ab620024e4565b3480156200090f575f80fd5b50620005a262002544565b34801562000926575f80fd5b506200093e620009383660046200b9b0565b6200288e565b6040805161ffff90941684526fffffffffffffffffffffffffffffffff928316602085015291169082015260600162000614565b3480156200097e575f80fd5b50620006b26201117181565b34801562000996575f80fd5b5060355462000600906001600160a01b031681565b348015620009b7575f80fd5b50620006fd620186a081565b348015620009cf575f80fd5b50620006b2600281565b348015620009e5575f80fd5b50620009fd620009f73660046200ba03565b620028aa565b604051901515815260200162000614565b34801562000a1a575f80fd5b50620005a26200290a565b34801562000a31575f80fd5b50620005a262002d8f565b34801562000a48575f80fd5b50620005a262000a5a3660046200ba30565b620033b0565b34801562000a6c575f80fd5b50620005a262000a7e3660046200bb3a565b6200415e565b34801562000a90575f80fd5b5062000a9b6200424f565b6040516200061491906200bc59565b34801562000ab6575f80fd5b50603e5462000600906001600160a01b031681565b34801562000ad7575f80fd5b5060375462000600906001600160a01b031681565b34801562000af8575f80fd5b50620007fa68056bc75e2d6310000081565b34801562000b16575f80fd5b5062000b2e62000b283660046200bcf4565b620043d4565b6040516200061494939291906200bd69565b34801562000b4c575f80fd5b50620005a262000b5e3660046200bd98565b620043f6565b34801562000b70575f80fd5b506200076162000b823660046200ba03565b620045c7565b34801562000b94575f80fd5b5060395462000600906001600160a01b031681565b34801562000bb5575f80fd5b5060365462000600906001600160a01b031681565b34801562000bd6575f80fd5b50620005a262000be83660046200bdd6565b620046dc565b34801562000bfa575f80fd5b5062000c0562004ced565b6040516200061491906200be4f565b34801562000c20575f80fd5b50620006fd670de0b6b3a764000081565b34801562000c3d575f80fd5b50603a5462000600906001600160a01b031681565b34801562000c5e575f80fd5b5062000c6962004dc2565b6040516200061491906200be63565b34801562000c84575f80fd5b5062000c9c62000c963660046200b9b0565b62004ebc565b604080516fffffffffffffffffffffffffffffffff948516815263ffffffff909316602084015292169181019190915260600162000614565b34801562000ce1575f80fd5b50620005a262000cf33660046200bcf4565b62004ecb565b34801562000d05575f80fd5b50620005a262004f45565b34801562000d1c575f80fd5b50620005a262005247565b34801562000d33575f80fd5b50620005a262005477565b620005a262000d4f3660046200bef4565b62005c41565b34801562000d61575f80fd5b50620005a262000d733660046200b43b565b62005cc8565b34801562000d85575f80fd5b5062000c6962005d7d565b34801562000d9c575f80fd5b5062000c0562005e77565b34801562000db3575f80fd5b50620005a262000dc53660046200bf7f565b62005f4c565b34801562000dd7575f80fd5b50620006fd600381565b34801562000ded575f80fd5b5062000e0562000dff3660046200b9b0565b62005f69565b604080516fffffffffffffffffffffffffffffffff909316835260208301919091520162000614565b34801562000e3a575f80fd5b50620009fd62005f83565b34801562000e51575f80fd5b50620006fd64e8d4a5100081565b34801562000e6b575f80fd5b50603c5462000600906001600160a01b031681565b34801562000e8c575f80fd5b50620005a262000e9e3660046200bf9e565b62006057565b34801562000eb0575f80fd5b50603b5462000600906001600160a01b031681565b34801562000ed1575f80fd5b50620005a262000ee33660046200c016565b602480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b34801562000f32575f80fd5b50620007ab620082a8565b620005a262000f4e3660046200ba30565b62008308565b34801562000f60575f80fd5b50620005a26200843b565b34801562000f77575f80fd5b50620006fd630ee6b28081565b34801562000f90575f80fd5b5062000fa862000fa23660046200b9b0565b620085e3565b604080516fffffffffffffffffffffffffffffffff93841681529290911660208301520162000614565b34801562000fde575f80fd5b50601f54620009fd9060ff1681565b34801562000ff9575f80fd5b50620005a26200100b3660046200c034565b620085f1565b603354737109709ecfa91a80626ff3989d68f67f5b1dd12d90634c63e562906001600160a01b0384811661010090920416148015906200105f57506034546001600160a01b03848116911614155b6040518263ffffffff1660e01b815260040162001080911515815260200190565b5f6040518083038186803b15801562001097575f80fd5b505afa158015620010aa573d5f803e3d5ffd5b5050604080516001600160a01b03851660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fb3f0d0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506200116e91906004016200b6da565b5f604051808303815f87803b15801562001186575f80fd5b505af115801562001199573d5f803e3d5ffd5b5050603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015f604051808303815f87803b1580156200120d575f80fd5b505af115801562001220573d5f803e3d5ffd5b5050603a546001600160a01b0316915063d0a102609050670de0b6b3a7640000836200124b6200867c565b603e5460405160e086901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039384166004820152602481019290925260a060448301525f60a483018190529216606482015260c0608482015260c481019190915260e4015f604051808303818588803b158015620012d2575f80fd5b505af1158015620012e5573d5f803e3d5ffd5b505050505050565b5f620012f86200867c565b603354603a546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015292935061010090910416906340c10f19906044015f604051808303815f87803b1580156200136e575f80fd5b505af115801562001381573d5f803e3d5ffd5b50506040805160e08101808352603a547faa72fe3f0000000000000000000000000000000000000000000000000000000090915291515f945090925082916001600160a01b03169063aa72fe3f9060e4808501916020918187030181865afa158015620013f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200141691906200c0a2565b63ffffffff168152603b546020909101906001600160a01b03168152670de0b6b3a764000060208083018290525f60408085018290528051808401825282815260608601528051808401825282815260808601528051928301905280825260a090930152603b5492935090916200149d91600191859185916001600160a01b03166200871e565b6033546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562001530575f80fd5b505af115801562001543573d5f803e3d5ffd5b5050603954603a54604051670de0b6b3a764000081526001600160a01b039283169450911691507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36039546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562001623575f80fd5b505af115801562001636573d5f803e3d5ffd5b5050603a54604051670de0b6b3a764000081526001600160a01b0390911692505f91507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36039546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562001712575f80fd5b505af115801562001725573d5f803e3d5ffd5b5050603a5460408051670de0b6b3a764000080825260208201526001600160a01b0390921693508392507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3603a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562001806575f80fd5b505af115801562001819573d5f803e3d5ffd5b50506040518592507f27b5aea9f5736c02241d8a0272e9ec988ea44cf85c4b4760329431aa1967839491505f90a262001962603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200189d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620018c391906200c0c0565b603354603a546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416906370a08231906024015b602060405180830381865afa1580156200192d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200195391906200c0c0565b670de0b6b3a764000062008785565b603954604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051620019f3926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015620019c6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620019ec91906200c0c0565b5f62008809565b603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b15801562001a63575f80fd5b505af115801562001a76573d5f803e3d5ffd5b5050603a54603354603e546040517fd0a102600000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d0a10260945062001ad993610100909304831692899288929116906004016200c0d8565b5f604051808303815f87803b15801562001af1575f80fd5b505af115801562001b04573d5f803e3d5ffd5b5050505062001bd7603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001b5e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001b8491906200c0c0565b6033546039546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416906370a082319060240162001911565b603954604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905162001caf926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa15801562001c3b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001c6191906200c0c0565b603954603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116906370a082319060240162001911565b505050565b62001cdc82826001600160a01b03165f1b5f8060405180602001604052805f815250620046dc565b5050565b5f60235f62001cf0878762008887565b63ffffffff16815260208101919091526040015f908120546001600160a01b031691508062001d1f85620088ad565b92505091505f604051806060016040528062001d3c8a8a620089e1565b63ffffffff16815260200162001d538a8a620089f2565b815260200162001d648a8a62008a0e565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e6fffffffffffffffffffffffffffffffff8581169085168462001da58d8d62008a34565b62001db18e8e62008a48565b604080516020810182525f815290517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16815262001dfc949392918e916004016200c120565b5f604051808303818589803b15801562001e14575f80fd5b5088f115801562001e27573d5f803e3d5ffd5b5050505050505050505050505050565b62001e4162008a59565b565b603a54604080517f411557d1000000000000000000000000000000000000000000000000000000008152905162001edf926001600160a01b03169163411557d19160048083019260209291908290030181865afa15801562001ea7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001ecd91906200c194565b6039546001600160a01b031662009e0b565b603a54604080517f369caf83000000000000000000000000000000000000000000000000000000008152905162001f7b926001600160a01b03169163369caf839160048083019260209291908290030181865afa15801562001f43573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001f6991906200c194565b6034546001600160a01b031662009e0b565b603a54604080517f0bfec755000000000000000000000000000000000000000000000000000000008152905162001e41926001600160a01b031691630bfec7559160048083019260209291908290030181865afa15801562001fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200200591906200c194565b60335461010090046001600160a01b031662009e0b565b603f80546200202b906200c1bf565b80601f016020809104026020016040519081016040528092919081815260200182805462002059906200c1bf565b8015620020a85780601f106200207e57610100808354040283529160200191620020a8565b820191905f5260205f20905b8154815290600101906020018083116200208a57829003601f168201915b505050505081565b62001cdc82828460ff1667ffffffffffffffff811115620020d557620020d56200b4e8565b604051908082528060200260200182016040528015620020ff578160200160208202803683370190505b5062006057565b606060168054806020026020016040519081016040528092919081815260200182805480156200215e57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116200213f575b5050505050905090565b60608160ff1667ffffffffffffffff8111156200218957620021896200b4e8565b604051908082528060200260200182016040528015620021b3578160200160208202803683370190505b509050825b620021c483856200c23f565b60ff168160ff1610156200226e5760ff81165f9081526023602090815260408083205481516001600160a01b03909116928101929092523090820152600160608201526200222690879060800160405160208183030381529060405262009e6d565b905080836200223687856200c25b565b60ff16815181106200224c576200224c6200c277565b6001600160a01b039092166020928302919091019091015250600101620021b8565b506200227a81620043f6565b9392505050565b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015620023c0575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015620023a8578382905f5260205f2001805462002316906200c1bf565b80601f016020809104026020016040519081016040528092919081815260200182805462002344906200c1bf565b8015620023935780601f10620023695761010080835404028352916020019162002393565b820191905f5260205f20905b8154815290600101906020018083116200237557829003601f168201915b505050505081526020019060010190620022f6565b505050508152505081526020019060010190620022a4565b50505050905090565b63ffffffff87165f908152602360205260408120546001600160a01b0316908080620023f58962009ec9565b925092509250836001600160a01b03166391d20fa18284908d8b8d898d8d60405180602001604052805f8152506040518a63ffffffff1660e01b81526004016200244697969594939291906200c2a4565b5f604051808303818589803b1580156200245e575f80fd5b5088f115801562002471573d5f803e3d5ffd5b5050505050505050505050505050505050565b606060188054806020026020016040519081016040528092919081815260200182805480156200215e57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116200213f575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156200215e57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116200213f575050505050905090565b5f6200254f6200867c565b603354603a546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015292935061010090910416906340c10f19906044015f604051808303815f87803b158015620025c5575f80fd5b505af1158015620025d8573d5f803e3d5ffd5b50506040805160e08101825260038152603c546001600160a01b03908116602080840191909152670de0b6b3a7640000838501525f606084018190528451808301865281815260808501528451808301865281815260a0850152845191820190945283815260c0830152603b549194509192506200266b916001918591678ac7230489e8000091620186a091166200871e565b60408051678ac7230489e800006024820152670de0b6b3a764000060448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7cb769dc0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb3916200273a916004016200b6da565b5f604051808303815f87803b15801562002752575f80fd5b505af115801562002765573d5f803e3d5ffd5b5050603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015f604051808303815f87803b158015620027d9575f80fd5b505af1158015620027ec573d5f803e3d5ffd5b5050603a54603354603e546040517fd0a102600000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d0a102609450670de0b6b3a764000093620028599361010090048116928a928992909116906004016200c0d8565b5f604051808303818588803b15801562002871575f80fd5b505af115801562002884573d5f803e3d5ffd5b5050505050505050565b5f805f6200289d85856200a011565b9250925092509250925092565b61ffff82165f90815260208080526040808320848452909152812081620028ff82546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b119150505b92915050565b5f620029156200867c565b603354603a546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015292935061010090910416906340c10f19906044015f604051808303815f87803b1580156200298b575f80fd5b505af11580156200299e573d5f803e3d5ffd5b5050603554603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201525f9450911691506370a0823190602401602060405180830381865afa15801562002a08573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002a2e91906200c0c0565b90505f6040518060400160405280600681526020017f3078313233340000000000000000000000000000000000000000000000000000815250600560405160200162002a7c9291906200c304565b60405160208183030381529060405290505f62002ab9600183670de0b6b3a7640000603b5f9054906101000a90046001600160a01b03166200a0a5565b603a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562002b48575f80fd5b505af115801562002b5b573d5f803e3d5ffd5b50506040518692507ffe509803c09416b28ff3d8f690c8b0c61462a892c46d5430c8fb20abe472daf091505f90a2603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b15801562002bf9575f80fd5b505af115801562002c0c573d5f803e3d5ffd5b5050603a54603354603e546040517fd0a102600000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d0a102609450670de0b6b3a76400009362002c799361010090048116928b928992909116906004016200c0d8565b5f604051808303818588803b15801562002c91575f80fd5b505af115801562002ca4573d5f803e3d5ffd5b505060355462002cc49350600192506001600160a01b0316905062001cb4565b603554603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015262002d899291909116906370a0823190602401602060405180830381865afa15801562002d2f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002d5591906200c0c0565b62002d69670de0b6b3a7640000866200c32a565b6040518060600160405280602d815260200162043773602d91396200a0d5565b50505050565b5f62002d9a6200867c565b603354603a546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015292935061010090910416906340c10f19906044015f604051808303815f87803b15801562002e10575f80fd5b505af115801562002e23573d5f803e3d5ffd5b5050603554603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201525f9450911691506370a0823190602401602060405180830381865afa15801562002e8d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002eb391906200c0c0565b6040805160e0810190915260038152603c549192505f9160208201906001600160a01b03168152602001670de0b6b3a76400008152602001670de0b6b3a7640000600162002f0291906200c32a565b815260200160405180602001604052805f815250815260200160405180602001604052805f815250815260200160405180602001604052805f81525081525090505f8160405160200162002f5791906200c3bb565b60405160208183030381529060405290505f62002f94600183670de0b6b3a7640000603b5f9054906101000a90046001600160a01b03166200a0a5565b603a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562003023575f80fd5b505af115801562003036573d5f803e3d5ffd5b50506040518792507ffe509803c09416b28ff3d8f690c8b0c61462a892c46d5430c8fb20abe472daf091505f90a2620030ba603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200189d573d5f803e3d5ffd5b603954604080517f18160ddd00000000000000000000000000000000000000000000000000000000815290516200311e926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015620019c6573d5f803e3d5ffd5b603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b1580156200318e575f80fd5b505af1158015620031a1573d5f803e3d5ffd5b5050603a54603354603e546040517fd0a102600000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d0a102609450670de0b6b3a7640000936200320e9361010090048116928c928992909116906004016200c0d8565b5f604051808303818588803b15801562003226575f80fd5b505af115801562003239573d5f803e3d5ffd5b5050603554620032599350600192506001600160a01b0316905062001cb4565b603554603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620032fe9291909116906370a0823190602401602060405180830381865afa158015620032c4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620032ea91906200c0c0565b62002d69670de0b6b3a7640000876200c32a565b603954604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051620033a9926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa15801562003362573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200338891906200c0c0565b5f604051806060016040528060288152602001620437a0602891396200a0d5565b5050505050565b5f620033bd848462008887565b63ffffffff81165f908152602360205260408120549192506001600160a01b03909116908163402f8468620033f3888862008a34565b620033ff8989620089e1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015263ffffffff1660248201526044016040805180830381865afa15801562003464573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200348a91906200c3cf565b5090505f6200349a87876200a155565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250604080517f54fd4d50000000000000000000000000000000000000000000000000000000008152905195965090946001600160a01b03881694506354fd4d509350600480830193506060928290030181865afa1580156200352c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200355291906200c429565b505090508067ffffffffffffffff1660030362003acf57825f6001600160a01b038216639c33abf7620035868c8c620089e1565b620035928d8d62008a34565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600260448201526064015f60405180830381865afa158015620035ff573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200362891908101906200c4b5565b90505f818060200190518101906200364191906200c559565b608001515f815181106200365957620036596200c277565b602002602001015190505f620036708c8c6200a166565b604051620036809291906200c63b565b6040518091039020905060605f630223536e60e01b88846064604051602401620036ad939291906200c64a565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03851663f010cb238d89856200372f426103e86200c32a565b6040518563ffffffff1660e01b81526004016200375094939291906200c677565b602060405180830381865afa1580156200376c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200379291906200c0c0565b90506200379f816200a177565b6040805160018082528183019092529194505f9250816020015b6040805160a0810182525f808252602082018190526060928201839052828201526080810191909152815260200190600190039081620037b95790505090506040518060a001604052808d63ffffffff168152602001886001600160a01b03168152602001838152602001426103e86200383491906200c32a565b815260200184815250815f815181106200385257620038526200c277565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b143044b90620038a49084906004016200c6b7565b5f604051808303815f87803b158015620038bc575f80fd5b505af1158015620038cf573d5f803e3d5ffd5b505050505f630894edf160e01b8a86604051602401620038f19291906200c783565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03871663f010cb238f8b8562003973426103e86200c32a565b6040518563ffffffff1660e01b81526004016200399494939291906200c677565b602060405180830381865afa158015620039b0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620039d691906200c0c0565b9050620039e3816200a177565b9450506040518060a001604052808e63ffffffff168152602001896001600160a01b03168152602001828152602001426103e862003a2291906200c32a565b815260200185815250825f8151811062003a405762003a406200c277565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063b143044b9062003a929085906004016200c6b7565b5f604051808303815f87803b15801562003aaa575f80fd5b505af115801562003abd573d5f803e3d5ffd5b50505050505050505050505062002884565b8067ffffffffffffffff16600a03620040dc57825f6001600160a01b038216639c33abf762003aff8c8c620089e1565b62003b0b8d8d62008a34565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600160448201526064015f60405180830381865afa15801562003b78573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405262003ba191908101906200c4b5565b90505f8180602001905181019062003bba91906200c7a6565b608001515f8151811062003bd25762003bd26200c277565b602002602001015190505f62003be98c8c6200a2be565b60405162003bf99291906200c63b565b604051809103902090505f62003c108d8d62008a48565b8b60405160200162003c249291906200c7f8565b60405160208183030381529060405280519060200120905060605f63ab750e7560e01b89858560405160240162003c5e939291906200c81f565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562003ce0426103e86200c32a565b6040518563ffffffff1660e01b815260040162003d0194939291906200c677565b602060405180830381865afa15801562003d1d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003d4391906200c0c0565b905062003d50816200a177565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f80825260208201819052606092820183905282820152608081019190915281526020019060019003908162003d6a5790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862003de591906200c32a565b815260200185815250815f8151811062003e035762003e036200c277565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b9062003e559084906004016200c6b7565b5f604051808303815f87803b15801562003e6d575f80fd5b505af115801562003e80573d5f803e3d5ffd5b505050505050505f63594924da60e01b89858560405160240162003ea7939291906200c81f565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562003f29426103e86200c32a565b6040518563ffffffff1660e01b815260040162003f4a94939291906200c677565b602060405180830381865afa15801562003f66573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003f8c91906200c0c0565b905062003f99816200a177565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f80825260208201819052606092820183905282820152608081019190915281526020019060019003908162003fb35790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e86200402e91906200c32a565b815260200185815250815f815181106200404c576200404c6200c277565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b906200409e9084906004016200c6b7565b5f604051808303815f87803b158015620040b6575f80fd5b505af1158015620040c9573d5f803e3d5ffd5b5050505050505050505050505062002884565b6040517f12cc947f0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906312cc947f9062004125908b908b906004016200c845565b5f604051808303815f87803b1580156200413d575f80fd5b505af115801562004150573d5f803e3d5ffd5b505050505050505050505050565b5f5b825181101562001caf575f8382815181106200418057620041806200c277565b602002602001015190505f5b83518110156200424457816001600160a01b031663f0a9e481858381518110620041ba57620041ba6200c277565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff9091166004820152600160248201526044015f604051808303815f87803b15801562004220575f80fd5b505af115801562004233573d5f803e3d5ffd5b5050600190920191506200418c9050565b505060010162004160565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015620023c0578382905f5260205f2090600202016040518060400160405290815f82018054620042a5906200c1bf565b80601f0160208091040260200160405190810160405280929190818152602001828054620042d3906200c1bf565b8015620043225780601f10620042f85761010080835404028352916020019162004322565b820191905f5260205f20905b8154815290600101906020018083116200430457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015620043bb57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620043675790505b5050505050815250508152602001906001019062004272565b5f365f80620043e58787876200a2cf565b935093509350935093509350935093565b80515f5b8181101562001caf575f8382815181106200441957620044196200c277565b602002602001015190505f5b83811015620045bc57828114620045b3575f8582815181106200444c576200444c6200c277565b602002602001015190505f816001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004494573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620044ba91906200c194565b6001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620044f6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200451c91906200c0a2565b9050836001600160a01b0316633400288b826200453f856001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff92909216600483015260248201526044015f604051808303815f87803b15801562004599575f80fd5b505af1158015620045ac573d5f803e3d5ffd5b5050505050505b60010162004425565b5050600101620043fa565b61ffff82165f9081526020808052604080832084845290915281206060916200461e82546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b1115620046d5575f62004631826200a32a565b5f8181526021602052604090208054919250906200464f906200c1bf565b80601f01602080910402602001604051908101604052809291908181526020018280546200467d906200c1bf565b8015620046cc5780601f10620046a257610100808354040283529160200191620046cc565b820191905f5260205f20905b815481529060010190602001808311620046ae57829003601f168201915b50505050509250505b5092915050565b63ffffffff85165f908152602360205260409020546001600160a01b031662004766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f656e64706f696e74206e6f74207965742072656769737465726564000000000060448201526064015b60405180910390fd5b63ffffffff85165f90815260208080526040808320878452909152812090620047bd82546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b90505f855f0362004801575081546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031662004815565b85821162004810578162004812565b855b90505b801562002884578062004828816200c85a565b9150505f62004837846200a3b4565b5f8181526021602052604081208054929350909162004856906200c1bf565b80601f016020809104026020016040519081016040528092919081815260200182805462004884906200c1bf565b8015620048d35780601f10620048a957610100808354040283529160200191620048d3565b820191905f5260205f20905b815481529060010190602001808311620048b557829003601f168201915b50506040517f997cff1b000000000000000000000000000000000000000000000000000000008152939450309363997cff1b93506200491b925085915086906004016200c783565b5f6040518083038186803b15801562004932575f80fd5b505afa15801562004945573d5f803e3d5ffd5b50506040517f6019788900000000000000000000000000000000000000000000000000000000815230925063601978899150620049899084908a906004016200c872565b5f604051808303815f87803b158015620049a1575f80fd5b505af1158015620049b4573d5f803e3d5ffd5b5050505f838152602260205260408120805491925090620049d5906200c1bf565b80601f016020809104026020016040519081016040528092919081815260200182805462004a03906200c1bf565b801562004a525780601f1062004a285761010080835404028352916020019162004a52565b820191905f5260205f20905b81548152906001019060200180831162004a3457829003601f168201915b5050505050905062004a668160026200a441565b1562004b41575f8062004a79836200a456565b604051919350915081905f906001600160a01b0383169085908381818185875af1925050503d805f811462004aca576040519150601f19603f3d011682016040523d82523d5f602084013e62004acf565b606091505b505090508062004b3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4661696c656420746f2073656e6420457468657200000000000000000000000060448201526064016200475d565b505050505b62004b4e8160016200a441565b1562004bc4576040517fec53eaa0000000000000000000000000000000000000000000000000000000008152309063ec53eaa09062004b9490859085906004016200c872565b5f604051808303815f87803b15801562004bac575f80fd5b505af115801562004bbf573d5f803e3d5ffd5b505050505b62004bd18160056200a441565b1562004c49576040517f0a69faa90000000000000000000000000000000000000000000000000000000081523090630a69faa99062004c1990859085908c906004016200c89a565b5f604051808303815f87803b15801562004c31575f80fd5b505af115801562004c44573d5f803e3d5ffd5b505050505b6001600160a01b0388161580159062004c6a575062004c6a8160036200a441565b1562004ce4576040517fa29c8984000000000000000000000000000000000000000000000000000000008152309063a29c89849062004cb4908590859088908e906004016200c8d8565b5f604051808303815f87803b15801562004ccc575f80fd5b505af115801562004cdf573d5f803e3d5ffd5b505050505b50505062004815565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015620023c0578382905f5260205f2001805462004d30906200c1bf565b80601f016020809104026020016040519081016040528092919081815260200182805462004d5e906200c1bf565b801562004dad5780601f1062004d835761010080835404028352916020019162004dad565b820191905f5260205f20905b81548152906001019060200180831162004d8f57829003601f168201915b50505050508152602001906001019062004d10565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015620023c0575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801562004ea357602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162004e4f5790505b5050505050815250508152602001906001019062004de5565b5f805f6200289d85856200a598565b5f62004ed8848462008a48565b905081811462002d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f67756964206e6f74206d6174636800000000000000000000000000000000000060448201526064016200475d565b5f62004f506200867c565b603354603a546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015292935061010090910416906340c10f19906044015f604051808303815f87803b15801562004fc6575f80fd5b505af115801562004fd9573d5f803e3d5ffd5b50506040805160e08101825260038152603b546001600160a01b03166020808301829052670de0b6b3a76400008385018190525f606085018190528551808401875281815260808601528551808401875281815260a0860152855192830190955284825260c08401919091529194509192506200505e9160019185918591906200871e565b60408051630bed727c6024820152600160448201525f606482018190526084808301919091528251808303909101815260a490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f4f3ec0d30000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb3916200512f916004016200b6da565b5f604051808303815f87803b15801562005147575f80fd5b505af11580156200515a573d5f803e3d5ffd5b5050603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015f604051808303815f87803b158015620051ce575f80fd5b505af1158015620051e1573d5f803e3d5ffd5b5050603a54603354603e546040517fd0a102600000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d0a102609450600193620028599361010090048116928a928992909116906004016200c0d8565b5f620052526200867c565b603354603a546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015292935061010090910416906340c10f19906044015f604051808303815f87803b158015620052c8575f80fd5b505af1158015620052db573d5f803e3d5ffd5b5050603554603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201525f9450911691506370a0823190602401602060405180830381865afa15801562005345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200536b91906200c0c0565b90505f6040518060e00160405280603a5f9054906101000a90046001600160a01b03166001600160a01b031663aa72fe3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620053ca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620053f091906200c0a2565b63ffffffff168152603b546020909101906001600160a01b03168152670de0b6b3a764000060208083018290525f60408085018290528051808401825282815260608601528051808401825282815260808601528051928301905280825260a090930152603b54929350909162002ab991600191859183916001600160a01b03166200871e565b5f620054826200867c565b603354603a546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015292935061010090910416906340c10f19906044015f604051808303815f87803b158015620054f8575f80fd5b505af11580156200550b573d5f803e3d5ffd5b50506040805160e08101825260038152603b546001600160a01b03166020808301829052670de0b6b3a76400008385018190525f606085018190528551808401875281815260808601528551808401875281815260a0860152855192830190955284825260c08401919091529194509192506200558f91600191859181906200871e565b6033546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562005622575f80fd5b505af115801562005635573d5f803e3d5ffd5b5050603954603a54604051670de0b6b3a764000081526001600160a01b039283169450911691507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36039546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562005715575f80fd5b505af115801562005728573d5f803e3d5ffd5b5050603a54604051670de0b6b3a764000081526001600160a01b0390911692505f91507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36039546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562005804575f80fd5b505af115801562005817573d5f803e3d5ffd5b5050603a5460408051670de0b6b3a764000080825260208201526001600160a01b0390921693508392507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3603a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b158015620058f8575f80fd5b505af11580156200590b573d5f803e3d5ffd5b50506040518592507f27b5aea9f5736c02241d8a0272e9ec988ea44cf85c4b4760329431aa1967839491505f90a26200598f603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200189d573d5f803e3d5ffd5b603954604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051620059f3926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015620019c6573d5f803e3d5ffd5b603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b15801562005a63575f80fd5b505af115801562005a76573d5f803e3d5ffd5b5050603a54603354603e546040517fd0a102600000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d0a102609450670de0b6b3a76400009362005ae39361010090048116928a928992909116906004016200c0d8565b5f604051808303818588803b15801562005afb575f80fd5b505af115801562005b0e573d5f803e3d5ffd5b505050505062005b69603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001b5e573d5f803e3d5ffd5b603954604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905162001caf926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa15801562005bcd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062005bf391906200c0c0565b6039546034546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116906370a082319060240162001911565b30633bbd6a9462005c53878762008887565b62005c5f888862008a34565b86868662005c6e8c8c6200a2be565b6040518863ffffffff1660e01b815260040162005c9297969594939291906200c921565b5f604051808303815f87803b15801562005caa575f80fd5b505af115801562005cbd573d5f803e3d5ffd5b505050505050505050565b8060235f836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005d09573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062005d2f91906200c0a2565b63ffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015620023c0575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801562005e5e57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162005e0a5790505b5050505050815250508152602001906001019062005da0565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015620023c0578382905f5260205f2001805462005eba906200c1bf565b80601f016020809104026020016040519081016040528092919081815260200182805462005ee8906200c1bf565b801562005f375780601f1062005f0d5761010080835404028352916020019162005f37565b820191905f5260205f20905b81548152906001019060200180831162005f1957829003601f168201915b50505050508152602001906001019062005e9a565b62001cdc82825f8060405180602001604052805f815250620046dc565b5f8062005f7784846200a623565b915091505b9250929050565b6008545f9060ff161562005f9b575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa1580156200602a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200605091906200c0c0565b1415905090565b8260ff1667ffffffffffffffff8111156200607657620060766200b4e8565b604051908082528060200260200182016040528015620060a0578160200160208202803683370190505b508051620060b7916025916020909101906200b0f9565b508260ff1667ffffffffffffffff811115620060d757620060d76200b4e8565b60405190808252806020026020018201604052801562006101578160200160208202803683370190505b50805162006118916026916020909101906200b179565b508260ff1667ffffffffffffffff8111156200613857620061386200b4e8565b60405190808252806020026020018201604052801562006162578160200160208202803683370190505b50805162006179916027916020909101906200b0f9565b508260ff1667ffffffffffffffff8111156200619957620061996200b4e8565b604051908082528060200260200182016040528015620061c3578160200160208202803683370190505b508051620061da916028916020909101906200b0f9565b508260ff1667ffffffffffffffff811115620061fa57620061fa6200b4e8565b60405190808252806020026020018201604052801562006224578160200160208202803683370190505b5080516200623b916029916020909101906200b0f9565b506040805160018082528183019092529060208083019080368337505081516200626d92602a9250602001906200b0f9565b506040517fffa1864900000000000000000000000000000000000000000000000000000000815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015620062d6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620062fc91906200c194565b602a80545f906200631157620063116200c277565b5f918252602082200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0393909316929092179091555b8360ff168160ff16101562006569575f6200636f8260016200c23f565b60ff1690505f838360ff16815181106200638d576200638d6200c277565b602002602001015190508160256001018460ff1681548110620063b457620063b46200c277565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055505f6001600160a01b0316816001600160a01b031603620064905781306040516200640f906200b227565b63ffffffff90921682526001600160a01b03166020820152604001604051809103905ff08015801562006444573d5f803e3d5ffd5b506025805460ff86169081106200645f576200645f6200c277565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555062006525565b813082604051620064a1906200b235565b63ffffffff90931683526001600160a01b039182166020840152166040820152606001604051809103905ff080158015620064de573d5f803e3d5ffd5b506025805460ff8616908110620064f957620064f96200c277565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6200655e60255f018460ff16815481106200654457620065446200c277565b5f918252602090912001546001600160a01b031662005cc8565b505060010162006352565b503060405162006579906200b243565b6001600160a01b039091168152602001604051809103905ff080158015620065a3573d5f803e3d5ffd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790555f5b8360ff168160ff16101562007f36575f8360018111156200660357620066036200c983565b0362007d08575f60255f018260ff16815481106200662557620066256200c277565b905f5260205f20015f9054906101000a90046001600160a01b03169050308164e8d4a51000620186a06040516200665c906200b251565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff08015801562006699573d5f803e3d5ffd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040518190620066e2906200b25f565b6001600160a01b039091168152602001604051809103905ff0801580156200670c573d5f803e3d5ffd5b50602c6001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550308164e8d4a51000620186a06040516200674f906200b26d565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff0801580156200678c573d5f803e3d5ffd5b50602e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556025805460ff8416908110620067df57620067df6200c277565b5f91825260209091200154602c546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b15801562006847575f80fd5b505af11580156200685a573d5f803e3d5ffd5b5050505060255f018260ff16815481106200687957620068796200c277565b5f91825260209091200154602d546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b158015620068e1575f80fd5b505af1158015620068f4573d5f803e3d5ffd5b5050505060255f018260ff16815481106200691357620069136200c277565b5f91825260209091200154602e546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b1580156200697b575f80fd5b505af11580156200698e573d5f803e3d5ffd5b5050602c54602780546001600160a01b039092169350915060ff8516908110620069bc57620069bc6200c277565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602d546028805491909216919060ff851690811062006a1b5762006a1b6200c277565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602e546029805491909216919060ff851690811062006a7a5762006a7a6200c277565b5f918252602082200180546001600160a01b03939093167fffffffffffffffffffffffff0000000000000000000000000000000000000000909316929092179091556040805160018082528183019092529081602001602082028036833701905050905030815f8151811062006af45762006af46200c277565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092525f9290919082016060803683375050602c5482519293506001600160a01b0316918391505f9062006b515762006b516200c277565b6001600160a01b039283166020918202929092010152602d5482519116908290600190811062006b855762006b856200c277565b6001600160a01b039283166020918202929092010152602e5482519116908290600290811062006bb95762006bb96200c277565b6001600160a01b039283166020918202929092010152602b5460405185925f9285929116903090879062006bed906200b27b565b62006bfe969594939291906200c9b0565b604051809103905ff08015801562006c18573d5f803e3d5ffd5b50602f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff861690811062006c6b5762006c6b6200c277565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1660405162006c9d906200b289565b63ffffffff9091168152602001604051809103905ff08015801562006cc4573d5f803e3d5ffd5b50603180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602f546040517fc7b2370b00000000000000000000000000000000000000000000000000000000815260048101929092529091169063c7b2370b906024015f604051808303815f87803b15801562006d52575f80fd5b505af115801562006d65573d5f803e3d5ffd5b5050505060256001018460ff168154811062006d855762006d856200c277565b5f918252602090912060088204015460079091166004026101000a900463ffffffff1662006db58560016200c23f565b602b5460405184916001600160a01b031690602a90600190889062006dda906200b297565b62006dec97969594939291906200ca00565b604051809103905ff08015801562006e06573d5f803e3d5ffd5b50603080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff861690811062006e595762006e596200c277565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16670de0b6b3a764000060405162006e94906200b2a5565b63ffffffff90921682526020820152604001604051809103905ff08015801562006ec0573d5f803e3d5ffd5b50603280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f39f26dfc000000000000000000000000000000000000000000000000000000008152670de0b6b3a764000060048201819052602482015261271060448201526339f26dfc906064015f604051808303815f87803b15801562006f5c575f80fd5b505af115801562006f6f573d5f803e3d5ffd5b50506030546032546040517fc7b2370b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063c7b2370b91506024015f604051808303815f87803b15801562006fd3575f80fd5b505af115801562006fe6573d5f803e3d5ffd5b5050505050506200701160405180606001604052806060815260200160608152602001606081525090565b6200701e8660016200c23f565b60ff1667ffffffffffffffff8111156200703c576200703c6200b4e8565b6040519080825280602002602001820160405280156200709c57816020015b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a082015282525f199092019101816200705b5790505b508152620070ac8660016200c23f565b60ff1667ffffffffffffffff811115620070ca57620070ca6200b4e8565b6040519080825280602002602001820160405280156200711c57816020015b604080516080810182525f8082526020808301829052928201819052606082015282525f19909201910181620070e95790505b5060208201526200712f8660016200c23f565b60ff1667ffffffffffffffff8111156200714d576200714d6200b4e8565b6040519080825280602002602001820160405280156200719357816020015b604080518082019091525f80825260208201528152602001906001900390816200716c5790505b50604082810191909152805160018082528183019092525f91602080830190803683375050604080515f80825260208201909252603054845194955090936001600160a01b039091169250849190620071f057620071f06200c277565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5b8860ff168160ff161015620078a2578060ff168660ff16031562007899575f6200723e8260016200c23f565b60408051600180825281830190925260ff9290921692505f9190816020015b620072676200b2b3565b8152602001906001900390816200725d5790505090505f6040518060c00160405280606467ffffffffffffffff168152602001875160ff168152602001865160ff1681526020015f60ff16815260200187815260200186815250905060405180604001604052808463ffffffff16815260200182815250825f81518110620072f357620072f36200c277565b6020908102919091010152602c546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906329460b0b90620073499085906004016200caad565b5f604051808303815f87803b15801562007361575f80fd5b505af115801562007374573d5f803e3d5ffd5b5050602d546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329460b0b9150620073c39085906004016200caad565b5f604051808303815f87803b158015620073db575f80fd5b505af1158015620073ee573d5f803e3d5ffd5b505f925060019150620073fe9050565b6040519080825280602002602001820160405280156200743b57816020015b620074276200b318565b8152602001906001900390816200741d5790505b506040805180820182526127108152602f546001600160a01b0316602080830191909152825180840190935263ffffffff88168352820181905282519293509183905f906200748e576200748e6200c277565b6020908102919091010152602c546040517fc14c43490000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c14c434990620074e49085906004016200cba8565b5f604051808303815f87803b158015620074fc575f80fd5b505af11580156200750f573d5f803e3d5ffd5b50506040805160c08101825263ffffffff89168152611388602082018190529181019190915261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a08201528b518051919550935060ff89169250821090506200758457620075846200c277565b602002602001018190525060405180608001604052808463ffffffff16815260200161138867ffffffffffffffff16815260200161271061ffff1681526020016402540be4006fffffffffffffffffffffffffffffffff1681525087602001518560ff1681518110620075fb57620075fb6200c277565b602002602001018190525060405180604001604052808463ffffffff168152602001600381525087604001518560ff16815181106200763e576200763e6200c277565b60200260200101819052505f60256006015f9054906101000a90046001600160a01b03166001600160a01b031663c18403276040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200769e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620076c491906200cc18565b6040805160018082528183019092529192505f9190816020015b620077116040805180820182525f8082528251606081018452818152602081810183905293810191909152909182015290565b815260200190600190039081620076de57905050905060405180604001604052808663ffffffff16815260200160405180606001604052808560016200775891906200cc36565b6fffffffffffffffffffffffffffffffff1681526001602082018190526040909101529052815182905f906200779257620077926200c277565b6020908102919091010152602b546040517f3161b7f60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690633161b7f690620077e89084906004016200cc6d565b5f604051808303815f87803b15801562007800575f80fd5b505af115801562007813573d5f803e3d5ffd5b5050602b546040517f5d6d7ccb00000000000000000000000000000000000000000000000000000000815268056bc75e2d6310000060048201526001600160a01b039091169250635d6d7ccb91506024015f604051808303815f87803b1580156200787c575f80fd5b505af11580156200788f573d5f803e3d5ffd5b5050505050505050505b60010162007212565b506040805160018082528183019092525f91816020015b620078c36200b35a565b815260200190600190039081620078b95750506040805160c081018252602f546001600160a01b03168152855160ff9081166020808401919091528651909116828401525f606083018190526080830188905260a083018790528351808501909452620111718452908301829052835193945090928491906200794a576200794a6200c277565b6020908102919091010152602e546040517fc85f4b4e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c85f4b4e90620079a09085906004016200ccea565b5f604051808303815f87803b158015620079b8575f80fd5b505af1158015620079cb573d5f803e3d5ffd5b5050505050506040518060c0016040528060256001018760ff1681548110620079f857620079f86200c277565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff168252611388908201819052604082015261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a0909101528351805160ff8b1690811062007a745762007a746200c277565b6020026020010181905250604051806080016040528060256001018760ff168154811062007aa65762007aa66200c277565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff1682526113888282015261271060408301526402540be400606090920191909152840151805160ff8b1690811062007b055762007b056200c277565b6020026020010181905250604051806040016040528060256001018760ff168154811062007b375762007b376200c277565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff16825260039101526040840151805160ff8b1690811062007b7f5762007b7f6200c277565b6020908102919091010152602f5483516040517f3d85ac330000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691633d85ac339162007bd5916004016200cde4565b5f604051808303815f87803b15801562007bed575f80fd5b505af115801562007c00573d5f803e3d5ffd5b505060305460208601516040517f52d3b8710000000000000000000000000000000000000000000000000000000081526001600160a01b0390921693506352d3b871925062007c52916004016200ce7f565b5f604051808303815f87803b15801562007c6a575f80fd5b505af115801562007c7d573d5f803e3d5ffd5b505060325460408087015190517ff5ff608f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909216935063f5ff608f925062007ccf916004016200cefd565b5f604051808303815f87803b15801562007ce7575f80fd5b505af115801562007cfa573d5f803e3d5ffd5b505050505050505062007f2d565b600183600181111562007d1f5762007d1f6200c983565b0362007eca575f3060255f018360ff168154811062007d425762007d426200c277565b5f918252602090912001546040516001600160a01b039091169062007d67906200b3b9565b6001600160a01b03928316815291166020820152604001604051809103905ff08015801562007d98573d5f803e3d5ffd5b50905060255f018260ff168154811062007db65762007db66200c277565b5f918252602090912001546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063e8964e81906024015f604051808303815f87803b15801562007e1c575f80fd5b505af115801562007e2f573d5f803e3d5ffd5b505050508060256002018360ff168154811062007e505762007e506200c277565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060256003018360ff168154811062007e985762007e986200c277565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505062007f2d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206c696272617279207479706500000000000000000000000060448201526064016200475d565b600101620065de565b505f5b8360ff168160ff16101562002d89575f60255f018260ff168154811062007f645762007f646200c277565b5f9182526020822001546001600160a01b0316915084600181111562007f8e5762007f8e6200c983565b03620080ff57806001600160a01b031663aafea3126201117160256004018560ff168154811062007fc35762007fc36200c277565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b15801562008030575f80fd5b505af115801562008043573d5f803e3d5ffd5b50505050806001600160a01b031663a718531b6201117160256004018560ff16815481106200807657620080766200c277565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b158015620080e7575f80fd5b505af1158015620080fa573d5f803e3d5ffd5b505050505b5f5b8560ff168160ff1610156200829d578060ff168360ff16031562008294576001600160a01b03821663aafea3126200813b8360016200c23f565b6027805460ff88169081106200815557620081556200c277565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b158015620081bf575f80fd5b505af1158015620081d2573d5f803e3d5ffd5b50505050816001600160a01b031663a718531b826001620081f491906200c23f565b6028805460ff88169081106200820e576200820e6200c277565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b1580156200827c575f80fd5b505af11580156200828f573d5f803e3d5ffd5b505050505b60010162008101565b505060010162007f39565b606060158054806020026020016040519081016040528092919081815260200182805480156200215e57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116200213f575050505050905090565b5f60235f62008318868662008887565b63ffffffff16815260208101919091526040015f908120546001600160a01b031691508062008347846200a686565b915091505f6040518060600160405280620083638989620089e1565b63ffffffff1681526020016200837a8989620089f2565b81526020016200838b898962008a0e565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e848484620083b78c8c62008a34565b620083c38d8d62008a48565b620083cf8e8e6200a2be565b60405180602001604052805f8152506040518963ffffffff1660e01b815260040162008401969594939291906200cf46565b5f604051808303818589803b15801562008419575f80fd5b5088f11580156200842c573d5f803e3d5ffd5b50505050505050505050505050565b604080513060248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f91ac5e4f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391620084f291906004016200b6da565b5f604051808303815f87803b1580156200850a575f80fd5b505af11580156200851d573d5f803e3d5ffd5b5050603a546033546001600160a01b03918216935063d0a102609250610100900416620085496200867c565b603b5460405160e085901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039384166004820152602481019290925260a060448301525f60a483018190529216606482015260c0608482015260c481019190915260e4015f604051808303815f87803b158015620085d0575f80fd5b505af115801562002d89573d5f803e3d5ffd5b5f8062005f7784846200a7c9565b5f620085fe858562008887565b90505f6200860d86866200a843565b63ffffffff83165f90815260208080526040808320848452909152812091925062008639888862008a48565b90506200864782826200a854565b5f81815260216020526040902062008661888a836200d004565b505f81815260226020526040902062005cbd8688836200d004565b6040517f6c5d32a9000000000000000000000000000000000000000000000000000000008152602060048201525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d90636c5d32a9906024015f60405180830381865afa158015620086e5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200870e91908101906200c4b5565b62008719906200d0cb565b905090565b60606200877b5f87856001600160a01b0386168989604051602001620087469291906200d0ef565b60408051601f19818403018152908290526200876692916020016200c7f8565b6040516020818303038152906040526200a8e7565b9695505050505050565b620087c783836040518060400160405280600e81526020017f7465726d3120213d207465726d320000000000000000000000000000000000008152506200a0d5565b62001caf83826040518060400160405280600e81526020017f7465726d3120213d207465726d330000000000000000000000000000000000008152506200a0d5565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b5f6040518083038186803b15801562008874575f80fd5b505afa158015620012e5573d5f803e3d5ffd5b5f620088986031602d84866200d103565b620088a3916200d12c565b60e01c9392505050565b5f805f805f620088bf8660056200a91b565b915091508162008952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f7074696f6e7348656c7065723a206c7a52656164206f7074696f6e206e6f7460448201527f20666f756e64000000000000000000000000000000000000000000000000000060648201526084016200475d565b6040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca8690620089909084906004016200b6da565b606060405180830381865afa158015620089ac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620089d291906200d173565b94509450945050509193909250565b5f62008898600d600984866200d103565b5f62008a03602d600d84866200d103565b6200227a916200d1b9565b5f62008a1f6009600184866200d103565b62008a2a916200d1d7565b60c01c9392505050565b5f6200227a62008a4584846200a843565b90565b5f62008a036071605184866200d103565b62008a636200af57565b60335462008a759060ff165f620020b0565b60025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c0954603d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169182179055604051309062008ae6906200b3c7565b62008af39291906200d21e565b604051809103905ff08015801562008b0d573d5f803e3d5ffd5b50603380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384160217905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e04754604051911690309062008b84906200b3c7565b62008b919291906200d2bb565b604051809103905ff08015801562008bab573d5f803e3d5ffd5b50603580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e54604051911690309062008c1e906200b3c7565b62008c2b9291906200d335565b604051809103905ff08015801562008c45573d5f803e3d5ffd5b50603780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff81111562008ca15762008ca16200b4e8565b60405190808252806020026020018201604052801562008ccb578160200160208202803683370190505b5060355481519192506001600160a01b03169082905f9062008cf15762008cf16200c277565b6001600160a01b0392831660209182029290920101526033548251610100909104909116908290600190811062008d2c5762008d2c6200c277565b6001600160a01b03928316602091820292909201015260375482519116908290600290811062008d605762008d606200c277565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca2549062008db69084906004016200b785565b5f604051808303815f87803b15801562008dce575f80fd5b505af115801562008de1573d5f803e3d5ffd5b50505050603360019054906101000a90046001600160a01b031660405162008e09906200b3d5565b62008e1591906200d3af565b604051809103905ff08015801562008e2f573d5f803e3d5ffd5b50603980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c095460405191921690309062008ea6906200b3e3565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff08015801562008ee0573d5f803e3d5ffd5b50603480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556039546033546040519184169361010090910416919062008f39906200b3f1565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff08015801562008f73573d5f803e3d5ffd5b50603a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e04754604051911690309062008fe6906200b3c7565b62008ff39291906200d441565b604051809103905ff0801580156200900d573d5f803e3d5ffd5b50603680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e54604051911690309062009080906200b3c7565b6200908d9291906200d4bb565b604051809103905ff080158015620090a7573d5f803e3d5ffd5b50603880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff8111156200910357620091036200b4e8565b6040519080825280602002602001820160405280156200912d578160200160208202803683370190505b5060365481519192506001600160a01b03169082905f906200915357620091536200c277565b6001600160a01b0392831660209182029290920101526034548251911690829060019081106200918757620091876200c277565b6001600160a01b039283166020918202929092010152603854825191169082906002908110620091bb57620091bb6200c277565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca25490620092119084906004016200b785565b5f604051808303815f87803b15801562009229575f80fd5b505af11580156200923c573d5f803e3d5ffd5b5050603354604080517fc657c7180000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b031660048301526024820152600d60448201527f41737365744f46543a3a617262000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b158015620092e7575f80fd5b505af1158015620092fa573d5f803e3d5ffd5b5050603554604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b158015620093a1575f80fd5b505af1158015620093b4573d5f803e3d5ffd5b5050603754604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b1580156200945b575f80fd5b505af11580156200946e573d5f803e3d5ffd5b5050603454604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601460448201527f53686172654f4654416461707465723a3a6172620000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562009515575f80fd5b505af115801562009528573d5f803e3d5ffd5b5050603654604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b158015620095cf575f80fd5b505af1158015620095e2573d5f803e3d5ffd5b5050603854604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562009689575f80fd5b505af11580156200969c573d5f803e3d5ffd5b5050603954604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600a60448201527f5661756c743a3a617262000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562009743575f80fd5b505af115801562009756573d5f803e3d5ffd5b5050603a54604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601660448201527f5661756c74436f6d706f73657253796e633a3a617262000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b158015620097fd575f80fd5b505af115801562009810573d5f803e3d5ffd5b5050603e546200983692506001600160a01b0316905068056bc75e2d631000006200af61565b603d5462009857906001600160a01b031668056bc75e2d631000006200af61565b604080516003808252608082019092525f91816020015b60408051606080820183525f8083526020830152918101919091528152602001906001900390816200986e5790505090506040518060600160405280600363ffffffff168152602001600161ffff168152602001603f8054620098d1906200c1bf565b80601f0160208091040260200160405190810160405280929190818152602001828054620098ff906200c1bf565b80156200994e5780601f1062009924576101008083540402835291602001916200994e565b820191905f5260205f20905b8154815290600101906020018083116200993057829003601f168201915b5050505050815250815f815181106200996b576200996b6200c277565b60200260200101819052506040518060600160405280600263ffffffff168152602001600161ffff168152602001603f8054620099a8906200c1bf565b80601f0160208091040260200160405190810160405280929190818152602001828054620099d6906200c1bf565b801562009a255780601f10620099fb5761010080835404028352916020019162009a25565b820191905f5260205f20905b81548152906001019060200180831162009a0757829003601f168201915b50505050508152508160018151811062009a435762009a436200c277565b60200260200101819052506040518060600160405280600163ffffffff168152602001600161ffff168152602001603f805462009a80906200c1bf565b80601f016020809104026020016040519081016040528092919081815260200182805462009aae906200c1bf565b801562009afd5780601f1062009ad35761010080835404028352916020019162009afd565b820191905f5260205f20905b81548152906001019060200180831162009adf57829003601f168201915b50505050508152508160028151811062009b1b5762009b1b6200c277565b60209081029190910101526033546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063b98bd0709062009b759084906004016200d535565b5f604051808303815f87803b15801562009b8d575f80fd5b505af115801562009ba0573d5f803e3d5ffd5b50506035546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd070915062009bef9084906004016200d535565b5f604051808303815f87803b15801562009c07575f80fd5b505af115801562009c1a573d5f803e3d5ffd5b50506037546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd070915062009c699084906004016200d535565b5f604051808303815f87803b15801562009c81575f80fd5b505af115801562009c94573d5f803e3d5ffd5b50506034546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd070915062009ce39084906004016200d535565b5f604051808303815f87803b15801562009cfb575f80fd5b505af115801562009d0e573d5f803e3d5ffd5b50506036546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd070915062009d5d9084906004016200d535565b5f604051808303815f87803b15801562009d75575f80fd5b505af115801562009d88573d5f803e3d5ffd5b50506038546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd070915062009dd79084906004016200d535565b5f604051808303815f87803b15801562009def575f80fd5b505af115801562009e02573d5f803e3d5ffd5b50505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f6906044016200885d565b5f808360405160200162009e8291906200d5d2565b60408051601f198184030181529082905262009ea39185906020016200d5ef565b60405160208183030381529060405290508051602082015ff09150813b620046d5575f80fd5b5f805f805f62009edb8660036200a91b565b915091508162009f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a436f6d706f7365206f7074696f6e2060448201527f6e6f7420666f756e64000000000000000000000000000000000000000000000060648201526084016200475d565b6040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab09062009fac9084906004016200b6da565b606060405180830381865afa15801562009fc8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062009fee91906200d621565b91986fffffffffffffffffffffffffffffffff9182169850911695509350505050565b5f8080601284148015906200a027575060228414155b156200a05f576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200a06c85855f6200afd4565b92506200a07c858560026200affe565b9150602284146200a08e575f6200a09c565b6200a09c858560126200affe565b90509250925092565b60606200a0cc5f86856001600160a01b03861688604051602001620087669291906200c7f8565b95945050505050565b6040517f88b44c85000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906388b44c85906200a12b908690869086906004016200d654565b5f6040518083038186803b1580156200a142575f80fd5b505afa15801562009e02573d5f803e3d5ffd5b365f62005f7760518285876200d103565b365f62005f7783605181876200d103565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290526060905f90605c0160408051601f198184030181529082905280516020909101207fe341eaa4000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291505f9081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e341eaa490604401606060405180830381865afa1580156200a23c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a26291906200d674565b6040805160208101939093528281019190915260f89290921b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260619091019091529695505050505050565b365f62005f7783607181876200d103565b5f368160018401816200a2e48888846200afd4565b6002929092019190506200a2fa8888846200b028565b94506001820161ffff821683016200a31581838b8d6200d103565b979b909a50969850505061ffff160193505050565b5f6200a35f825470010000000000000000000000000000000081046fffffffffffffffffffffffffffffffff90811691161490565b156200a371576200a37160326200b04f565b5080545f196fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909204821601165f9081526001909101602052604090205490565b80545f906fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116911681036200a3f4576200a3f460316200b04f565b5f19016fffffffffffffffffffffffffffffffff9081165f818152600185016020526040812080549190558454909216700100000000000000000000000000000000909102179092555090565b5f6200a44e83836200a91b565b509392505050565b5f805f806200a4678560026200a91b565b91509150816200a4fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696f6e7348656c7065723a206e617469766544726f70206f7074696f6e60448201527f206e6f7420666f756e640000000000000000000000000000000000000000000060648201526084016200475d565b6040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf6906200a5389084906004016200b6da565b6040805180830381865afa1580156200a553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a57991906200d6ab565b6fffffffffffffffffffffffffffffffff909116969095509350505050565b5f8080601484148015906200a5ae575060248414155b156200a5e6576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200a5f385855f6200affe565b92506200a603858560106200b060565b9150602484146200a615575f6200a09c565b6200a09c858560146200affe565b5f80603083146200a660576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200a66d84845f6200affe565b91506200a67d848460106200b08a565b90509250929050565b5f805f806200a6978560016200a91b565b91509150816200a72a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a52656365697665206f7074696f6e2060448201527f6e6f7420666f756e64000000000000000000000000000000000000000000000060648201526084016200475d565b6040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d61906200a7689084906004016200b6da565b6040805180830381865afa1580156200a783573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a7a991906200d6da565b6fffffffffffffffffffffffffffffffff91821697911695509350505050565b5f80601083148015906200a7de575060208314155b156200a816576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200a82384845f6200affe565b9150602083146200a835575f6200a67d565b6200a67d848460106200affe565b5f62008a036051603184866200d103565b81546fffffffffffffffffffffffffffffffff8082165f19019170010000000000000000000000000000000090048116908216036200a899576200a89960416200b04f565b6fffffffffffffffffffffffffffffffff165f81815260018401602052604090209190915581547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016179055565b6060848484846040516020016200a90294939291906200d70c565b6040516020818303038152906040529050949350505050565b601f546040517fe5c5e9a30000000000000000000000000000000000000000000000000000000081525f91606091839161010090046001600160a01b03169063e5c5e9a3906200a9709088906004016200b6da565b5f60405180830381865afa1580156200a98b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200a9b491908101906200d78b565b50604080515f80825260208201909252919250908190819081905b85518510156200af2c576040517f6e1775e30000000000000000000000000000000000000000000000000000000081525f90819081903090636e1775e3906200aa1f908c908c906004016200c783565b5f60405180830381865afa1580156200aa3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200aa6391908101906200d7f2565b9250925092508b60ff168360ff16036200af21575f808080805f1960ff8916016200ab89576040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d61906200aac6908a906004016200b6da565b6040805180830381865afa1580156200aae1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200ab0791906200d6da565b90955093506200ab18858d6200d84e565b9b506200ab26848c6200d84e565b9a508b8b6040516020016200ab72929190608092831b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000090811682529190921b16601082015260200190565b60405160208183030381529060405298506200af1b565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8916016200ac86576040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf6906200abf2908a906004016200b6da565b6040805180830381865afa1580156200ac0d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200ac3391906200d6ab565b90945092506200ac44848c6200d84e565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b16602082015260308101859052909b506050016200ab72565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff8916016200adc3576040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab0906200acef908a906004016200b6da565b606060405180830381865afa1580156200ad0b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200ad3191906200d621565b909650945091506200ad44858d6200d84e565b9b506200ad52848c6200d84e565b6040517fffff00000000000000000000000000000000000000000000000000000000000060f085901b1660208201527fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b8216602284015283901b166032820152909b506042016200ab72565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff8916016200af1b576040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca86906200ae2c908a906004016200b6da565b606060405180830381865afa1580156200ae48573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200ae6e91906200d173565b91965090945090506200ae82848c6200d84e565b9a506200ae90858d6200d84e565b9b506200ae9e818b6200d87a565b6040517fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b821660208401527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1660308401528e901b166034820152909a5060440160405160208183030381529060405298505b50505050505b96506200a9cf915050565b80515f036200af46575f9750955062005f7c945050505050565b60019a909950975050505050505050565b62001e416200b0a8565b6040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015f604051808303815f87803b158015620012d2575f80fd5b5f600282016200afe7818486886200d103565b6200aff2916200d89a565b60f01c95945050505050565b5f601082016200b011818486886200d103565b6200b01c916200d8e1565b60801c95945050505050565b5f8383838181106200b03e576200b03e6200c277565b919091013560f81c95945050505050565b634e487b715f52806020526024601cfd5b5f600482016200b073818486886200d103565b6200b07e916200d12c565b60e01c95945050505050565b5f602082016200b09d818486886200d103565b6200a0cc916200d1b9565b6040516200b0b6906200b3ff565b604051809103905ff0801580156200b0d0573d5f803e3d5ffd5b50601f60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550565b828054828255905f5260205f209081019282156200b167579160200282015b828111156200b16757825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039091161782556020909201916001909101906200b118565b506200b1759291506200b40d565b5090565b828054828255905f5260205f20906007016008900481019282156200b167579160200282015f5b838211156200b1e657835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026200b1a0565b80156200b2185782816101000a81549063ffffffff02191690556004016020816003010492830192600103026200b1e6565b50506200b1759291506200b40d565b615fc2806200d92983390190565b61619380620138eb83390190565b61196d8062019a7e83390190565b615881806201b3eb83390190565b612b7c8062020c6c83390190565b615cb280620237e883390190565b613af9806202949a83390190565b611b50806202cf9383390190565b614aae806202eae383390190565b612470806203359183390190565b60405180604001604052805f63ffffffff1681526020016200b3136040518060c001604052805f67ffffffffffffffff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b905290565b60405180604001604052805f63ffffffff1681526020016200b31360405180604001604052805f63ffffffff1681526020015f6001600160a01b031681525090565b60405180604001604052805f63ffffffff1681526020016200b3136040518060c001604052805f6001600160a01b031681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b611e158062035a0183390190565b613f7b806203781683390190565b611b1c806203b79183390190565b61355f806203d2ad83390190565b6124be806204080c83390190565b610aa98062042cca83390190565b5b808211156200b175575f81556001016200b40e565b6001600160a01b03811681146200b438575f80fd5b50565b5f602082840312156200b44c575f80fd5b81356200227a816200b423565b63ffffffff811681146200b438575f80fd5b5f80604083850312156200b47d575f80fd5b82356200b48a816200b459565b915060208301356200b49c816200b423565b809150509250929050565b5f8083601f8401126200b4b8575f80fd5b50813567ffffffffffffffff8111156200b4d0575f80fd5b60208301915083602082850101111562005f7c575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156200b53b576200b53b6200b4e8565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156200b56d576200b56d6200b4e8565b604052919050565b5f67ffffffffffffffff8211156200b591576200b5916200b4e8565b50601f01601f191660200190565b5f82601f8301126200b5af575f80fd5b81356200b5c66200b5c0826200b575565b6200b541565b8181528460208386010111156200b5db575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80606085870312156200b60b575f80fd5b843567ffffffffffffffff808211156200b623575f80fd5b6200b631888389016200b4a7565b909650945060208701359150808211156200b64a575f80fd5b6200b658888389016200b59f565b935060408701359150808211156200b66e575f80fd5b506200b67d878288016200b59f565b91505092959194509250565b5f5b838110156200b6a55781810151838201526020016200b68b565b50505f910152565b5f81518084526200b6c68160208601602086016200b689565b601f01601f19169290920160200192915050565b602081525f6200227a60208301846200b6ad565b60ff811681146200b438575f80fd5b8035600281106200b70c575f80fd5b919050565b5f80604083850312156200b723575f80fd5b82356200b730816200b6ee565b91506200a67d602084016200b6fd565b5f815180845260208085019450602084015f5b838110156200b77a5781516001600160a01b0316875295820195908201906001016200b753565b509495945050505050565b602081525f6200227a60208301846200b740565b5f805f606084860312156200b7ac575f80fd5b833567ffffffffffffffff8111156200b7c3575f80fd5b6200b7d1868287016200b59f565b93505060208401356200b7e4816200b6ee565b915060408401356200b7f6816200b6ee565b809150509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b848110156200b85057601f198684030189526200b83d8383516200b6ad565b988401989250908301906001016200b81e565b5090979650505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b8ee578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b031684528701518784018790526200b8da878501826200b801565b95880195935050908601906001016200b884565b509098975050505050505050565b5f805f805f805f60c0888a0312156200b913575f80fd5b87356200b920816200b459565b965060208801356200b932816200b423565b9550604088013567ffffffffffffffff808211156200b94f575f80fd5b6200b95d8b838c016200b59f565b965060608a0135955060808a013591506200b978826200b423565b90935060a089013590808211156200b98e575f80fd5b506200b99d8a828b016200b4a7565b989b979a50959850939692959293505050565b5f80602083850312156200b9c2575f80fd5b823567ffffffffffffffff8111156200b9d9575f80fd5b6200b9e7858286016200b4a7565b90969095509350505050565b61ffff811681146200b438575f80fd5b5f80604083850312156200ba15575f80fd5b82356200ba22816200b9f3565b946020939093013593505050565b5f805f604084860312156200ba43575f80fd5b833567ffffffffffffffff808211156200ba5b575f80fd5b6200ba69878388016200b4a7565b909550935060208601359150808211156200ba82575f80fd5b506200ba91868287016200b59f565b9150509250925092565b5f67ffffffffffffffff8211156200bab7576200bab76200b4e8565b5060051b60200190565b5f82601f8301126200bad1575f80fd5b813560206200bae46200b5c0836200ba9b565b8083825260208201915060208460051b8701019350868411156200bb06575f80fd5b602086015b848110156200bb2f5780356200bb21816200b423565b83529183019183016200bb0b565b509695505050505050565b5f80604083850312156200bb4c575f80fd5b823567ffffffffffffffff808211156200bb64575f80fd5b6200bb72868387016200bac1565b93506020915081850135818111156200bb89575f80fd5b85019050601f810186136200bb9c575f80fd5b80356200bbad6200b5c0826200ba9b565b81815260059190911b820183019083810190888311156200bbcc575f80fd5b928401925b828410156200bbf75783356200bbe7816200b459565b825292840192908401906200bbd1565b80955050505050509250929050565b5f815180845260208085019450602084015f5b838110156200b77a5781517fffffffff0000000000000000000000000000000000000000000000000000000016875295820195908201906001016200bc19565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b8ee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815180518785526200bcc5888601826200b6ad565b91890151858303868b01529190506200bcdf81836200bc06565b9689019694505050908601906001016200bc80565b5f805f604084860312156200bd07575f80fd5b833567ffffffffffffffff8111156200bd1e575f80fd5b6200bd2c868287016200b4a7565b909790965060209590950135949350505050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b60ff85168152606060208201525f6200bd876060830185876200bd40565b905082604083015295945050505050565b5f602082840312156200bda9575f80fd5b813567ffffffffffffffff8111156200bdc0575f80fd5b6200bdce848285016200bac1565b949350505050565b5f805f805f60a086880312156200bdeb575f80fd5b85356200bdf8816200b459565b9450602086013593506040860135925060608601356200be18816200b423565b9150608086013567ffffffffffffffff8111156200be34575f80fd5b6200be42888289016200b59f565b9150509295509295909350565b602081525f6200227a60208301846200b801565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b8ee578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b031684528701518784018790526200bee0878501826200bc06565b95880195935050908601906001016200be8a565b5f805f805f608086880312156200bf09575f80fd5b853567ffffffffffffffff808211156200bf21575f80fd5b6200bf2f89838a016200b4a7565b909750955060208801359150808211156200bf48575f80fd5b506200bf57888289016200b59f565b9350506040860135915060608601356200bf71816200b423565b809150509295509295909350565b5f80604083850312156200bf91575f80fd5b82356200ba22816200b459565b5f805f606084860312156200bfb1575f80fd5b83356200bfbe816200b6ee565b92506200bfce602085016200b6fd565b9150604084013567ffffffffffffffff8111156200bfea575f80fd5b6200ba91868287016200bac1565b6fffffffffffffffffffffffffffffffff811681146200b438575f80fd5b5f602082840312156200c027575f80fd5b81356200227a816200bff8565b5f805f80604085870312156200c048575f80fd5b843567ffffffffffffffff808211156200c060575f80fd5b6200c06e888389016200b4a7565b909650945060208701359150808211156200c087575f80fd5b506200c096878288016200b4a7565b95989497509550505050565b5f602082840312156200c0b3575f80fd5b81516200227a816200b459565b5f602082840312156200c0d1575f80fd5b5051919050565b5f6001600160a01b03808716835285602084015260a060408401526200c10260a08401866200b6ad565b93166060830152508082036080909101525f81526020019392505050565b855163ffffffff1681526020808701519082015260408087015167ffffffffffffffff16908201526001600160a01b038516606082015283608082015260e060a08201525f6200c17460e08301856200b6ad565b82810360c08401526200c18881856200b6ad565b98975050505050505050565b5f602082840312156200c1a5575f80fd5b81516200227a816200b423565b80516200b70c816200b423565b600181811c908216806200c1d457607f821691505b6020821081036200c20c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff81811683821601908111156200290457620029046200c212565b60ff82811682821603908111156200290457620029046200c212565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6001600160a01b03808a16835280891660208401525086604083015261ffff8616606083015260c060808301526200c2e260c0830185876200bd40565b82810360a08401526200c2f681856200b6ad565b9a9950505050505050505050565b604081525f6200c31860408301856200b6ad565b905060ff831660208301529392505050565b808201808211156200290457620029046200c212565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526200c38460e08501826200b6ad565b905060a083015184820360a08601526200c39f82826200b6ad565b91505060c083015184820360c08601526200a0cc82826200b6ad565b602081525f6200227a60208301846200c340565b5f80604083850312156200c3e1575f80fd5b82516200c3ee816200b423565b602084015190925080151581146200b49c575f80fd5b805167ffffffffffffffff811681146200b70c575f80fd5b80516200b70c816200b6ee565b5f805f606084860312156200c43c575f80fd5b6200c447846200c404565b925060208401516200c459816200b6ee565b60408501519092506200b7f6816200b6ee565b5f82601f8301126200c47c575f80fd5b81516200c48d6200b5c0826200b575565b8181528460208386010111156200c4a2575f80fd5b6200bdce8260208301602087016200b689565b5f602082840312156200c4c6575f80fd5b815167ffffffffffffffff8111156200c4dd575f80fd5b6200bdce848285016200c46c565b5f82601f8301126200c4fb575f80fd5b815160206200c50e6200b5c0836200ba9b565b8083825260208201915060208460051b8701019350868411156200c530575f80fd5b602086015b848110156200bb2f5780516200c54b816200b423565b83529183019183016200c535565b5f602082840312156200c56a575f80fd5b815167ffffffffffffffff808211156200c582575f80fd5b9083019060c082860312156200c596575f80fd5b6200c5a06200b515565b6200c5ab836200c404565b81526200c5bb602084016200c41c565b60208201526200c5ce604084016200c41c565b60408201526200c5e1606084016200c41c565b60608201526080830151828111156200c5f8575f80fd5b6200c606878286016200c4eb565b60808301525060a0830151828111156200c61e575f80fd5b6200c62c878286016200c4eb565b60a08301525095945050505050565b818382375f9101908152919050565b606081525f6200c65e60608301866200b6ad565b905083602083015260ff83166040830152949350505050565b63ffffffff851681526001600160a01b0384166020820152608060408201525f6200c6a660808301856200b6ad565b905082606083015295945050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b8ee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160a063ffffffff82511685526001600160a01b038983015116898601528782015181898701526200c744828701826200b6ad565b9150506060808301518187015250608080830151925085820381870152506200c76e81836200b6ad565b9689019694505050908601906001016200c6de565b604081525f6200c79760408301856200b6ad565b90508260208301529392505050565b5f602082840312156200c7b7575f80fd5b815167ffffffffffffffff808211156200c7cf575f80fd5b9083019060c082860312156200c7e3575f80fd5b6200c7ed6200b515565b6200c5ab836200c1b2565b8281525f82516200c8118160208501602087016200b689565b919091016020019392505050565b606081525f6200c83360608301866200b6ad565b60208301949094525060400152919050565b602081525f6200bdce6020830184866200bd40565b5f816200c86b576200c86b6200c212565b505f190190565b604081525f6200c88660408301856200b6ad565b82810360208401526200a0cc81856200b6ad565b606081525f6200c8ae60608301866200b6ad565b82810360208401526200c8c281866200b6ad565b905082810360408401526200877b81856200b6ad565b608081525f6200c8ec60808301876200b6ad565b82810360208401526200c90081876200b6ad565b9150508360408301526001600160a01b038316606083015295945050505050565b63ffffffff881681525f6001600160a01b03808916602084015260c060408401526200c95160c08401896200b6ad565b876060850152818716608085015283810360a08501526200c9748186886200bd40565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f6001600160a01b038089168352808816602084015260c060408401526200c9dc60c08401886200b740565b8187166060850152818616608085015283810360a08501526200c2f681866200b740565b63ffffffff881681525f602060ff8916602084015260e060408401526200ca2b60e08401896200b740565b6001600160a01b038881166060860152848203608086015287548083525f8981526020808220940191905b818110156200ca765784548416835260019485019492860192016200ca56565b505067ffffffffffffffff881660a087015285810360c08701526200ca9c81886200b740565b9d9c50505050505050505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b8ee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff168552880151888501889052805167ffffffffffffffff16888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200cb766101008801836200b740565b920151868303840160e08801529190506200cb9281836200b740565b978a01979550505091870191506001016200cad4565b602080825282518282018190525f919060409081850190868401855b828110156200cc0b578151805163ffffffff9081168652908701518051909116878601528601516001600160a01b031685850152606090930192908501906001016200cbc4565b5091979650505050505050565b5f602082840312156200cc29575f80fd5b81516200227a816200bff8565b6fffffffffffffffffffffffffffffffff8181168382160280821691908281146200cc65576200cc656200c212565b505092915050565b602080825282518282018190525f919060409081850190868401855b828110156200cc0b578151805163ffffffff90811686529087015180516fffffffffffffffffffffffffffffffff16888701528088015167ffffffffffffffff1687870152860151166060850152608090930192908501906001016200cc89565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b8ee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff16855288015188850188905280516001600160a01b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200cdb26101008801836200b740565b920151868303840160e08801529190506200cdce81836200b740565b978a01979550505091870191506001016200cd11565b602080825282518282018190525f919060409081850190868401855b828110156200cc0b578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c090930192908501906001016200ce00565b602080825282518282018190525f919060409081850190868401855b828110156200cc0b578151805163ffffffff1685528681015167ffffffffffffffff16878601528581015161ffff16868601526060908101516fffffffffffffffffffffffffffffffff1690850152608090930192908501906001016200ce9b565b602080825282518282018190525f919060409081850190868401855b828110156200cc0b578151805163ffffffff1685528601518685015292840192908501906001016200cf19565b865163ffffffff1681526020808801519082015260408088015167ffffffffffffffff16908201526001600160a01b038616606082015284608082015260e060a08201525f6200cf9b60e0830185876200bd40565b82810360c08401526200cfaf81856200b6ad565b9998505050505050505050565b601f82111562001caf57805f5260205f20601f840160051c810160208510156200cfe35750805b601f840160051c820191505b81811015620033a9575f81556001016200cfef565b67ffffffffffffffff8311156200d01f576200d01f6200b4e8565b6200d037836200d03083546200c1bf565b836200cfbc565b5f601f8411600181146200d06b575f85156200d0535750838201355b5f19600387901b1c1916600186901b178355620033a9565b5f83815260208120601f198716915b828110156200d09c57868501358255602094850194600190920191016200d07a565b50868210156200d0b9575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b805160208083015191908110156200c20c575f1960209190910360031b1b16919050565b604081525f6200c79760408301856200c340565b5f80858511156200d112575f80fd5b838611156200d11f575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156200cc655760049490940360031b84901b1690921692915050565b5f805f606084860312156200d186575f80fd5b83516200d193816200bff8565b60208501519093506200d1a6816200b459565b60408501519092506200b7f6816200bff8565b8035602083101562002904575f19602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156200cc655760089490940360031b84901b1690921692915050565b608081525f6200d25b60808301600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d29881600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b0380851660408401528084166060840152509392505050565b608081525f6200d2f860808301600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d29881600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b608081525f6200d37260808301600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d29881600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b606081525f6200d3ec60608301600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d42981600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b038316604083015292915050565b608081525f6200d47e60808301600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d29881600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b608081525f6200d4f860808301600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d29881600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b8ee578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff168885015286015160608785018190526200d5bd818601836200b6ad565b9689019694505050908601906001016200d55c565b5f82516200d5e58184602087016200b689565b9190910192915050565b5f83516200d6028184602088016200b689565b8351908301906200d6188183602088016200b689565b01949350505050565b5f805f606084860312156200d634575f80fd5b83516200d641816200b9f3565b60208501519093506200d1a6816200bff8565b838152826020820152606060408201525f6200a0cc60608301846200b6ad565b5f805f606084860312156200d687575f80fd5b83516200d694816200b6ee565b602085015160409095015190969495509392505050565b5f80604083850312156200d6bd575f80fd5b82516200d6ca816200bff8565b6020939093015192949293505050565b5f80604083850312156200d6ec575f80fd5b82516200d6f9816200bff8565b60208401519092506200b49c816200bff8565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f82516200d77b81602c8501602087016200b689565b91909101602c0195945050505050565b5f80604083850312156200d79d575f80fd5b825167ffffffffffffffff808211156200d7b5575f80fd5b6200d7c3868387016200c46c565b935060208501519150808211156200d7d9575f80fd5b506200d7e8858286016200c46c565b9150509250929050565b5f805f606084860312156200d805575f80fd5b83516200d812816200b6ee565b602085015190935067ffffffffffffffff8111156200d82f575f80fd5b6200d83d868287016200c46c565b925050604084015190509250925092565b6fffffffffffffffffffffffffffffffff818116838216019080821115620046d557620046d56200c212565b63ffffffff818116838216019080821115620046d557620046d56200c212565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156200cc655760029490940360031b84901b1690921692915050565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156200cc655760109490940360031b84901b169092169291505056fe60c06040526001600d5534801562000015575f80fd5b5060405162005fc238038062005fc28339810160408190526200003891620002c2565b81816001600160a01b0381166200006957604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007481620000c8565b5063ffffffff166080526040516200008c90620002b4565b604051809103905ff080158015620000a6573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c09062000117565b505062000338565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200012162000284565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200016b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000191919062000310565b620001af5760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001e95760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002b25760405163118cdaa760e01b815233600482015260240162000060565b565b6102818062005d4183390190565b5f8060408385031215620002d4575f80fd5b825163ffffffff81168114620002e8575f80fd5b60208401519092506001600160a01b038116811462000305575f80fd5b809150509250929050565b5f6020828403121562000321575f80fd5b8151801515811462000331575f80fd5b9392505050565b60805160a0516159c46200037d5f395f61078601525f818161054301528181612d7701528181613782015281816137e801528181613f570152613fbd01526159c45ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b73578063ef667aa114610b92578063f2fde38b14610bdb578063f64be4c714610bfa575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b54575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614886565b610c2e565b005b348015610374575f80fd5b5061037d610d41565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c036600461492e565b610d71565b6103d86103d3366004614976565b6110f2565b60405161039d91906149c5565b3480156103f0575f80fd5b506103676103ff366004614a07565b611258565b34801561040f575f80fd5b5061042361041e366004614a72565b611315565b60405161039d9190614b2e565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614b57565b61142b565b34801561049b575f80fd5b506104636104aa366004614bb9565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614bf8565b6115ff565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614b57565b611694565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614c20565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614c39565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614c72565b611841565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614c8b565b61188f565b34801561067e575f80fd5b5061036761068d36600461492e565b611904565b34801561069d575f80fd5b506103676106ac366004614d7f565b611df9565b3480156106bc575f80fd5b506103676106cb366004614e59565b611e63565b3480156106db575f80fd5b5061070e6106ea366004614c72565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614c72565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f31565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004614ee3565b611f44565b3480156107ea575f80fd5b506106446107f9366004614f30565b612047565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120b2565b60405161039d9190614f59565b610367610849366004614fa5565b612112565b348015610859575f80fd5b50610367610868366004615049565b6122ce565b348015610878575f80fd5b5061060c610887366004614c39565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd366004615049565b6125c0565b3480156108dd575f80fd5b5061060c6108ec366004614c39565b612694565b3480156108fc575f80fd5b5061036761090b366004615089565b61272b565b34801561091b575f80fd5b5061036761092a3660046150b2565b612b2a565b34801561093a575f80fd5b506103676109493660046150cd565b612b42565b348015610959575f80fd5b50610463610968366004614c39565b612cd8565b348015610978575f80fd5b50610367610987366004615107565b612de6565b348015610997575f80fd5b506105ae6109a6366004614bf8565b61309d565b3480156109b6575f80fd5b506103676109c5366004614c20565b613123565b3480156109d5575f80fd5b506106446109e4366004614f30565b613198565b3480156109f4575f80fd5b50610463610a03366004615121565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614c20565b6131fc565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a366004615089565b613273565b348015610a8a575f80fd5b50610367610a99366004615121565b61356e565b348015610aa9575f80fd5b50610644610ab8366004614c20565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614bf8565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614976565b613690565b60405161039d9190615160565b348015610b4d575f80fd5b505f6105ae565b348015610b5f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b7e575f80fd5b50610367610b8d366004614c20565b6139b1565b348015610b9d575f80fd5b5061070e610bac366004614bf8565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610be6575f80fd5b50610367610bf5366004614c20565b613bab565b348015610c05575f80fd5b506105ae610c14366004614c72565b60096020525f90815260409020546001600160a01b031681565b610c7d86610c3f60208a018a614c72565b60208a0135610c5460608c0160408d01615177565b898989604051602001610c6993929190615190565b604051602081830303815290604052613c01565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cd1908b908a908a908a9033908b908b9060040161522a565b5f604051808303818588803b158015610ce8575f80fd5b505af1158015610cfa573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d30929190615280565b60405180910390a150505050505050565b5f80610d50600d546001141590565b610d5b575f80610d69565b610d69600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610dc4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e7d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3591906152d1565b6002811115610e4657610e466152a4565b03610e7d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f49576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610eef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1391906152fc565b610f49576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f5288613e3f565b5f610f5d89896115ff565b9150508015610f98576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03610ff6576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001015561108c565b43861161102f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b6110fa6147d8565b6111076020840184614c72565b336001600d5414611144576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d5561118390860160808701615317565b80156111985750600e546001600160a01b0316155b156111cf576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111db3388613ea8565b915091505f6111e73490565b90505f6112026111fd60a08b0160808c01615317565b614180565b90506112138460400151838361424a565b600e54604085015160200151611235916001600160a01b03169083868c6142b1565b6040840151516112479083858b6142de565b50506001600d555095945050505050565b61126185613e3f565b5f83838360405160200161127793929190615190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112d3866112b86020880188614c72565b60208801356112cd60608a0160408b01615177565b85613c01565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611305929190615280565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661136b576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113dc573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261142191908101906153f8565b9695505050505050565b61143485613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114bf576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061150b575080155b1561154e576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611305565b6001600160a01b038083165f90815260076020908152604080832063ffffffff86168452909152812054909116908161168d5763ffffffff83165f908152600a60205260409020546001600160a01b0316915081611689576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b61169d85613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611723576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114b6565b80158061176d57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117b0576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611305565b63ffffffff81165f908152600960205260408120546001600160a01b031615801590611889575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516118ee9a9998979695949392919061542a565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561193657506001600160a01b03811615155b1561196d576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a26575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119de91906152d1565b60028111156119ef576119ef6152a4565b03611a26576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611af2576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611a98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611abc91906152fc565b611af2576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611afb88613e3f565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b62576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d4f576001600160a01b0381161580611c1c57506001600160a01b038716155b15611c53576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c7a91906154bf565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d41918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611dee565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110df565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e4e9a999897969594939291906154d2565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611eb6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ebf85613e3f565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f0890889087908790600401615530565b5f604051808303815f87803b158015611f1f575f80fd5b505af1158015611dee573d5f803e3d5ffd5b611f39614308565b611f425f61434d565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fb2576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fc292919061567b565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161203891908890889088908890889061568a565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120ab9185918591859061207690850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166143b4565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561210857602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116120ea575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161215c908790879061567b565b604051809103902090508082146121a9576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114b6565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612230908e908d908c908c9033908d908d906004016156d2565b5f604051808303818588803b158015612247575f80fd5b505af1158015612259573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122ba94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561230057506001600160a01b03811615155b15612337576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b038116156123f1576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612385573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a991906152d1565b60028111156123ba576123ba6152a4565b036123f1576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124bd576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248791906152fc565b6124bd576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c687613e3f565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361252c576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d30565b5f805f6125cd86866115ff565b91509150816001600160a01b0316846001600160a01b0316036125f5576001925050506120ab565b5f81612628576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061263d565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126775750438160200151115b1561268857600193505050506120ab565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612723576001016126d0565b949350505050565b612733614308565b6001600160a01b0382165f90815260056020526040902054829060ff16612786576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561283f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f791906152d1565b6002811115612808576128086152a4565b0361283f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561290b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d591906152fc565b61290b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612966576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612a965763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a3b87436154bf565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b20565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b32614308565b612b3d83838361444c565b505050565b612b5982612b536020860186614c72565b336125c0565b612b8f576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bb790870187614c72565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612bf48484836143b4565b612c2a576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c3584848361446f565b612c6b576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c9783612c7c6020870187614c72565b6020870135612c916060890160408a01615177565b86614528565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612cca93929190615725565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d209067ffffffffffffffff16600161574d565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612dee614308565b6001600160a01b0381165f90815260056020526040902054819060ff16612e41576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612efb576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb391906152d1565b6002811115612ec457612ec46152a4565b03612efb576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fc7576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906152fc565b612fc7576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613020576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611305565b6001600160a01b038083165f90815260066020908152604080832063ffffffff861684529091529020541680611889575063ffffffff81165f908152600960205260409020546001600160a01b031680611889576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61312b614308565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b0381165f90815260016020908152604082206120ab918591859185906131c790850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff1661446f565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981910161318d565b6001600160a01b0382165f90815260056020526040902054829060ff166132c6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561337f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613313573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333791906152d1565b6002811115613348576133486152a4565b0361337f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561344b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156133f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061341591906152fc565b61344b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613453614308565b845f0361349d5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613522565b4385116134d6576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d30565b61357784613e3f565b613582848484612694565b61358d90600161574d565b67ffffffffffffffff168167ffffffffffffffff16146135e5576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612cca565b604080518082019091525f80825260208201526136b360a0840160808501615317565b80156136c85750600e546001600160a01b0316155b156136ff576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061372790870187614c72565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137629067ffffffffffffffff16600161574d565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137cd9190614c72565b63ffffffff168152602001866020013581526020016138c7847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061381a9190614c72565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b81526020016138d9604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139259050856109a66020890189614c72565b90506001600160a01b03811663d80e9bd98361394460608a018a61576e565b61395460a08c0160808d01615317565b6040518563ffffffff1660e01b815260040161397394939291906157cf565b6040805180830381865afa15801561398d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142191906158c3565b6139b9614308565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5891906152fc565b613a8e576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613ae0576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161318d565b613bb3614308565b6001600160a01b038116613bf5576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114b6565b613bfe8161434d565b50565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d5957600181015b8467ffffffffffffffff168167ffffffffffffffff1611613cf5576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613ced576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b600101613c4d565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613dec576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114b6565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613e7157506001600160a01b038181165f908152600f6020526040902054163314155b15613bfe576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613eb06147d8565b5f80613f3785613ec36020870187614c72565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fa29190614c72565b63ffffffff16815260200186602001358152602001613fef847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061381a9190614c72565b8152602001614001604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061404d9050876109a66020890189614c72565b90505f806001600160a01b038316634389e58f8561406e60608c018c61576e565b61407e60a08e0160808f01615317565b6040518563ffffffff1660e01b815260040161409d94939291906157cf565b5f604051808303815f875af11580156140b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526140fd91908101906158dd565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161413160608b018b61576e565b866040516141429493929190615929565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b5f811561424557600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156141e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061420a9190615969565b9050805f03614245576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b825182108061425c5750808360200151115b15612b3d57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114b6565b83156142c2576142c28583866145a7565b828410156142d7576142d785828686036145a7565b5050505050565b83156142ee576142ee82856145fb565b8284101561430257614302818585036145fb565b50505050565b5f546001600160a01b03163314611f42576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114b6565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061272357506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d9061440d908790600401615980565b602060405180830381865afa158015614428573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272391906152fc565b6001600160a01b03831661446457612b3d82826145fb565b612b3d8383836145a7565b5f67ffffffffffffffff821661448b6060860160408701615177565b67ffffffffffffffff16118061272357506001600160a01b0383165f90815260026020908152604082209082906144c490880188614c72565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f8660400160208101906145049190615177565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b8061455f576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6001600160a01b0382166145e7576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b3d6001600160a01b03841683836146d6565b6001600160a01b03821661463b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614684576040519150601f19603f3d011682016040523d82523d5f602084013e614689565b606091505b5050905080612b3d576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114b6565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b3d93879390925f9283929183919082885af180614772576040513d5f823e3d81fd5b50505f513d91508115614789578060011415614796565b6001600160a01b0384163b155b15614302576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114b6565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161481760405180604001604052805f81526020015f81525090565b905290565b5f6060828403121561482c575f80fd5b50919050565b80356001600160a01b0381168114614245575f80fd5b5f8083601f840112614858575f80fd5b50813567ffffffffffffffff81111561486f575f80fd5b60208301915083602082850101111561168d575f80fd5b5f805f805f805f60e0888a03121561489c575f80fd5b6148a6898961481c565b96506148b460608901614832565b95506080880135945060a088013567ffffffffffffffff808211156148d7575f80fd5b6148e38b838c01614848565b909650945060c08a01359150808211156148fb575f80fd5b506149088a828b01614848565b989b979a50959850939692959293505050565b803563ffffffff81168114614245575f80fd5b5f805f8060808587031215614941575f80fd5b61494a85614832565b93506149586020860161491b565b925061496660408601614832565b9396929550929360600135925050565b5f8060408385031215614987575f80fd5b823567ffffffffffffffff81111561499d575f80fd5b830160a081860312156149ae575f80fd5b91506149bc60208401614832565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614a00604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614a1b575f80fd5b614a2486614832565b9450614a33876020880161481c565b93506080860135925060a086013567ffffffffffffffff811115614a55575f80fd5b614a6188828901614848565b969995985093965092949392505050565b5f805f8060808587031215614a85575f80fd5b614a8e85614832565b9350614a9c60208601614832565b9250614aaa6040860161491b565b9150614ab86060860161491b565b905092959194509250565b5f5b83811015614add578181015183820152602001614ac5565b50505f910152565b5f8151808452614afc816020860160208601614ac3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120ab6020830184614ae5565b803567ffffffffffffffff81168114614245575f80fd5b5f805f805f60a08688031215614b6b575f80fd5b614b7486614832565b9450614b826020870161491b565b935060408601359250614b9760608701614b40565b949793965091946080013592915050565b803561ffff81168114614245575f80fd5b5f805f8060808587031215614bcc575f80fd5b614bd585614832565b9350614be360208601614832565b925060408501359150614ab860608601614ba8565b5f8060408385031215614c09575f80fd5b614c1283614832565b91506149bc6020840161491b565b5f60208284031215614c30575f80fd5b6120ab82614832565b5f805f60608486031215614c4b575f80fd5b614c5484614832565b9250614c626020850161491b565b9150604084013590509250925092565b5f60208284031215614c82575f80fd5b6120ab8261491b565b5f805f805f805f805f805f806101208d8f031215614ca7575f80fd5b614cb08d614832565b9b50614cbe60208e01614832565b9a5060408d01359950614cd360608e01614ba8565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614cfb575f80fd5b614d0b8e60c08f01358f01614848565b909650945067ffffffffffffffff60e08e01351115614d28575f80fd5b614d388e60e08f01358f01614848565b909450925067ffffffffffffffff6101008e01351115614d56575f80fd5b614d678e6101008f01358f01614848565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614d9a575f80fd5b614da48d8d61481c565b9a50614db260608d01614832565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614de2575f80fd5b614df28e60e08f01358f01614848565b90975095506101008d0135811015614e08575f80fd5b614e198e6101008f01358f01614848565b90955093506101208d0135811015614e2f575f80fd5b50614e418d6101208e01358e01614848565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614e6c575f80fd5b614e7585614832565b9350614e8360208601614832565b9250604085013567ffffffffffffffff80821115614e9f575f80fd5b818701915087601f830112614eb2575f80fd5b813581811115614ec0575f80fd5b8860208260051b8501011115614ed4575f80fd5b95989497505060200194505050565b5f805f805f60808688031215614ef7575f80fd5b614f0086614832565b945060208601359350614f1560408701614ba8565b9250606086013567ffffffffffffffff811115614a55575f80fd5b5f8060808385031215614f41575f80fd5b614f4b848461481c565b91506149bc60608401614832565b602080825282518282018190525f9190848201906040850190845b81811015614f995783516001600160a01b031683529284019291840191600101614f74565b50909695505050505050565b5f805f805f805f8060c0898b031215614fbc575f80fd5b614fc589614832565b9750614fd360208a01614832565b965060408901359550614fe860608a01614ba8565b9450608089013567ffffffffffffffff80821115615004575f80fd5b6150108c838d01614848565b909650945060a08b0135915080821115615028575f80fd5b506150358b828c01614848565b999c989b5096995094979396929594505050565b5f805f6060848603121561505b575f80fd5b61506484614832565b92506150726020850161491b565b915061508060408501614832565b90509250925092565b5f805f6060848603121561509b575f80fd5b6150a48461491b565b9250614c6260208501614832565b5f805f606084860312156150c4575f80fd5b6150a484614832565b5f805f60a084860312156150df575f80fd5b6150e9858561481c565b92506150f760608501614832565b9150608084013590509250925092565b5f8060408385031215615118575f80fd5b6149ae8361491b565b5f805f8060808587031215615134575f80fd5b61513d85614832565b935061514b6020860161491b565b925060408501359150614ab860608601614b40565b815181526020808301519082015260408101611889565b5f60208284031215615187575f80fd5b6120ab82614b40565b838152818360208301375f910160200190815292915050565b63ffffffff6151b78261491b565b1682526020810135602083015267ffffffffffffffff6151d960408301614b40565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b61523481896151a9565b86606082015260e060808201525f61525060e0830187896151e3565b6001600160a01b03861660a084015282810360c08401526152728185876151e3565b9a9950505050505050505050565b6080810161528e82856151a9565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f602082840312156152e1575f80fd5b8151600381106120ab575f80fd5b8015158114613bfe575f80fd5b5f6020828403121561530c575f80fd5b81516120ab816152ef565b5f60208284031215615327575f80fd5b81356120ab816152ef565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011261536e575f80fd5b815167ffffffffffffffff8082111561538957615389615332565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156153cf576153cf615332565b816040528381528660208588010111156153e7575f80fd5b611421846020830160208901614ac3565b5f60208284031215615408575f80fd5b815167ffffffffffffffff81111561541e575f80fd5b6127238482850161535f565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f61545960e08301888a6151e3565b82810360a084015261546c8187896151e3565b905082810360c08401526154818185876151e3565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561188957611889615492565b5f6101206154e0838e6151a9565b8b60608401528a60808401528960a08401528060c0840152615505818401898b6151e3565b905082810360e084015261551a8187896151e3565b90508281036101008401526154818185876151e3565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b8981101561566b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c36030181126155c4575f80fd5b8b0163ffffffff806155d58361491b565b168552806155e488840161491b565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811261561d575f80fd5b01858101903567ffffffffffffffff811115615637575f80fd5b803603821315615645575f80fd5b878986015261565788860182846151e3565b958701959450505090840190600101615564565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a060808301526156c660a0830184866151e3565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a060408401526156fb60a08401888a6151e3565b818716606085015283810360808501526157168186886151e3565b9b9a5050505050505050505050565b60a0810161573382866151a9565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614a0057614a00615492565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126157a1575f80fd5b83018035915067ffffffffffffffff8211156157bb575f80fd5b60200191503681900382131561168d575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f606086015161581f60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152615850610140840182614ae5565b905082810360208401526158658186886151e3565b915050612ddd604083018415159052565b5f60408284031215615886575f80fd5b6040516040810181811067ffffffffffffffff821117156158a9576158a9615332565b604052825181526020928301519281019290925250919050565b5f604082840312156158d3575f80fd5b6120ab8383615876565b5f80606083850312156158ee575f80fd5b6158f88484615876565b9150604083015167ffffffffffffffff811115615913575f80fd5b61591f8582860161535f565b9150509250929050565b606081525f61593b6060830187614ae5565b828103602084015261594e8186886151e3565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615979575f80fd5b5051919050565b6060810161188982846151a956fea2646970667358221220938f9466c98d432f294c8fa92afa649818bd8c0b591d10b7b71b464300e2a18764736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c6343000816003360e06040526001600d5534801562000015575f80fd5b5060405162006193380380620061938339810160408190526200003891620002ef565b828281816001600160a01b0381166200006b57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007681620000d9565b5063ffffffff166080526040516200008e90620002c5565b604051809103905ff080158015620000a8573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c29062000128565b50506001600160a01b031660c05250620003679050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200013262000295565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200017c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a291906200033f565b620001c05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001fa5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002c35760405163118cdaa760e01b815233600482015260240162000062565b565b6102818062005f1283390190565b80516001600160a01b0381168114620002ea575f80fd5b919050565b5f805f6060848603121562000302575f80fd5b835163ffffffff8116811462000316575f80fd5b92506200032660208501620002d3565b91506200033660408501620002d3565b90509250925092565b5f6020828403121562000350575f80fd5b8151801515811462000360575f80fd5b9392505050565b60805160a05160c051615b48620003ca5f395f8181610b500152818161314e015281816141df01526143f001525f61078601525f818161054301528181612d98015281816137b40152818161381a01528181613f860152613fec0152615b485ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b93578063ef667aa114610bb2578063f2fde38b14610bfb578063f64be4c714610c1a575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b74575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614a0a565b610c4e565b005b348015610374575f80fd5b5061037d610d61565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c0366004614ab2565b610d91565b6103d86103d3366004614afa565b611112565b60405161039d9190614b49565b3480156103f0575f80fd5b506103676103ff366004614b8b565b611279565b34801561040f575f80fd5b5061042361041e366004614bf6565b611336565b60405161039d9190614cb2565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614cdb565b61144c565b34801561049b575f80fd5b506104636104aa366004614d3d565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614d7c565b611620565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614cdb565b6116b5565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614da4565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614dbd565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614df6565b611862565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614e0f565b6118b0565b34801561067e575f80fd5b5061036761068d366004614ab2565b611925565b34801561069d575f80fd5b506103676106ac366004614f03565b611e1a565b3480156106bc575f80fd5b506103676106cb366004614fdd565b611e84565b3480156106db575f80fd5b5061070e6106ea366004614df6565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614df6565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f52565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004615067565b611f65565b3480156107ea575f80fd5b506106446107f93660046150b4565b612068565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120d3565b60405161039d91906150dd565b610367610849366004615129565b612133565b348015610859575f80fd5b506103676108683660046151cd565b6122ef565b348015610878575f80fd5b5061060c610887366004614dbd565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd3660046151cd565b6125e1565b3480156108dd575f80fd5b5061060c6108ec366004614dbd565b6126b5565b3480156108fc575f80fd5b5061036761090b36600461520d565b61274c565b34801561091b575f80fd5b5061036761092a366004615236565b612b4b565b34801561093a575f80fd5b50610367610949366004615251565b612b63565b348015610959575f80fd5b50610463610968366004614dbd565b612cf9565b348015610978575f80fd5b5061036761098736600461528b565b612e07565b348015610997575f80fd5b506105ae6109a6366004614d7c565b6130be565b3480156109b6575f80fd5b506103676109c5366004614da4565b613144565b3480156109d5575f80fd5b506106446109e43660046150b4565b6131c3565b3480156109f4575f80fd5b50610463610a033660046152a5565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614da4565b613227565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a36600461520d565b6132a5565b348015610a8a575f80fd5b50610367610a993660046152a5565b6135a0565b348015610aa9575f80fd5b50610644610ab8366004614da4565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614d7c565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614afa565b6136c2565b60405161039d91906152e4565b348015610b4d575f80fd5b507f00000000000000000000000000000000000000000000000000000000000000006105ae565b348015610b7f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b9e575f80fd5b50610367610bad366004614da4565b6139e3565b348015610bbd575f80fd5b5061070e610bcc366004614d7c565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c06575f80fd5b50610367610c15366004614da4565b613bdd565b348015610c25575f80fd5b506105ae610c34366004614df6565b60096020525f90815260409020546001600160a01b031681565b610c9d86610c5f60208a018a614df6565b60208a0135610c7460608c0160408d016152fb565b898989604051602001610c8993929190615314565b604051602081830303815290604052613c30565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cf1908b908a908a908a9033908b908b906004016153ae565b5f604051808303818588803b158015610d08575f80fd5b505af1158015610d1a573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d50929190615404565b60405180910390a150505050505050565b5f80610d70600d546001141590565b610d7b575f80610d89565b610d89600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610de4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e9d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e559190615455565b6002811115610e6657610e66615428565b03610e9d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f69576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610f0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f339190615480565b610f69576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f7288613e6e565b5f610f7d8989611620565b9150508015610fb8576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03611016576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600101556110ac565b43861161104f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b61111a61495c565b6111276020840184614df6565b336001600d5414611164576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d556111a39086016080870161549b565b80156111b85750600e546001600160a01b0316155b156111ef576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111fb3388613ed7565b915091505f6112086141af565b90505f61122361121e60a08b0160808c0161549b565b614255565b90506112348460400151838361431f565b600e54604085015160200151611256916001600160a01b03169083868c614386565b6040840151516112689083858b6143b3565b50506001600d555095945050505050565b61128285613e6e565b5f83838360405160200161129893929190615314565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112f4866112d96020880188614df6565b60208801356112ee60608a0160408b016152fb565b85613c30565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611326929190615404565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661138c576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113fd573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611442919081019061557c565b9695505050505050565b61145585613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114e0576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061152c575080155b1561156f576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611326565b6001600160a01b038083165f90815260076020908152604080832063ffffffff8616845290915281205490911690816116ae5763ffffffff83165f908152600a60205260409020546001600160a01b03169150816116aa576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b6116be85613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611744576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114d7565b80158061178e57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117d1576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611326565b63ffffffff81165f908152600960205260408120546001600160a01b0316158015906118aa575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d60405161190f9a999897969594939291906155ae565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561195757506001600160a01b03811615155b1561198e576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a47575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ff9190615455565b6002811115611a1057611a10615428565b03611a47576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611b13576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611ab9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611add9190615480565b611b13576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b1c88613e6e565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b83576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d70576001600160a01b0381161580611c3d57506001600160a01b038716155b15611c74576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c9b9190615643565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d62918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611e0f565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110ff565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e6f9a99989796959493929190615656565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611ed7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ee085613e6e565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f29908890879087906004016156b4565b5f604051808303815f87803b158015611f40575f80fd5b505af1158015611e0f573d5f803e3d5ffd5b611f5a61441e565b611f635f614463565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fd3576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fe39291906157ff565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161205991908890889088908890889061580e565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120cc9185918591859061209790850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166144ca565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561212957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161210b575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161217d90879087906157ff565b604051809103902090508082146121ca576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114d7565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612251908e908d908c908c9033908d908d90600401615856565b5f604051808303818588803b158015612268575f80fd5b505af115801561227a573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122db94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561232157506001600160a01b03811615155b15612358576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612412576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ca9190615455565b60028111156123db576123db615428565b03612412576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124de576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612484573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124a89190615480565b6124de576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124e787613e6e565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361254d576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d50565b5f805f6125ee8686611620565b91509150816001600160a01b0316846001600160a01b031603612616576001925050506120cc565b5f81612649576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061265e565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126985750438160200151115b156126a957600193505050506120cc565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612744576001016126f1565b949350505050565b61275461441e565b6001600160a01b0382165f90815260056020526040902054829060ff166127a7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615612860575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128189190615455565b600281111561282957612829615428565b03612860576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561292c576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f69190615480565b61292c576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612987576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612ab75763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a5c8743615643565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b41565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b5361441e565b612b5e838383614562565b505050565b612b7a82612b746020860186614df6565b336125e1565b612bb0576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bd890870187614df6565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612c158484836144ca565b612c4b576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c56848483614585565b612c8c576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cb883612c9d6020870187614df6565b6020870135612cb26060890160408a016152fb565b8661463e565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612ceb939291906158a9565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d419067ffffffffffffffff1660016158d1565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612e0f61441e565b6001600160a01b0381165f90815260056020526040902054819060ff16612e62576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612f1c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed49190615455565b6002811115612ee557612ee5615428565b03612f1c576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fe8576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fb29190615480565b612fe8576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613041576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611326565b6001600160a01b038083165f90815260066020908152604080832063ffffffff8616845290915290205416806118aa575063ffffffff81165f908152600960205260409020546001600160a01b0316806118aa576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61314c61441e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036131b7576040517f10647d0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131c0816146bd565b50565b6001600160a01b0381165f90815260016020908152604082206120cc918591859185906131f290850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff16614585565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d798398191015b60405180910390a150565b6001600160a01b0382165f90815260056020526040902054829060ff166132f8576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b038116156133b1575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133699190615455565b600281111561337a5761337a615428565b036133b1576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561347d576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015613423573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134479190615480565b61347d576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61348561441e565b845f036134cf5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613554565b438511613508576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d50565b6135a984613e6e565b6135b48484846126b5565b6135bf9060016158d1565b67ffffffffffffffff168167ffffffffffffffff1614613617576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612ceb565b604080518082019091525f80825260208201526136e560a084016080850161549b565b80156136fa5750600e546001600160a01b0316155b15613731576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061375990870187614df6565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137949067ffffffffffffffff1660016158d1565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137ff9190614df6565b63ffffffff168152602001866020013581526020016138f9847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061384c9190614df6565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b815260200161390b60408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139579050856109a66020890189614df6565b90506001600160a01b03811663d80e9bd98361397660608a018a6158f2565b61398660a08c0160808d0161549b565b6040518563ffffffff1660e01b81526004016139a59493929190615953565b6040805180830381865afa1580156139bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114429190615a47565b6139eb61441e565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a8a9190615480565b613ac0576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613b12576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161329a565b613be561441e565b6001600160a01b038116613c27576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114d7565b6131c081614463565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d8857600181015b8467ffffffffffffffff168167ffffffffffffffff1611613d24576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613d1c576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b600101613c7c565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613e1b576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114d7565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613ea057506001600160a01b038181165f908152600f6020526040902054163314155b156131c0576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613edf61495c565b5f80613f6685613ef26020870187614df6565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fd19190614df6565b63ffffffff1681526020018660200135815260200161401e847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061384c9190614df6565b815260200161403060408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061407c9050876109a66020890189614df6565b90505f806001600160a01b038316634389e58f8561409d60608c018c6158f2565b6140ad60a08e0160808f0161549b565b6040518563ffffffff1660e01b81526004016140cc9493929190615953565b5f604051808303815f875af11580156140e7573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261412c9190810190615a61565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161416060608b018b6158f2565b866040516141719493929190615aad565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561422c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142509190615aed565b905090565b5f811561431a57600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156142bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142df9190615aed565b9050805f0361431a576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b82518210806143315750808360200151115b15612b5e57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114d7565b83156143975761439785838661472b565b828410156143ac576143ac858286860361472b565b5050505050565b34156143eb576040517f9a317a5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144187f000000000000000000000000000000000000000000000000000000000000000085858585614386565b50505050565b5f546001600160a01b03163314611f63576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114d7565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061274457506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d90614523908790600401615b04565b602060405180830381865afa15801561453e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127449190615480565b6001600160a01b03831661457a57612b5e828261477f565b612b5e83838361472b565b5f67ffffffffffffffff82166145a160608601604087016152fb565b67ffffffffffffffff16118061274457506001600160a01b0383165f90815260026020908152604082209082906145da90880188614df6565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f86604001602081019061461a91906152fb565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b80614675576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6146c561441e565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a623969060200161329a565b6001600160a01b03821661476b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b5e6001600160a01b038416838361485a565b6001600160a01b0382166147bf576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614808576040519150601f19603f3d011682016040523d82523d5f602084013e61480d565b606091505b5050905080612b5e576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114d7565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b5e93879390925f9283929183919082885af1806148f6576040513d5f823e3d81fd5b50505f513d9150811561490d57806001141561491a565b6001600160a01b0384163b155b15614418576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114d7565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161499b60405180604001604052805f81526020015f81525090565b905290565b5f606082840312156149b0575f80fd5b50919050565b80356001600160a01b038116811461431a575f80fd5b5f8083601f8401126149dc575f80fd5b50813567ffffffffffffffff8111156149f3575f80fd5b6020830191508360208285010111156116ae575f80fd5b5f805f805f805f60e0888a031215614a20575f80fd5b614a2a89896149a0565b9650614a38606089016149b6565b95506080880135945060a088013567ffffffffffffffff80821115614a5b575f80fd5b614a678b838c016149cc565b909650945060c08a0135915080821115614a7f575f80fd5b50614a8c8a828b016149cc565b989b979a50959850939692959293505050565b803563ffffffff8116811461431a575f80fd5b5f805f8060808587031215614ac5575f80fd5b614ace856149b6565b9350614adc60208601614a9f565b9250614aea604086016149b6565b9396929550929360600135925050565b5f8060408385031215614b0b575f80fd5b823567ffffffffffffffff811115614b21575f80fd5b830160a08186031215614b32575f80fd5b9150614b40602084016149b6565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614b84604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614b9f575f80fd5b614ba8866149b6565b9450614bb787602088016149a0565b93506080860135925060a086013567ffffffffffffffff811115614bd9575f80fd5b614be5888289016149cc565b969995985093965092949392505050565b5f805f8060808587031215614c09575f80fd5b614c12856149b6565b9350614c20602086016149b6565b9250614c2e60408601614a9f565b9150614c3c60608601614a9f565b905092959194509250565b5f5b83811015614c61578181015183820152602001614c49565b50505f910152565b5f8151808452614c80816020860160208601614c47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120cc6020830184614c69565b803567ffffffffffffffff8116811461431a575f80fd5b5f805f805f60a08688031215614cef575f80fd5b614cf8866149b6565b9450614d0660208701614a9f565b935060408601359250614d1b60608701614cc4565b949793965091946080013592915050565b803561ffff8116811461431a575f80fd5b5f805f8060808587031215614d50575f80fd5b614d59856149b6565b9350614d67602086016149b6565b925060408501359150614c3c60608601614d2c565b5f8060408385031215614d8d575f80fd5b614d96836149b6565b9150614b4060208401614a9f565b5f60208284031215614db4575f80fd5b6120cc826149b6565b5f805f60608486031215614dcf575f80fd5b614dd8846149b6565b9250614de660208501614a9f565b9150604084013590509250925092565b5f60208284031215614e06575f80fd5b6120cc82614a9f565b5f805f805f805f805f805f806101208d8f031215614e2b575f80fd5b614e348d6149b6565b9b50614e4260208e016149b6565b9a5060408d01359950614e5760608e01614d2c565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614e7f575f80fd5b614e8f8e60c08f01358f016149cc565b909650945067ffffffffffffffff60e08e01351115614eac575f80fd5b614ebc8e60e08f01358f016149cc565b909450925067ffffffffffffffff6101008e01351115614eda575f80fd5b614eeb8e6101008f01358f016149cc565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614f1e575f80fd5b614f288d8d6149a0565b9a50614f3660608d016149b6565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614f66575f80fd5b614f768e60e08f01358f016149cc565b90975095506101008d0135811015614f8c575f80fd5b614f9d8e6101008f01358f016149cc565b90955093506101208d0135811015614fb3575f80fd5b50614fc58d6101208e01358e016149cc565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614ff0575f80fd5b614ff9856149b6565b9350615007602086016149b6565b9250604085013567ffffffffffffffff80821115615023575f80fd5b818701915087601f830112615036575f80fd5b813581811115615044575f80fd5b8860208260051b8501011115615058575f80fd5b95989497505060200194505050565b5f805f805f6080868803121561507b575f80fd5b615084866149b6565b94506020860135935061509960408701614d2c565b9250606086013567ffffffffffffffff811115614bd9575f80fd5b5f80608083850312156150c5575f80fd5b6150cf84846149a0565b9150614b40606084016149b6565b602080825282518282018190525f9190848201906040850190845b8181101561511d5783516001600160a01b0316835292840192918401916001016150f8565b50909695505050505050565b5f805f805f805f8060c0898b031215615140575f80fd5b615149896149b6565b975061515760208a016149b6565b96506040890135955061516c60608a01614d2c565b9450608089013567ffffffffffffffff80821115615188575f80fd5b6151948c838d016149cc565b909650945060a08b01359150808211156151ac575f80fd5b506151b98b828c016149cc565b999c989b5096995094979396929594505050565b5f805f606084860312156151df575f80fd5b6151e8846149b6565b92506151f660208501614a9f565b9150615204604085016149b6565b90509250925092565b5f805f6060848603121561521f575f80fd5b61522884614a9f565b9250614de6602085016149b6565b5f805f60608486031215615248575f80fd5b615228846149b6565b5f805f60a08486031215615263575f80fd5b61526d85856149a0565b925061527b606085016149b6565b9150608084013590509250925092565b5f806040838503121561529c575f80fd5b614b3283614a9f565b5f805f80608085870312156152b8575f80fd5b6152c1856149b6565b93506152cf60208601614a9f565b925060408501359150614c3c60608601614cc4565b8151815260208083015190820152604081016118aa565b5f6020828403121561530b575f80fd5b6120cc82614cc4565b838152818360208301375f910160200190815292915050565b63ffffffff61533b82614a9f565b1682526020810135602083015267ffffffffffffffff61535d60408301614cc4565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6153b8818961532d565b86606082015260e060808201525f6153d460e083018789615367565b6001600160a01b03861660a084015282810360c08401526153f6818587615367565b9a9950505050505050505050565b60808101615412828561532d565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60208284031215615465575f80fd5b8151600381106120cc575f80fd5b80151581146131c0575f80fd5b5f60208284031215615490575f80fd5b81516120cc81615473565b5f602082840312156154ab575f80fd5b81356120cc81615473565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126154f2575f80fd5b815167ffffffffffffffff8082111561550d5761550d6154b6565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715615553576155536154b6565b8160405283815286602085880101111561556b575f80fd5b611442846020830160208901614c47565b5f6020828403121561558c575f80fd5b815167ffffffffffffffff8111156155a2575f80fd5b612744848285016154e3565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f6155dd60e08301888a615367565b82810360a08401526155f0818789615367565b905082810360c0840152615605818587615367565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156118aa576118aa615616565b5f610120615664838e61532d565b8b60608401528a60808401528960a08401528060c0840152615689818401898b615367565b905082810360e084015261569e818789615367565b9050828103610100840152615605818587615367565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b898110156157ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c3603018112615748575f80fd5b8b0163ffffffff8061575983614a9f565b16855280615768888401614a9f565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181126157a1575f80fd5b01858101903567ffffffffffffffff8111156157bb575f80fd5b8036038213156157c9575f80fd5b87898601526157db8886018284615367565b9587019594505050908401906001016156e8565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a0608083015261584a60a083018486615367565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a0604084015261587f60a08401888a615367565b8187166060850152838103608085015261589a818688615367565b9b9a5050505050505050505050565b60a081016158b7828661532d565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614b8457614b84615616565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615925575f80fd5b83018035915067ffffffffffffffff82111561593f575f80fd5b6020019150368190038213156116ae575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f60608601516159a360c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e06101208401526159d4610140840182614c69565b905082810360208401526159e9818688615367565b915050612dfe604083018415159052565b5f60408284031215615a0a575f80fd5b6040516040810181811067ffffffffffffffff82111715615a2d57615a2d6154b6565b604052825181526020928301519281019290925250919050565b5f60408284031215615a57575f80fd5b6120cc83836159fa565b5f8060608385031215615a72575f80fd5b615a7c84846159fa565b9150604083015167ffffffffffffffff811115615a97575f80fd5b615aa3858286016154e3565b9150509250929050565b606081525f615abf6060830187614c69565b8281036020840152615ad2818688615367565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615afd575f80fd5b5051919050565b606081016118aa828461532d56fea264697066735822122068baa86dcd9bd8142959c16f23b905a6a20b9dbc18984656c1ecce183a4b190464736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c63430008160033608060405234801561000f575f80fd5b506040516200196d3803806200196d83398101604081905261003091610108565b338061005557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005e816100b9565b506001600160a01b03165f908152600260205260409020805460ff1916600190811790915580546001600160801b03191668056bc75e2d6310000017905560058054602f60801b6001600160801b0391909116179055610135565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610118575f80fd5b81516001600160a01b038116811461012e575f80fd5b9392505050565b61182a80620001435f395ff3fe608060405260043610610178575f3560e01c80638ca2fb08116100d1578063d350ad251161007c578063e0ad121a11610057578063e0ad121a14610607578063f2fde38b146106ba578063fd9be522146106d9575f80fd5b8063d350ad25146104d4578063da26663a146104f3578063dbbb4155146105e8575f80fd5b8063c1723a1d116100ac578063c1723a1d1461045f578063c184032714610472578063cd68b79b14610498575f80fd5b80638ca2fb08146103b55780638da5cb5b146103f357806392807f581461041c575f80fd5b80635d6d7ccb116101315780637bc3c9ab1161010c5780637bc3c9ab146102fa5780637dc438a41461033f57806388a4124c1461035e575f80fd5b80635d6d7ccb146102765780635e280f1114610295578063715018a6146102e6575f80fd5b80633161b7f6116101615780633161b7f6146101d257806336a5beba146101f157806352a7251014610257575f80fd5b806311f2c3431461017c5780632f7cb0b4146101b1575b5f80fd5b348015610187575f80fd5b5061019e61019636600461145a565b5f9392505050565b6040519081526020015b60405180910390f35b3480156101bc575f80fd5b506101d06101cb3660046114a9565b6106f8565b005b3480156101dd575f80fd5b506101d06101ec3660046114c9565b610735565b3480156101fc575f80fd5b506040805180820182525f8082526020918201528151808301835260045467ffffffffffffffff811680835263ffffffff680100000000000000009092048216928401928352845190815291511691810191909152016101a8565b348015610262575f80fd5b506101d061027136600461155b565b610901565b348015610281575f80fd5b506101d06102903660046114a9565b61095e565b3480156102a0575f80fd5b506006546102c19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a8565b3480156102f1575f80fd5b506101d0610a23565b348015610305575f80fd5b506103196103143660046115a5565b610a36565b604080519283526fffffffffffffffffffffffffffffffff9091166020830152016101a8565b34801561034a575f80fd5b506101d06103593660046115c0565b610ad0565b348015610369575f80fd5b5061037d61037836600461145a565b610bd9565b604080519485526fffffffffffffffffffffffffffffffff9384166020860152918316918401919091521660608201526080016101a8565b3480156103c0575f80fd5b506103e36103cf3660046115d6565b60026020525f908152604090205460ff1681565b60405190151581526020016101a8565b3480156103fe575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166102c1565b348015610427575f80fd5b506005546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff90911681526020016101a8565b61037d61046d36600461145a565b610bf9565b34801561047d575f80fd5b506001546fffffffffffffffffffffffffffffffff1661043e565b3480156104a3575f80fd5b5060055461043e9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b3480156104df575f80fd5b506101d06104ee3660046114a9565b610c29565b3480156104fe575f80fd5b506105a461050d3660046115ef565b60408051606080820183525f808352602080840182905292840181905263ffffffff94851681526003835283902083519182018452546fffffffffffffffffffffffffffffffff81168252700100000000000000000000000000000000810467ffffffffffffffff169282019290925278010000000000000000000000000000000000000000000000009091049092169082015290565b6040805182516fffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff16908201529181015163ffffffff16908201526060016101a8565b3480156105f3575f80fd5b506101d06106023660046115d6565b610c74565b348015610612575f80fd5b506105a4610621366004611608565b60408051606080820183525f808352602080840182905292840181905261ffff949094168452600382529282902082519384018352546fffffffffffffffffffffffffffffffff8116845267ffffffffffffffff700100000000000000000000000000000000820416918401919091527801000000000000000000000000000000000000000000000000900463ffffffff169082015290565b3480156106c5575f80fd5b506101d06106d43660046115d6565b610cc3565b3480156106e4575f80fd5b506101d06106f3366004611621565b610d26565b610700610d3c565b600580546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055565b336107545f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146107b757335f9081526002602052604090205460ff166107b7576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156108fc57368383838181106107d4576107d4611649565b6080029190910191506108f390506107ef60208301836115ef565b6108013684900384016020850161168d565b805160208083015160409384015184516060810186526fffffffffffffffffffffffffffffffff948516815267ffffffffffffffff92831681850190815263ffffffff9283168288019081529783165f908152600390955295909320925183549551965194167fffffffffffffffff000000000000000000000000000000000000000000000000909516949094177001000000000000000000000000000000009590911694909402939093177fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000009190921602179055565b506001016107b9565b505050565b610909610d3c565b73ffffffffffffffffffffffffffffffffffffffff919091165f90815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b3361097d5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146109e057335f9081526002602052604090205460ff166109e0576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610a2b610d3c565b610a345f610d8e565b565b5f808461ffff16606e1480610a5057508461ffff1661279f145b80610a6057508461ffff16614eaf145b15610a7d57610a748561ffff168585610e02565b91509150610ac8565b8461ffff16606f1480610a9557508461ffff16612794145b80610aa557508461ffff16614ea4145b15610ab957610a748561ffff168585610f5c565b610a748561ffff168585611104565b935093915050565b33610aef5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610b5257335f9081526002602052604090205460ff16610b52576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b626107ef60208301836115ef565b5f610b7360a083016080840161171c565b90505f610b8660c0840160a085016115ef565b6004805463ffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090921667ffffffffffffffff90941693909317179091555050565b5f805f80610be88787876111d7565b935093509350935093509350935093565b5f80808080610c0c565b60405180910390fd5b610c178888886111d7565b94509450945094505093509350935093565b610c31610d3c565b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610c7c610d3c565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ccb610d3c565b73ffffffffffffffffffffffffffffffffffffffff8116610d1a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610c03565b610d2381610d8e565b50565b610d2e610d3c565b610d3882826112ad565b5050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610a34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c03565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b63ffffffff8381165f90815260036020526040812060045460055492938493849268010000000000000000900490911690606490610e669070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1689611762565b610e7091906117ac565b610e7a9190611762565b82549091505f90610ead907801000000000000000000000000000000000000000000000000900463ffffffff1688611762565b83546004549192505f9167ffffffffffffffff70010000000000000000000000000000000090920482169184918691610ee791168b6117bf565b610ef191906117bf565b610efb91906117bf565b610f059190611762565b60015485549192506fffffffffffffffffffffffffffffffff90811691610f2d911683611762565b610f3791906117ac565b935493996fffffffffffffffffffffffffffffffff9094169850929650505050505050565b5f805f610f68866113af565b63ffffffff8082165f9081526003602052604081208054939450929091610fac91780100000000000000000000000000000000000000000000000090041688611762565b610fb890610c746117bf565b82549091505f90610fe790700100000000000000000000000000000000900467ffffffffffffffff1683611762565b63ffffffff808b165f908152600360205260408120805493945092909161102b9178010000000000000000000000000000000000000000000000009004168b611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661105a8b846117bf565b6110649190611762565b60015487549192505f916fffffffffffffffffffffffffffffffff9182169161108e911687611762565b61109891906117ac565b60015485549192505f916fffffffffffffffffffffffffffffffff918216916110c2911685611762565b6110cc91906117ac565b90505f6110d982846117bf565b9554959f6fffffffffffffffffffffffffffffffff9096169e50949c50505050505050505050505050565b63ffffffff8084165f908152600360205260408120805491928392839161114891780100000000000000000000000000000000000000000000000090041687611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661117787846117bf565b6111819190611762565b60015484549192506fffffffffffffffffffffffffffffffff908116916111a9911683611762565b6111b391906117ac565b925492986fffffffffffffffffffffffffffffffff90931697509195505050505050565b5f808080806111e8617530896117d2565b90508063ffffffff16606e148061120657508063ffffffff1661279f145b8061121857508063ffffffff16614eaf145b1561123257611228818888610e02565b9095509350611281565b8063ffffffff16606f148061124e57508063ffffffff16612794145b8061126057508063ffffffff16614ea4145b1561127057611228818888610f5c565b61127b818888611104565b90955093505b505060015460055493979296506fffffffffffffffffffffffffffffffff908116955090921692509050565b73ffffffffffffffffffffffffffffffffffffffff82166112fa576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114611350576040519150601f19603f3d011682016040523d82523d5f602084013e611355565b606091505b50509050806108fc576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c03565b5f806113bd617530846117d2565b90508063ffffffff16606f036113d65750606592915050565b8063ffffffff16612794036113ef575061278992915050565b8063ffffffff16614ea4036114085750614e9992915050565b6040517ff42c33dc00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c03565b803563ffffffff81168114611455575f80fd5b919050565b5f805f6060848603121561146c575f80fd5b61147584611442565b95602085013595506040909401359392505050565b80356fffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f602082840312156114b9575f80fd5b6114c28261148a565b9392505050565b5f80602083850312156114da575f80fd5b823567ffffffffffffffff808211156114f1575f80fd5b818501915085601f830112611504575f80fd5b813581811115611512575f80fd5b8660208260071b8501011115611526575f80fd5b60209290920196919550909350505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f806040838503121561156c575f80fd5b61157583611538565b915060208301358015158114611589575f80fd5b809150509250929050565b803561ffff81168114611455575f80fd5b5f805f606084860312156115b7575f80fd5b61147584611594565b5f60c082840312156115d0575f80fd5b50919050565b5f602082840312156115e6575f80fd5b6114c282611538565b5f602082840312156115ff575f80fd5b6114c282611442565b5f60208284031215611618575f80fd5b6114c282611594565b5f8060408385031215611632575f80fd5b61163b83611538565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b803567ffffffffffffffff81168114611455575f80fd5b5f6060828403121561169d575f80fd5b6040516060810181811067ffffffffffffffff821117156116e5577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040526116f18361148a565b81526116ff60208401611676565b602082015261171060408401611442565b60408201529392505050565b5f6020828403121561172c575f80fd5b6114c282611676565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761177957611779611735565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826117ba576117ba61177f565b500490565b8082018082111561177957611779611735565b5f63ffffffff808416806117e8576117e861177f565b9216919091069291505056fea2646970667358221220057b4584fe743c800fee37c9f14cc5705300ed67e417991ba4a7213c92a3bfad64736f6c6343000816003360e060405234801562000010575f80fd5b506040516200588138038062005881833981016040819052620000339162000185565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001cf565b6001600160a01b03821660805263ffffffff811660a05283833380620000d957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000e4816200011e565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b03989098169790971790965550620001fb945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811462000182575f80fd5b50565b5f805f806080858703121562000199575f80fd5b8451620001a6816200016d565b6020860151909450620001b9816200016d565b6040860151606090960151949790965092505050565b5f60208284031215620001e0575f80fd5b815163ffffffff81168114620001f4575f80fd5b9392505050565b60805160a05160c0516156426200023f5f395f8181612458015261264f01525f50505f81816107f80152818161093b015281816116c30152611daa01526156425ff3fe608060405260043610610186575f3560e01c806361d027b3116100d1578063d15b0d491161007c578063f2fde38b11610057578063f2fde38b14610528578063faaebd2114610547578063fd9be52214610580575f80fd5b8063d15b0d49146104be578063d80e9bd9146104dd578063f0f4426014610509575f80fd5b80638da5cb5b116100ac5780638da5cb5b1461044a5780639c33abf714610473578063c14c43491461049f575f80fd5b806361d027b3146103eb5780636750cd4c14610417578063715018a614610436575f80fd5b806329460b0b1161013157806343ea4fa91161010c57806343ea4fa9146103145780634d9632001461033357806354fd4d50146103c0575f80fd5b806329460b0b1461029c57806339e3f938146102bb5780634389e58f146102e7575f80fd5b80631881d94d116101615780631881d94d14610242578063200175f71461025c57806320efd7221461027d575f80fd5b806301ffc9a7146101915780630e97289b146101c5578063188183f414610216575f80fd5b3661018d57005b5f80fd5b34801561019c575f80fd5b506101b06101ab3660046141f9565b61059f565b60405190151581526020015b60405180910390f35b3480156101d0575f80fd5b506006546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b348015610221575f80fd5b50610235610230366004614285565b610683565b6040516101bc91906142bc565b34801561024d575f80fd5b505f6040516101bc91906142ef565b348015610267575f80fd5b5061027b61027636600461432e565b61078e565b005b348015610288575f80fd5b5061027b6102973660046143ad565b610939565b3480156102a7575f80fd5b5061027b6102b63660046143fe565b610aec565b3480156102c6575f80fd5b506102da6102d5366004614285565b610ccf565b6040516101bc91906144fe565b3480156102f2575f80fd5b5061030661030136600461451f565b610e6a565b6040516101bc929190614631565b34801561031f575f80fd5b506102da61032e366004614285565b610f1f565b34801561033e575f80fd5b5061038f61034d366004614285565b600460209081525f928352604080842090915290825290205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101bc565b3480156103cb575f80fd5b5060408051600381525f60208201526002918101919091526060016101bc565b3480156103f6575f80fd5b506003546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b348015610422575f80fd5b506101b0610431366004614654565b6112d0565b348015610441575f80fd5b5061027b6112da565b348015610455575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166101f1565b34801561047e575f80fd5b5061049261048d36600461466f565b6112ed565b6040516101bc91906146b7565b3480156104aa575f80fd5b5061027b6104b93660046146c9565b6113d4565b3480156104c9575f80fd5b5061027b6104d8366004614738565b611547565b3480156104e8575f80fd5b506104fc6104f736600461451f565b6115d5565b6040516101bc919061474f565b348015610514575f80fd5b5061027b610523366004614766565b611643565b348015610533575f80fd5b5061027b610542366004614766565b611657565b348015610552575f80fd5b50610572610561366004614766565b60056020525f908152604090205481565b6040519081526020016101bc565b34801561058b575f80fd5b5061027b61059a366004614781565b6116b7565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061063157507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b8061067d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080518082019091525f808252602082015263ffffffff8083165f8181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845260048352818420948452939091528120805492939092169081900361071257825463ffffffff16610714565b805b63ffffffff1684528154640100000000900473ffffffffffffffffffffffffffffffffffffffff1680610766578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16610768565b805b73ffffffffffffffffffffffffffffffffffffffff166020860152509295945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146107df576040517f885762a700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061088391906147ab565b73ffffffffffffffffffffffffffffffffffffffff16036108d0576040517fe695d04400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108db8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109a8576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610ae657368383838181106109c5576109c56147c6565b90506020028101906109d791906147f3565b90506109ee6109e96020830183614654565b611821565b6001610a006040830160208401614654565b63ffffffff1603610a4057610a3b610a1b6020830183614654565b86610a29604085018561482f565b810190610a369190614958565b611868565b610add565b6002610a526040830160208401614654565b63ffffffff1603610a8d57610a3b610a6d6020830183614654565b86610a7b604085018561482f565b810190610a889190614b11565b611914565b610a9d6040820160208301614654565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b506001016109aa565b50505050565b610af461195d565b5f5b81811015610c915736838383818110610b1157610b116147c6565b9050602002810190610b239190614b43565b905060ff610b346020830183614b75565b610b45906040810190602001614ba7565b60ff1603610b7f576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff610b8e6020830183614b75565b610b9f906060810190604001614ba7565b60ff1603610bd9576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff610bef6020830183614b75565b610bfd906020810190614bc0565b67ffffffffffffffff1603610c3e576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5c610c4e6020830183614b75565b610c5790614bd9565b6119af565b610c885f610c6d6020840184614654565b610c7a6020850185614b75565b610c8390614bd9565b611a00565b50600101610af6565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610cc3929190614c90565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a01000000000000000000009091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610dec57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dc1575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610e5957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e2e575b505050505081525050905092915050565b604080518082019091525f80825260208201526060610e8b86868686611d93565b6006546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815292945090925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610ee990849089908990600401614e2d565b5f604051808303815f87803b158015610f00575f80fd5b505af1158015610f12573d5f803e3d5ffd5b5050505094509492505050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610fce57825467ffffffffffffffff168452610fed565b67ffffffffffffffff81811614610fed5767ffffffffffffffff811684525b815468010000000000000000900460ff166110a157825468010000000000000000900460ff161561109c578260010180548060200260200160405190810160405280929190818152602001828054801561107b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611050575b50505050506080850152825468010000000000000000900460ff1660208501525b61113d565b815468010000000000000000900460ff9081161461113d578160010180548060200260200160405190810160405280929190818152602001828054801561111c57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116110f1575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff1661120a5782546901000000000000000000900460ff161561120557826002018054806020026020016040519081016040528092919081815260200182805480156111cd57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111a2575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112be565b81546901000000000000000000900460ff908116146112be578160020180548060200260200160405190810160405280929190818152602001828054801561128657602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161125b575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112c7846119af565b50505092915050565b5f61067d82611e8a565b6112e261195d565b6112eb5f611ef0565b565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161134c576113268385610683565b60405160200161133691906142bc565b60405160208183030381529060405290506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601611393576113838385610f1f565b60405160200161133691906144fe565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610ad4565b9392505050565b6113dc61195d565b5f5b8181101561151557368383838181106113f9576113f96147c6565b60609081029290920192505f916114169150830160408401614766565b73ffffffffffffffffffffffffffffffffffffffff1603611463576040517f20e9d05a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114736040820160208301614654565b63ffffffff165f036114b1576040517f49cfac4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec906114eb8385614654565b63ffffffff16815260208101919091526040015f2061150a8282614e8f565b5050506001016113de565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610cc3929190614f27565b61154f61195d565b600254811115611599576002546040517f34084fb8000000000000000000000000000000000000000000000000000000008152610ad4918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f806116246115fd6060890160408a01614766565b61160d60808a0160608b01614654565b61161a60c08b018b61482f565b9050878a8a611f64565b604080518082019091529182526020820152925050505b949350505050565b61164b61195d565b61165481612062565b50565b61165f61195d565b73ffffffffffffffffffffffffffffffffffffffff81166116ae576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b61165481611ef0565b6116c0816120d5565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174e91906147ab565b905061175b81848461213d565b6040805133815273ffffffffffffffffffffffffffffffffffffffff851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a66698839060600161092c565b73ffffffffffffffffffffffffffffffffffffffff82166117fb576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61181c73ffffffffffffffffffffffffffffffffffffffff8416838361216d565b505050565b61182a81611e8a565b611654576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610ad4565b73ffffffffffffffffffffffffffffffffffffffff8083165f90815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc8059061092c90849086908590614fb3565b61191f828483611a00565b6119298284610f1f565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161092c9392919061500f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146112eb576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ad4565b602081015160ff161580156119c95750606081015160ff16155b15611654576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff9081161480611a1b5750602081015160ff16155b15611a625760808101515115611a5d576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae1565b806020015160ff16816080015151141580611a9d57506002611a86600160ff615076565b611a90919061508f565b60ff16816020015160ff16115b15611ad4576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae181608001516121fa565b604081015160ff9081161480611afc5750604081015160ff16155b15611b825760a08101515115611b3e576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611b7d576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c59565b806040015160ff168160a0015151141580611bbd57506002611ba6600160ff615076565b611bb0919061508f565b60ff16816040015160ff16115b15611bf4576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff161580611c155750806040015160ff16816060015160ff16115b15611c4c576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c598160a001516121fa565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a0100000000000000000000959091169490940293909317835560808401518051859493611d6f93908501920190614166565b5060a08201518051611d8b916002840191602090910190614166565b505050505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314611e17576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611e24888888612292565b90925090505f80611e55611e3e60608c0160408d01614766565b611e4e60808d0160608e01614654565b858a612359565b9092509050611e6482846150d5565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff161515806113cd5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f80611f7286866124e3565b915091505f611f828b8b846124fc565b90505f611f8f8c8c610683565b9050611fa48a825f015163ffffffff16612508565b806020015173ffffffffffffffffffffffffffffffffffffffff1663709eb6648c8e8d886040518563ffffffff1660e01b8152600401611fe794939291906150e8565b602060405180830381865afa158015612002573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120269190615132565b61203090836150d5565b91505f806120408e8e868e612550565b909250905061204f82856150d5565b9e909d509b505050505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016115ca565b335f9081526005602052604090205480821115612128576040517f34084fb80000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b335f9081526005602052604090209190039055565b73ffffffffffffffffffffffffffffffffffffffff83166121625761181c8282612691565b61181c8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261181c908490612793565b5f805b825181101561181c575f838281518110612219576122196147c6565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611612288576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b91506001016121fd565b60605f805f6122a186866124e3565b90925090505f6122ca6122ba60608a0160408b01614766565b61023060808b0160608c01614654565b90505f6122da60c08a018a61482f565b905090506122f181835f015163ffffffff16612508565b60208201516123219061230a60808c0160608d01614654565b61231a60608d0160408e01614766565b8488612832565b61232b90866150d5565b94505f806123398b86612966565b909250905061234882886150d5565b909b909a5098505050505050505050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526003549192505f9182916124809173ffffffffffffffffffffffffffffffffffffffff16907f000000000000000000000000000000000000000000000000000000000000000090849087612988565b9150915061249087878484612a33565b909550935084156124d75760035473ffffffffffffffffffffffffffffffffffffffff165f90815260056020526040812080548792906124d19084906150d5565b90915550505b50505094509492505050565b6060806124f08484612aaa565b915091505b9250929050565b5f61163b848484612b90565b8082111561254c576040517fc667af3e0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b5050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526003549192505f9182916126759173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086612c04565b9150915061268587878484612a33565b94509450505050611e81565b73ffffffffffffffffffffffffffffffffffffffff82166126de576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612734576040519150601f19603f3d011682016040523d82523d5f602084013e612739565b606091505b505090508061181c576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ad4565b5f8060205f8451602086015f885af1806127b2576040513d5f823e3d81fd5b50505f513d915081156127c95780600114156127e3565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610ae6576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ad4565b6040517f717e8a420000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff87169063717e8a429061288c9088908890889088906004016150e8565b6020604051808303815f875af11580156128a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128cc9190615132565b9050801561290e5773ffffffffffffffffffffffffffffffffffffffff86165f90815260056020526040812080548392906129089084906150d5565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff88168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b5f606061297d6005612977866151d3565b85612cab565b909590945092505050565b5f6060863b8083036129ad57604080515f808252602082019092529250925050612a29565b5f805f8761ffff1667ffffffffffffffff8111156129cd576129cd614890565b6040519080825280601f01601f1916602001820160405280156129f7576020820181803683370190505b5090505f80885160208a018c8f8ff191503d925087831115612a17578792505b828152825f602083013e909450925050505b9550959350505050565b5f80831580612a43575082516020115b15612a5257505f905080611e81565b5f83806020019051810190612a679190615132565b90508515612a7757809150612aa0565b5f6002548811612a8957600254612a8b565b875b9050808211612a9a5781612a9c565b805b9350505b5094509492505050565b6060805f80612ab98686612dfe565b9150915080515f03612b0e57604080515f808252602082019092528391612b02565b604080518082019091525f815260606020820152815260200190600190039081612adb5790505b509350935050506124f5565b6040805160018082528183019092525f91816020015b604080518082019091525f815260606020820152815260200190600190039081612b245790505090506040518060400160405280600260ff16815260200183815250815f81518110612b7857612b786147c6565b60209081029190910101529196919550909350505050565b5f80612b9c8585610f1f565b90505f83515f14612bca57835f81518110612bb957612bb96147c6565b602002602001015160200151612bda565b60405180602001604052805f8152505b90505f80612be783613034565b91509150612bf884888a85856132ce565b98975050505050505050565b5f6060853b808303612c2957604080515f808252602082019092529250925050611e81565b5f805f8761ffff1667ffffffffffffffff811115612c4957612c49614890565b6040519080825280601f01601f191660200182016040528015612c73576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115612c92578792505b828152825f602083013e90999098509650505050505050565b5f60605f612cb885613486565b90505f612cc48661356c565b805160208201206060880151604089015192935090915f612ce58284610f1f565b90505f89515f14612d1357895f81518110612d0257612d026147c6565b602002602001015160200151612d23565b60405180602001604052805f8152505b90506060612d828d846040518060a001604052808963ffffffff1681526020018c81526020018a8152602001875f015167ffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525085613589565b604051919b509150612d9a908990899060200161526e565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a0015183604051612de69392919061529c565b60405180910390a15050505050505050935093915050565b6060806002831015612e3e576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b5f612e4c60028286886152f8565b612e559161531f565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161301d57805f5b86831015612faa575f612e9e60018501858a8c6152f8565b612ea791615367565b60f81c90505f819003612ee8576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b8160ff165f03612efa57809150612f36565b8160ff168160ff1614612f3657365f612f1586868c8e6152f8565b91509150612f26898986858561385b565b9099509750859450919250829150505b60018401935f90612f4c90600301868b8d6152f8565b612f559161531f565b60f01c90505f819003612f97576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101869052602401610ad4565b8060020161ffff16850194505050612e86565b828714612fe6576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b600287111561301657365f612ffd85858b8d6152f8565b9150915061300e888885858561385b565b909850965050505b505061302b565b6130288287876139ce565b93505b50509250929050565b60608082515f0361304457915091565b5f61304e84613c49565b90508060ff166001036130fe5760408051600180825281830190925290816020015b606081526020019060019003908161307057905050925083835f8151811061309a5761309a6147c6565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506130d2846003613d6b565b825f815181106130e4576130e46147c6565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561311a5761311a614890565b604051908082528060200260200182016040528015613143578160200160208202803683370190505b5091508060ff1667ffffffffffffffff81111561316257613162614890565b60405190808252806020026020018201604052801561319557816020015b60608152602001906001900390816131805790505b5092505f8060ff5b8651831015613245576001909201915f6131b78885613dea565b6002949094019390505f6131cb8986613d6b565b90508260ff1660ff036131e057809250613236565b8260ff168160ff1614613236577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f61321e8b8784613e69565b905061322c8a8a8784613fe2565b5093909301929150815b5061ffff16929092019161319d565b8183035f613254898584613e69565b905061326288888584613fe2565b5f5b8660ff168160ff1610156132c257878160ff1681518110613287576132876147c6565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613264565b50505050505050915091565b5f80866040015187602001516132e491906153ad565b90505f5b8160ff168160ff16101561347b575f886020015160ff168260ff161061333c5760a089015160208a015161331c9084615076565b60ff168151811061332f5761332f6147c6565b602002602001015161335e565b88608001518260ff1681518110613355576133556147c6565b60200260200101515b60408051602081019091525f808252919250905b86518110156133ca578360ff16878281518110613391576133916147c6565b602002602001015160ff16036133c2578781815181106133b3576133b36147c6565b602002602001015191506133ca565b600101613372565b5089516040517f30bb3aac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416916330bb3aac91613423918d918d9087906004016153c6565b602060405180830381865afa15801561343e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134629190615132565b61346c90866150d5565b945050508060010190506132e8565b505095945050505050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001613556929190615410565b5f60605f8061359785613034565b915091505f876040015188602001516135b091906153ad565b90508060ff1667ffffffffffffffff8111156135ce576135ce614890565b6040519080825280602002602001820160405280156135f7578160200160208202803683370190505b5093505f5b8160ff168160ff161015610f12575f896020015160ff168260ff16106136505760a08a015160208b01516136309084615076565b60ff1681518110613643576136436147c6565b6020026020010151613672565b89608001518260ff1681518110613669576136696147c6565b60200260200101515b60408051602081019091525f808252919250905b85518110156136de578360ff168682815181106136a5576136a56147c6565b602002602001015160ff16036136d6578681815181106136c7576136c76147c6565b602002602001015191506136de565b600101613686565b506040517f95d376d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906395d376d790613733908d908590600401615435565b6020604051808303815f875af115801561374f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137739190615132565b878460ff1681518110613788576137886147c6565b6020026020010181815250505f878460ff16815181106137aa576137aa6147c6565b6020026020010151111561385157868360ff16815181106137cd576137cd6147c6565b60200260200101518c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461381f91906150d5565b92505081905550868360ff168151811061383b5761383b6147c6565b60200260200101518861384e91906150d5565b97505b50506001016135fc565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8616016138f5578651156138b8578684846040516020016138a4939291906154b2565b6040516020818303038152906040526138ee565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b96506139c3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff86160161398c5785511561394f5785848460405160200161393b939291906154b2565b604051602081830303815290604052613985565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b95506139c3565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff86166004820152602401610ad4565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff851601613af35760228214613a35576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613a55613a476022600286886152f8565b613a50916154d8565b61410d565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b1660248201529091506034016040516020818303038152906040529150506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff851601613c1157604282111580613b2e5750606282115b15613b65576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613b77613a476022600286886152f8565b90505f613b8b613a476042602287896152f8565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613bbe866042818a6152f8565b613bc7916154d8565b60405160086020938403029190911c9250613bf8916001916011918391889183916031916002918b918b9101615514565b60405160208183030381529060405293505050506113cd565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff85166004820152602401610ad4565b5f80805b8351821015613d27576001909101905f613c678584613dea565b905060028301925060028161ffff161015613cb1576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b5f613cbc8685613d6b565b90508060ff1660ff03613cfb576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b8316613d185760019485019460ff82161b831792505b5061ffff169190910190613c4d565b83518214613d64576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101839052602401610ad4565b5050919050565b5f613d778260016150d5565b83511015613de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401610ad4565b50016001015190565b5f613df68260026150d5565b83511015613e60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606401610ad4565b50016002015190565b606081613e7781601f6150d5565b1015613edf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ad4565b613ee982846150d5565b84511015613f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ad4565b606082158015613f715760405191505f825260208201604052613fd9565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613faa578051835260209283019201613f92565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff0361401f576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61402b8360016153ad565b90505f5b8451811015611d8b575f85828151811061404b5761404b6147c6565b602002602001015190508060ff168360ff16036140c057868281518110614074576140746147c6565b60200260200101518460405160200161408e92919061526e565b6040516020818303038152906040528783815181106140af576140af6147c6565b602002602001018190525050611d8b565b8060ff165f0361410457828683815181106140dd576140dd6147c6565b602002602001019060ff16908160ff1681525050838783815181106140af576140af6147c6565b5060010161402f565b5f6fffffffffffffffffffffffffffffffff821115614162576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526080600482015260248101839052604401610ad4565b5090565b828054828255905f5260205f209081019282156141de579160200282015b828111156141de57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614184565b506141629291505b80821115614162575f81556001016141e6565b5f60208284031215614209575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113cd575f80fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611654575f80fd5b803561426481614238565b919050565b63ffffffff81168114611654575f80fd5b803561426481614269565b5f8060408385031215614296575f80fd5b82356142a181614238565b915060208301356142b181614269565b809150509250929050565b815163ffffffff16815260208083015173ffffffffffffffffffffffffffffffffffffffff16908201526040810161067d565b6020810160038310614328577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f805f60608486031215614340575f80fd5b833561434b81614238565b9250602084013561435b81614238565b929592945050506040919091013590565b5f8083601f84011261437c575f80fd5b50813567ffffffffffffffff811115614393575f80fd5b6020830191508360208260051b85010111156124f5575f80fd5b5f805f604084860312156143bf575f80fd5b83356143ca81614238565b9250602084013567ffffffffffffffff8111156143e5575f80fd5b6143f18682870161436c565b9497909650939450505050565b5f806020838503121561440f575f80fd5b823567ffffffffffffffff811115614425575f80fd5b6144318582860161436c565b90969095509350505050565b5f815180845260208085019450602084015f5b8381101561448257815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614450565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c060808501526144dc60c085018261443d565b905060a083015184820360a08601526144f5828261443d565b95945050505050565b602081525f6113cd602083018461448d565b80358015158114614264575f80fd5b5f805f8060608587031215614532575f80fd5b843567ffffffffffffffff80821115614549575f80fd5b9086019060e0828903121561455c575f80fd5b90945060208601359080821115614571575f80fd5b818701915087601f830112614584575f80fd5b813581811115614592575f80fd5b8860208285010111156145a3575f80fd5b6020830195508094505050506145bb60408601614510565b905092959194509250565b5f5b838110156145e05781810151838201526020016145c8565b50505f910152565b5f81518084526145ff8160208601602086016145c6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f61163b60608301846145e8565b5f60208284031215614664575f80fd5b81356113cd81614269565b5f805f60608486031215614681575f80fd5b833561468c81614269565b9250602084013561469c81614238565b915060408401356146ac81614269565b809150509250925092565b602081525f6113cd60208301846145e8565b5f80602083850312156146da575f80fd5b823567ffffffffffffffff808211156146f1575f80fd5b818501915085601f830112614704575f80fd5b813581811115614712575f80fd5b866020606083028501011115614726575f80fd5b60209290920196919550909350505050565b5f60208284031215614748575f80fd5b5035919050565b81518152602080830151908201526040810161067d565b5f60208284031215614776575f80fd5b81356113cd81614238565b5f8060408385031215614792575f80fd5b823561479d81614238565b946020939093013593505050565b5f602082840312156147bb575f80fd5b81516113cd81614238565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614825575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614862575f80fd5b83018035915067ffffffffffffffff82111561487c575f80fd5b6020019150368190038213156124f5575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156148e0576148e0614890565b60405290565b60405160e0810167ffffffffffffffff811182821017156148e0576148e0614890565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561495057614950614890565b604052919050565b5f60408284031215614968575f80fd5b6040516040810181811067ffffffffffffffff8211171561498b5761498b614890565b604052823561499981614269565b815260208301356149a981614238565b60208201529392505050565b803567ffffffffffffffff81168114614264575f80fd5b803560ff81168114614264575f80fd5b5f82601f8301126149eb575f80fd5b8135602067ffffffffffffffff821115614a0757614a07614890565b8160051b614a16828201614909565b9283528481018201928281019087851115614a2f575f80fd5b83870192505b84831015614a57578235614a4881614238565b82529183019190830190614a35565b979650505050505050565b5f60c08284031215614a72575f80fd5b614a7a6148bd565b9050614a85826149b5565b8152614a93602083016149cc565b6020820152614aa4604083016149cc565b6040820152614ab5606083016149cc565b6060820152608082013567ffffffffffffffff80821115614ad4575f80fd5b614ae0858386016149dc565b608084015260a0840135915080821115614af8575f80fd5b50614b05848285016149dc565b60a08301525092915050565b5f60208284031215614b21575f80fd5b813567ffffffffffffffff811115614b37575f80fd5b61163b84828501614a62565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614825575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614825575f80fd5b5f60208284031215614bb7575f80fd5b6113cd826149cc565b5f60208284031215614bd0575f80fd5b6113cd826149b5565b5f61067d3683614a62565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c17575f80fd5b830160208101925035905067ffffffffffffffff811115614c36575f80fd5b8060051b36038213156124f5575f80fd5b8183525f60208085019450825f5b85811015614482578135614c6881614238565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614c55565b60208082528181018390525f906040808401600586901b8501820187855b88811015614e1f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112614d0f575f80fd5b8b018035614d1c81614269565b63ffffffff16855280880135368290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41018112614d58575f80fd5b8589018890520167ffffffffffffffff614d71826149b5565b1687860152614d818882016149cc565b606060ff80831682890152614d978a85016149cc565b92506080818416818a0152614dad8386016149cc565b935060a09250818416838a0152614dc681860186614be4565b60c08b81015294509150614de1905061010089018483614c47565b925050614df081840184614be4565b93509050838783030160e0880152614e09828483614c47565b978a019796505050928701925050600101614cae565b509098975050505050505050565b604081525f614e3f60408301866145e8565b8281036020840152838152838560208301375f6020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b8135614e9a81614269565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135614eda81614238565b77ffffffffffffffffffffffffffffffffffffffff000000008160201b16837fffffffffffffffff0000000000000000000000000000000000000000000000008416171784555050505050565b60208082528181018390525f90604080840186845b87811015614fa6578135614f4f81614269565b63ffffffff90811684528286013590614f6782614269565b168386015281840135614f7981614238565b73ffffffffffffffffffffffffffffffffffffffff16838501526060928301929190910190600101614f3c565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526080810161163b6040830184805163ffffffff16825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6144f5606083018461448d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561067d5761067d615049565b5f60ff8316806150c6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b8082018082111561067d5761067d615049565b63ffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201525f61512860808301846145e8565b9695505050505050565b5f60208284031215615142575f80fd5b5051919050565b5f82601f830112615158575f80fd5b813567ffffffffffffffff81111561517257615172614890565b6151a360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614909565b8181528460208386010111156151b7575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e082360312156151e3575f80fd5b6151eb6148e6565b6151f4836149b5565b81526152026020840161427a565b602082015261521360408401614259565b60408201526152246060840161427a565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff811115615256575f80fd5b61526236828601615149565b60c08301525092915050565b5f835161527f8184602088016145c6565b8351908301906152938183602088016145c6565b01949350505050565b606081525f6152ae606083018661443d565b602083820360208501526152c2828761443d565b8481036040860152855180825260208088019450909101905f5b81811015614e1f578451835293830193918301916001016152dc565b5f8085851115615306575f80fd5b83861115615312575f80fd5b5050820193919092039150565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561535f5780818660020360031b1b83161692505b505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561535f5760019490940360031b84901b1690921692915050565b60ff818116838216019081111561067d5761067d615049565b63ffffffff8516815267ffffffffffffffff8416602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201525f61512860808301846145e8565b8281525f82516154278160208501602087016145c6565b919091016020019392505050565b6040815263ffffffff83511660408201525f602084015160a0606084015261546060e08401826145e8565b90506040850151608084015267ffffffffffffffff60608601511660a084015273ffffffffffffffffffffffffffffffffffffffff60808601511660c084015282810360208401526144f581856145e8565b5f84516154c38184602089016145c6565b8201838582375f930192835250909392505050565b8035602083101561067d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b166017840152506155f4601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea264697066735822122007106a9f1a4ad0c76a6c3862b682c6be555db12b22a4209a408302fac9b0046164736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002b7c38038062002b7c833981016040819052620000339162000139565b8080816001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000072573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000098919062000168565b3380620000be57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c981620000ea565b506001600160a01b0390911660805263ffffffff1660a052506200018d9050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156200014a575f80fd5b81516001600160a01b038116811462000161575f80fd5b9392505050565b5f6020828403121562000179575f80fd5b815163ffffffff8116811462000161575f80fd5b60805160a0516129c6620001b65f395f61036301525f818161048301526104e701526129c65ff3fe608060405234801561000f575f80fd5b5060043610610115575f3560e01c806343ea4fa9116100ad5780638da5cb5b1161007d578063c40ff83511610063578063c40ff835146102b6578063e084d952146102c9578063f2fde38b146102dc575f80fd5b80638da5cb5b1461026f5780639c33abf714610296575f80fd5b806343ea4fa91461022257806354fd4d50146102355780636750cd4c14610254578063715018a614610267575f80fd5b806320efd722116100e857806320efd7221461017857806329460b0b1461018b57806339e3f9381461019e5780633c782a52146101be575f80fd5b806301ffc9a7146101195780630223536e146101415780630894edf1146101565780631881d94d14610169575b5f80fd5b61012c610127366004611bf2565b6102ef565b60405190151581526020015b60405180910390f35b61015461014f366004611c92565b61034a565b005b610154610164366004611ceb565b61035c565b60016040516101389190611d33565b610154610186366004611dd6565b6104e5565b610154610199366004611e25565b610645565b6101b16101ac366004611e77565b610828565b6040516101389190611f69565b6102026101cc366004611f7b565b600260209081525f938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff909116602083015201610138565b6101b1610230366004611e77565b6109c3565b60408051600381525f6020820152600291810191909152606001610138565b61012c610262366004611fad565b610d74565b610154610d7e565b5f5460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610138565b6102a96102a4366004611fc6565b610d91565b6040516101389190611ffd565b6101546102c4366004612067565b610e31565b61012c6102d7366004612283565b610e41565b6101546102ea3660046122cd565b610e55565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0ab7be9f000000000000000000000000000000000000000000000000000000001480610344575061034482610eb8565b92915050565b61035684848484610f4e565b50505050565b61038783837f0000000000000000000000000000000000000000000000000000000000000000611060565b5f610392848461112e565b90505f61039f858561113f565b90505f6103ac83836109c3565b90506103d08187876040516103c29291906122e6565b604051809103902086611161565b5f60405180606001604052808463ffffffff1681526020016103f2898961130a565b81526020016104018989611322565b67ffffffffffffffff908116909152604080517fa825d747000000000000000000000000000000000000000000000000000000008152835163ffffffff1660048201526020840151602482015290830151909116604482015273ffffffffffffffffffffffffffffffffffffffff8681166064830152608482018890529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b1580156104c6575f80fd5b505af11580156104d8573d5f803e3d5ffd5b5050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610554576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156103565736838383818110610571576105716122f5565b90506020028101906105839190612322565b905061059a6105956020830183611fad565b611344565b60026105ac6040830160208401611fad565b63ffffffff16036105ec576105e76105c76020830183611fad565b866105d5604085018561235e565b8101906105e291906123bf565b61138b565b61063c565b6105fc6040820160208301611fad565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610556565b61064d6113e1565b5f5b818110156107ea573683838381811061066a5761066a6122f5565b905060200281019061067c91906123f1565b905060ff61068d6020830183612423565b61069e906040810190602001612455565b60ff16036106d8576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6106e76020830183612423565b6106f8906060810190604001612455565b60ff1603610732576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6107486020830183612423565b61075690602081019061246e565b67ffffffffffffffff1603610797576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b56107a76020830183612423565b6107b090612487565b611433565b6107e15f6107c66020840184611fad565b6107d36020850185612423565b6107dc90612487565b611484565b5060010161064f565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b560828260405161081c92919061253c565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561094557602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161091a575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156109b257602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610987575b505050505081525050905092915050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610a7257825467ffffffffffffffff168452610a91565b67ffffffffffffffff81811614610a915767ffffffffffffffff811684525b815468010000000000000000900460ff16610b4557825468010000000000000000900460ff1615610b405782600101805480602002602001604051908101604052809291908181526020018280548015610b1f57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610af4575b50505050506080850152825468010000000000000000900460ff1660208501525b610be1565b815468010000000000000000900460ff90811614610be15781600101805480602002602001604051908101604052809291908181526020018280548015610bc057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b95575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610cae5782546901000000000000000000900460ff1615610ca95782600201805480602002602001604051908101604052809291908181526020018280548015610c7157602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c46575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d62565b81546901000000000000000000900460ff90811614610d625781600201805480602002602001604051908101604052809291908181526020018280548015610d2a57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610cff575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d6b84611433565b50505092915050565b5f61034482611817565b610d866113e1565b610d8f5f61187d565b565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601610df057610dca83856109c3565b604051602001610dda9190611f69565b6040516020818303038152906040529050610e2a565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610633565b9392505050565b610e3c838383611060565b505050565b5f610e4d8484846118f1565b949350505050565b610e5d6113e1565b73ffffffffffffffffffffffffffffffffffffffff8116610eac576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610633565b610eb58161187d565b50565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061034457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610344565b6040805180820182526001815267ffffffffffffffff8316602082015290516002905f90610f7f90889088906122e6565b604080519182900390912082526020808301939093529081015f9081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916110529187908790869088906126d6565b60405180910390a150505050565b6051821461109a576040517fc9bf37b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016110a684846119f1565b60ff16146110e0576040517f3a9ae7b900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff166110f18484611a12565b63ffffffff1614610e3c576040517f42d2c97e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e2a61113c8484611a21565b90565b5f61114e600d60098486612759565b61115791612780565b60e01c9392505050565b61116c8383836118f1565b6111a2576040517f4c3118d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611257575f5b836020015160ff168160ff161015611255575f83815260026020908152604080832085845290915281206080860151805191929160ff85169081106111f8576111f86122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001690556001016111b1565b505b604083015160ff1615610e3c575f5b836040015160ff168160ff161015610356575f838152600260209081526040808320858452909152812060a0860151805191929160ff85169081106112ad576112ad6122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611266565b5f611319602d600d8486612759565b610e2a916127c8565b5f611331600960018486612759565b61133a91612804565b60c01c9392505050565b61134d81611817565b610eb5576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610633565b611396828483611484565b6113a082846109c3565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516113d49392919061284a565b60405180910390a1505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610d8f576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610633565b602081015160ff1615801561144d5750606081015160ff16155b15610eb5576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff908116148061149f5750602081015160ff16155b156114e657608081015151156114e1576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611565565b806020015160ff168160800151511415806115215750600261150a600160ff6128b1565b61151491906128ca565b60ff16816020015160ff16115b15611558576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115658160800151611a30565b604081015160ff90811614806115805750604081015160ff16155b156116065760a081015151156115c2576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611601576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd565b806040015160ff168160a00151511415806116415750600261162a600160ff6128b1565b61163491906128ca565b60ff16816040015160ff16115b15611678576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806116995750806040015160ff16816060015160ff16115b156116d0576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd8160a00151611a30565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a01000000000000000000009590911694909402939093178355608084015180518594936117f393908501920190611b56565b5060a0820151805161180f916002840191602090910190611b56565b505050505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff16151580610e2a5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60208301515f9060ff161561196f575f5b846020015160ff168160ff1610156119585761194385608001518260ff1681518110611930576119306122f5565b60200260200101518585885f0151611ac8565b611950575f915050610e2a565b600101611902565b50836040015160ff165f0361196f57506001610e2a565b60608401515f5b856040015160ff168160ff1610156119e6576119b78660a001518260ff16815181106119a4576119a46122f5565b60200260200101518686895f0151611ac8565b156119de57816119c681612910565b9250508160ff165f036119de57600192505050610e2a565b600101611976565b505f95945050505050565b5f6119ff6001828486612759565b611a089161294a565b60f81c9392505050565b5f61114e6031602d8486612759565b5f611319605160318486612759565b5f805b8251811015610e3c575f838281518110611a4f57611a4f6122f5565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611611abe576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101611a33565b5f838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff16938301939093529091611b4c57508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b828054828255905f5260205f20908101928215611bce579160200282015b82811115611bce57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190611b74565b50611bda929150611bde565b5090565b5b80821115611bda575f8155600101611bdf565b5f60208284031215611c02575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e2a575f80fd5b5f8083601f840112611c41575f80fd5b50813567ffffffffffffffff811115611c58575f80fd5b602083019150836020828501011115611c6f575f80fd5b9250929050565b803567ffffffffffffffff81168114611c8d575f80fd5b919050565b5f805f8060608587031215611ca5575f80fd5b843567ffffffffffffffff811115611cbb575f80fd5b611cc787828801611c31565b90955093505060208501359150611ce060408601611c76565b905092959194509250565b5f805f60408486031215611cfd575f80fd5b833567ffffffffffffffff811115611d13575f80fd5b611d1f86828701611c31565b909790965060209590950135949350505050565b6020810160038310611d6c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b803573ffffffffffffffffffffffffffffffffffffffff81168114611c8d575f80fd5b5f8083601f840112611da5575f80fd5b50813567ffffffffffffffff811115611dbc575f80fd5b6020830191508360208260051b8501011115611c6f575f80fd5b5f805f60408486031215611de8575f80fd5b611df184611d72565b9250602084013567ffffffffffffffff811115611e0c575f80fd5b611e1886828701611d95565b9497909650939450505050565b5f8060208385031215611e36575f80fd5b823567ffffffffffffffff811115611e4c575f80fd5b611e5885828601611d95565b90969095509350505050565b803563ffffffff81168114611c8d575f80fd5b5f8060408385031215611e88575f80fd5b611e9183611d72565b9150611e9f60208401611e64565b90509250929050565b5f815180845260208085019450602084015f5b83811015611eed57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611ebb565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152611f4760c0850182611ea8565b905060a083015184820360a0860152611f608282611ea8565b95945050505050565b602081525f610e2a6020830184611ef8565b5f805f60608486031215611f8d575f80fd5b8335925060208401359150611fa460408501611d72565b90509250925092565b5f60208284031215611fbd575f80fd5b610e2a82611e64565b5f805f60608486031215611fd8575f80fd5b611fe184611e64565b9250611fef60208501611d72565b9150611fa460408501611e64565b5f602080835283518060208501525f5b818110156120295785810183015185820160400152820161200d565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f805f60408486031215612079575f80fd5b833567ffffffffffffffff81111561208f575f80fd5b61209b86828701611c31565b9094509250611fa4905060208501611e64565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156120fe576120fe6120ae565b60405290565b803560ff81168114611c8d575f80fd5b5f82601f830112612123575f80fd5b8135602067ffffffffffffffff80831115612140576121406120ae565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715612183576121836120ae565b60405293845260208187018101949081019250878511156121a2575f80fd5b6020870191505b848210156121c9576121ba82611d72565b835291830191908301906121a9565b979650505050505050565b5f60c082840312156121e4575f80fd5b6121ec6120db565b90506121f782611c76565b815261220560208301612104565b602082015261221660408301612104565b604082015261222760608301612104565b6060820152608082013567ffffffffffffffff80821115612246575f80fd5b61225285838601612114565b608084015260a084013591508082111561226a575f80fd5b5061227784828501612114565b60a08301525092915050565b5f805f60608486031215612295575f80fd5b833567ffffffffffffffff8111156122ab575f80fd5b6122b7868287016121d4565b9660208601359650604090950135949350505050565b5f602082840312156122dd575f80fd5b610e2a82611d72565b818382375f9101908152919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112612354575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612391575f80fd5b83018035915067ffffffffffffffff8211156123ab575f80fd5b602001915036819003821315611c6f575f80fd5b5f602082840312156123cf575f80fd5b813567ffffffffffffffff8111156123e5575f80fd5b610e4d848285016121d4565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612354575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612354575f80fd5b5f60208284031215612465575f80fd5b610e2a82612104565b5f6020828403121561247e575f80fd5b610e2a82611c76565b5f61034436836121d4565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124c5575f80fd5b830160208101925035905067ffffffffffffffff8111156124e4575f80fd5b8060051b3603821315611c6f575f80fd5b8183525f60208085019450825f5b85811015611eed5773ffffffffffffffffffffffffffffffffffffffff61252983611d72565b1687529582019590820190600101612503565b60208082528181018390525f906040808401600586901b8501820187855b888110156126c8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c36030181126125bb575f80fd5b8b0163ffffffff6125cb82611e64565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612601575f80fd5b8589018890520167ffffffffffffffff61261a82611c76565b168786015261262a888201612104565b606060ff808316828901526126408a8501612104565b92506080818416818a0152612656838601612104565b935060a09250818416838a015261266f81860186612492565b60c08b8101529450915061268a9050610100890184836124f5565b92505061269981840184612492565b93509050838783030160e08801526126b28284836124f5565b978a01979650505092870192505060010161255a565b509098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a08301375f60a085830101525f60a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b5f8085851115612767575f80fd5b83861115612773575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156127c05780818660040360031b1b83161692505b505092915050565b80356020831015610344577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156127c05760089490940360031b84901b1690921692915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f611f606060830184611ef8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561034457610344612884565b5f60ff831680612901577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b5f60ff82168061292257612922612884565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156127c05760019490940360031b84901b169092169291505056fea264697066735822122049ae6e8c1120ac3b04c6e78fb5426f5903144b4cb03d43aa8492006a0cbef95864736f6c6343000816003360e060405234801562000010575f80fd5b5060405162005cb238038062005cb2833981016040819052620000339162000170565b82836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000071573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000979190620001ba565b3380620000bd57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c88162000109565b506001600160a01b0391821660805263ffffffff1660a05260c092909252600655600280546001600160a01b031916939091169290921790915550620001e6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016d575f80fd5b50565b5f805f806080858703121562000184575f80fd5b8451620001918162000158565b6020860151909450620001a48162000158565b6040860151606090960151949790965092505050565b5f60208284031215620001cb575f80fd5b815163ffffffff81168114620001df575f80fd5b9392505050565b60805160a05160c051615a7e620002345f395f81816121c00152612ffa01525f610e0f01525f81816107510152818161089401528181610a0f01528181610ff80152611cee0152615a7e5ff3fe60806040526004361061019c575f3560e01c80637620fd01116100dc578063d15b0d4911610087578063f0f4426011610062578063f0f442601461055b578063f2fde38b1461057a578063faaebd2114610599578063fd9be522146105c4575f80fd5b8063d15b0d49146104f1578063d80e9bd914610510578063ea69d69d1461053c575f80fd5b80639c33abf7116100b75780639c33abf714610487578063ab750e75146104b3578063c85f4b4e146104d2575f80fd5b80637620fd01146103d65780638da5cb5b146104325780638eb0bf301461045b575f80fd5b806320efd7221161014757806354fd4d501161012257806354fd4d5014610359578063594924da146103845780636750cd4c146103a3578063715018a6146103c2575f80fd5b806320efd722146102d15780633c782a52146102f05780634389e58f1461032c575f80fd5b80631881d94d116101775780631881d94d1461024b5780631fb5122514610266578063200175f7146102b0575f80fd5b806301ffc9a7146101a7578063052368ca146101db5780630e97289b146101fa575f80fd5b366101a357005b5f80fd5b3480156101b2575f80fd5b506101c66101c1366004614622565b6105e3565b60405190151581526020015b60405180910390f35b3480156101e6575f80fd5b506101c66101f5366004614661565b6106c7565b348015610205575f80fd5b506002546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b348015610256575f80fd5b5060026040516101d291906146b5565b348015610271575f80fd5b506102a261028036600461474f565b600360209081525f938452604080852082529284528284209052825290205481565b6040519081526020016101d2565b3480156102bb575f80fd5b506102cf6102ca366004614791565b6106e7565b005b3480156102dc575f80fd5b506102cf6102eb366004614817565b610892565b3480156102fb575f80fd5b506102a261030a366004614868565b600460209081525f938452604080852082529284528284209052825290205481565b348015610337575f80fd5b5061034b6103463660046148dc565b6109f8565b6040516101d29291906149c9565b348015610364575f80fd5b5060408051600a81525f60208201526002918101919091526060016101d2565b34801561038f575f80fd5b506102cf61039e3660046149ec565b610d8d565b3480156103ae575f80fd5b506101c66103bd366004614a39565b61105c565b3480156103cd575f80fd5b506102cf611066565b3480156103e1575f80fd5b5061040660075460065473ffffffffffffffffffffffffffffffffffffffff90911691565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d2565b34801561043d575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610226565b348015610466575f80fd5b5061047a610475366004614a52565b611079565b6040516101d29190614b52565b348015610492575f80fd5b506104a66104a1366004614b64565b6114bd565b6040516101d29190614b9d565b3480156104be575f80fd5b506102cf6104cd3660046149ec565b61155d565b3480156104dd575f80fd5b506102cf6104ec366004614baf565b6115e6565b3480156104fc575f80fd5b506102cf61050b366004614bee565b6117cd565b34801561051b575f80fd5b5061052f61052a3660046148dc565b61185b565b6040516101d29190614c05565b348015610547575f80fd5b5061047a610556366004614a52565b6119c4565b348015610566575f80fd5b506102cf610575366004614c1c565b611b7e565b348015610585575f80fd5b506102cf610594366004614c1c565b611bf9565b3480156105a4575f80fd5b506102a26105b3366004614c1c565b60056020525f908152604090205481565b3480156105cf575f80fd5b506102cf6105de366004614c37565b611c5c565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061067557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b806106c157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f6106dc6106d486614e6e565b858585611dcc565b90505b949350505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610738576040517f96830d1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107dc9190614e79565b73ffffffffffffffffffffffffffffffffffffffff1603610829576040517fb77f504400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610834838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610901576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156109f2573683838381811061091e5761091e614e94565b90506020028101906109309190614ec1565b90506109476109426020830183614a39565b611fac565b60016109596040830160208401614a39565b63ffffffff1603610999576109946109746020830183614a39565b866109826040850185614efd565b81019061098f9190614f5e565b611ff3565b6109e9565b6109a96040820160208301614a39565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610903565b50505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610a7c576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6080860135610aad610a946060890160408a01614c1c565b73ffffffffffffffffffffffffffffffffffffffff1690565b14610ae4576040517fa4884a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80610af188888861203c565b90925090505f80610b22610b0b60608c0160408d01614c1c565b610b1b60808d0160608e01614a39565b858a6120c1565b9092509050610b318284614fbd565b9250610b4060c08b018b614efd565b604051610b4e929190614fd0565b604051809103902060035f8c6040016020810190610b6c9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f90812090610ba460808e0160608f01614a39565b63ffffffff1681526020808201929092526040015f90812091610bc9908e018e614fdf565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f20819055505f610ce36040518060e001604052808d5f016020810190610c0f9190614fdf565b67ffffffffffffffff1681526020018d6060016020810190610c319190614a39565b63ffffffff1681526020018d6040016020810190610c4f9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff1681526020018d6020016020810190610c7d9190614a39565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610ca960c08f018f614efd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505091525061224b565b6002546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610d3e9084908e908e9060040161503f565b5f604051808303815f87803b158015610d55575f80fd5b505af1158015610d67573d5f803e3d5ffd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610dc7576040517f864d08b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001610dd385856122b0565b60ff1614610e0d576040517f7952a82f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610e3e85856122d1565b63ffffffff1614610e7b576040517f3e96df1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e8685856122f3565b90505f610e938686612304565b90505f610ea08787612313565b73ffffffffffffffffffffffffffffffffffffffff84165f90815260036020908152604080832063ffffffff87168452825280832067ffffffffffffffff851684529091529020549091508514610f23576040517f660e96ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610f2e8484611079565b9050610f53818989604051610f44929190614fd0565b60405180910390208888612335565b5f60405180606001604052808563ffffffff168152602001610f758b8b6124ca565b815267ffffffffffffffff858116602092830152604080517fa825d747000000000000000000000000000000000000000000000000000000008152845163ffffffff16600482015292840151602484015283015116604482015273ffffffffffffffffffffffffffffffffffffffff8781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b15801561103b575f80fd5b505af115801561104d573d5f803e3d5ffd5b50505050505050505050505050565b5f6106c1826124e2565b61106e612560565b6110775f6125b2565b565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88811685526001845286852092855291909252939091208054929391929091168061113057825473ffffffffffffffffffffffffffffffffffffffff16611132565b805b73ffffffffffffffffffffffffffffffffffffffff168452815474010000000000000000000000000000000000000000900460ff1661122257825474010000000000000000000000000000000000000000900460ff161561121d57826001018054806020026020016040519081016040528092919081815260200182805480156111f057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111c5575b50505050506080850152825474010000000000000000000000000000000000000000900460ff1660208501525b6112d6565b815474010000000000000000000000000000000000000000900460ff908116146112d657816001018054806020026020016040519081016040528092919081815260200182805480156112a957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161127e575b50505050506080850152815474010000000000000000000000000000000000000000900460ff1660208501525b81547501000000000000000000000000000000000000000000900460ff166113d35782547501000000000000000000000000000000000000000000900460ff16156113ce578260020180548060200260200160405190810160405280929190818152602001828054801561137e57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611353575b505050505060a0850152825460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114ab565b81547501000000000000000000000000000000000000000000900460ff908116146114ab578160020180548060200260200160405190810160405280929190818152602001828054801561145b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611430575b505050505060a0850152815460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114b484612626565b50505092915050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161151c576114f68385611079565b6040516020016115069190614b52565b6040516020818303038152906040529050611556565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff831660048201526024016109e0565b9392505050565b8060045f8686604051611571929190614fd0565b604080519182900390912082526020808301939093529081015f90812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a95258916115d891879087908790879061506e565b60405180910390a150505050565b6115ee612560565b5f5b8181101561178f573683838381811061160b5761160b614e94565b905060200281019061161d91906150b1565b905060ff61162e60208301836150e3565b61163f906040810190602001615115565b60ff1603611679576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff61168860208301836150e3565b611699906060810190604001615115565b60ff16036116d3576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f16116e360208301836150e3565b6116ec90614e6e565b612626565b5f6116ff60208301836150e3565b61170d906020810190614c1c565b73ffffffffffffffffffffffffffffffffffffffff160361175a576040517f76df55a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117865f61176b6020840184614a39565b61177860208501856150e3565b61178190614e6e565b612677565b506001016115f0565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f3482826040516117c19291906151da565b60405180910390a15050565b6117d5612560565b60065481111561181f576006546040517fb79d12630000000000000000000000000000000000000000000000000000000081526109e0918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f8061187a8686612a25565b90925090505f6118906060890160408a01614c1c565b90505f6118a360808a0160608b01614a39565b90505f6118b08383611079565b90505f6118df82856118c96118c48f61540c565b612c5b565b8e8060c001906118d99190614efd565b8a612d2f565b82516040517fc8f8dcd100000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063c8f8dcd1906119379087908a906004016154a7565b602060405180830381865afa158015611952573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197691906154d5565b6119809082614fbd565b90505f806119908686858d612efb565b909250905061199f8284614fbd565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8084165f90815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff7401000000000000000000000000000000000000000087048116828501527501000000000000000000000000000000000000000000870481168287015276010000000000000000000000000000000000000000000090960490951660608601529182018054845181840281018401909552808552929360808601939092830182828015611b0057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611ad5575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015611b6d57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611b42575b505050505081525050905092915050565b611b86612560565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f90602001611850565b611c01612560565b73ffffffffffffffffffffffffffffffffffffffff8116611c50576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b611c59816125b2565b50565b335f9081526005602052604090205480821115611caf576040517fb79d126300000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016109e0565b335f908152600560209081526040808320858503905580517fe1758bd800000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169263e1758bd892600480820193918290030181865afa158015611d48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190614e79565b9050611d7981858561303c565b6040805133815273ffffffffffffffffffffffffffffffffffffffff861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a6669883906060016115d8565b60208401515f9060ff1615611e80575f5b856020015160ff168160ff161015611e6957611e5486608001518260ff1681518110611e0b57611e0b614e94565b60200260200101518686865f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b611e61575f9150506106df565b600101611ddd565b50846040015160ff165f03611e80575060016106df565b60608501515f5b866040015160ff168160ff161015611f2d57611efe8760a001518260ff1681518110611eb557611eb5614e94565b60200260200101518787875f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b15611f255781611f0d816154ec565b9250508160ff165f03611f25576001925050506106df565b600101611e87565b505f9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611f86576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa773ffffffffffffffffffffffffffffffffffffffff8416838361306c565b505050565b611fb5816124e2565b611c59576040517f0ff03e5400000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526024016109e0565b611ffe828483612677565b6120088284611079565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e14282848360405161088593929190615526565b60605f805f61204b8686612a25565b90925090505f61207461206460608a0160408b01614c1c565b61047560808b0160608c01614a39565b80519091506120939061208d60608b0160408c01614c1c565b856130f9565b93505f806120a2838b86613227565b90925090506120b18287614fbd565b909a909950975050505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526007549192505f9182916121e89173ffffffffffffffffffffffffffffffffffffffff16907f0000000000000000000000000000000000000000000000000000000000000000908490876132ed565b915091506121f887878484613398565b9095509350841561223f5760075473ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604081208054879290612239908490614fbd565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a01519551939861229a986001989197919673ffffffffffffffffffffffffffffffffffffffff169501615560565b6040516020818303038152906040529050919050565b5f6122be6001828486615625565b6122c79161564c565b60f81c9392505050565b5f6122e06031602d8486615625565b6122e991615694565b60e01c9392505050565b5f611556612301848461340f565b90565b5f6122e0600d60098486615625565b5f612322600960018486615625565b61232b916156da565b60c01c9392505050565b61234184848484611dcc565b612377576040517f28ca4b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084015160ff161561241e575f5b846020015160ff168160ff16101561241c575f84815260046020908152604080832086845290915281206080870151805191929160ff85169081106123cd576123cd614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9055806001019050612386565b505b604084015160ff16156109f2575f5b846040015160ff168160ff1610156124c3575f848152600460209081526040808320868452909152812060a0870151805191929160ff851690811061247457612474614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f905580600101905061242d565b5050505050565b5f6124d9602d600d8486615625565b61155691615720565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805474010000000000000000000000000000000000000000900460ff16151580611556575054760100000000000000000000000000000000000000000000900460ff16151592915050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611077576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016109e0565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff161580156126405750606081015160ff16155b15611c59576040517f9b5f9f7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806126925750602081015160ff16155b156126d957608081015151156126d4576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758565b806020015160ff16816080015151141580612714575060026126fd600160ff61575c565b6127079190615775565b60ff16816020015160ff16115b1561274b576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758816080015161341e565b604081015160ff90811614806127735750604081015160ff16155b156127f95760a081015151156127b5576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16156127f4576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d0565b806040015160ff168160a00151511415806128345750600261281d600160ff61575c565b6128279190615775565b60ff16816040015160ff16115b1561286b576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16158061288c5750806040015160ff16816060015160ff16115b156128c3576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d08160a0015161341e565b73ffffffffffffffffffffffffffffffffffffffff8381165f90815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097167fffffffffffffffffffffff000000000000000000000000000000000000000000909116177401000000000000000000000000000000000000000060ff96871602177fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000968616969096027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16959095177601000000000000000000000000000000000000000000009490951693909302939093178255608084015180518594612a0193850192019061458f565b5060a08201518051612a1d91600284019160209091019061458f565b505050505050565b6060806002831015612a65576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b5f612a736002828688615625565b612a7c916157bb565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8201612c4457805f5b86831015612bd1575f612ac560018501858a8c615625565b612ace9161564c565b60f81c90505f819003612b0f576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b8160ff165f03612b2157809150612b5d565b8160ff168160ff1614612b5d57365f612b3c86868c8e615625565b91509150612b4d89898685856134b6565b9099509750859450919250829150505b60018401935f90612b7390600301868b8d615625565b612b7c916157bb565b60f01c90505f819003612bbe576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016109e0565b8060020161ffff16850194505050612aad565b828714612c0d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b6002871115612c3d57365f612c2485858b8d615625565b91509150612c3588888585856134b6565b909850965050505b5050612c52565b612c4f828787613629565b93505b50509250929050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d830152605182015260710161229a565b5f805f612d3b846138a4565b915091505f89604001518a60200151612d549190615801565b90505f5b8160ff168160ff161015612eed575f8b6020015160ff168260ff1610612dac5760a08c015160208d0151612d8c908461575c565b60ff1681518110612d9f57612d9f614e94565b6020026020010151612dce565b8b608001518260ff1681518110612dc557612dc5614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015612e3a578360ff16868281518110612e0157612e01614e94565b602002602001015160ff1603612e3257868181518110612e2357612e23614e94565b60200260200101519150612e3a565b600101612de2565b506040517ffdb9b0f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063fdb9b0f190612e95908f908f908f908f90889060040161581a565b602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed491906154d5565b612ede9088614fbd565b96505050806001019050612d58565b505050509695505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526007549192505f9182916130209173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086613b3e565b9150915061303087878484613398565b94509450505050610d84565b73ffffffffffffffffffffffffffffffffffffffff831661306157611fa78282613be5565b611fa7838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611fa7908490613ce7565b6040517fc015bb7d0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff85169063c015bb7d9061314f90869086906004016154a7565b6020604051808303815f875af115801561316b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061318f91906154d5565b905080156131d15773ffffffffffffffffffffffffffffffffffffffff84165f90815260056020526040812080548392906131cb908490614fbd565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff86168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b5f6060816132376118c48661540c565b90505f61324b6132468761540c565b613d86565b905060606132768861326289840160408b01614c1c565b8561327060c08c018c614efd565b8b613da3565b604051919650915061328e908490849060200161587b565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a00151836040516132da939291906158a9565b60405180910390a1505050935093915050565b5f6060863b80830361331257604080515f80825260208201909252925092505061338e565b5f805f8761ffff1667ffffffffffffffff81111561333257613332614c61565b6040519080825280601f01601f19166020018201604052801561335c576020820181803683370190505b5090505f80885160208a018c8f8ff191503d92508783111561337c578792505b828152825f602083013e909450925050505b9550959350505050565b5f808315806133a8575082516020115b156133b757505f905080610d84565b5f838060200190518101906133cc91906154d5565b905085156133dc57809150613405565b5f60065488116133ee576006546133f0565b875b90508082116133ff5781613401565b805b9350505b5094509492505050565b5f6124d9605160318486615625565b5f805b8251811015611fa7575f83828151811061343d5761343d614e94565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116134ac576040517fc0762a5d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101613421565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161355057865115613513578684846040516020016134ff93929190615905565b604051602081830303815290604052613549565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b965061361e565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016135e7578551156135aa5785848460405160200161359693929190615905565b6040516020818303038152906040526135e0565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b955061361e565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016109e0565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff85160161374e5760228214613690576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6136b06136a2602260028688615625565b6136ab91615720565b614072565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050611556565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff85160161386c576042821115806137895750606282115b156137c0576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6137d26136a2602260028688615625565b90505f6137e66136a2604260228789615625565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613819866042818a615625565b61382291615720565b60405160086020938403029190911c9250613853916001916011918391889183916031916002918b918b910161592b565b6040516020818303038152906040529350505050611556565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016109e0565b60608082515f036138b457915091565b5f6138be846140cb565b90508060ff1660010361396e5760408051600180825281830190925290816020015b60608152602001906001900390816138e057905050925083835f8151811061390a5761390a614e94565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506139428460036141ed565b825f8151811061395457613954614e94565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561398a5761398a614c61565b6040519080825280602002602001820160405280156139b3578160200160208202803683370190505b5091508060ff1667ffffffffffffffff8111156139d2576139d2614c61565b604051908082528060200260200182016040528015613a0557816020015b60608152602001906001900390816139f05790505b5092505f8060ff5b8651831015613ab5576001909201915f613a27888561426c565b6002949094019390505f613a3b89866141ed565b90508260ff1660ff03613a5057809250613aa6565b8260ff168160ff1614613aa6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f613a8e8b87846142eb565b9050613a9c8a8a8784614464565b5093909301929150815b5061ffff169290920191613a0d565b8183035f613ac48985846142eb565b9050613ad288888584614464565b5f5b8660ff168160ff161015613b3257878160ff1681518110613af757613af7614e94565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613ad4565b50505050505050915091565b5f6060853b808303613b6357604080515f808252602082019092529250925050610d84565b5f805f8761ffff1667ffffffffffffffff811115613b8357613b83614c61565b6040519080825280601f01601f191660200182016040528015613bad576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115613bcc578792505b828152825f602083013e90999098509650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216613c32576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114613c88576040519150601f19603f3d011682016040523d82523d5f602084013e613c8d565b606091505b5050905080611fa7576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016109e0565b5f8060205f8451602086015f885af180613d06576040513d5f823e3d81fd5b50505f513d91508115613d1d578060011415613d37565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016109e0565b60608160a001518260c0015160405160200161229a929190615a23565b5f60605f80613db1856138a4565b915091505f8a604001518b60200151613dca9190615801565b90508060ff1667ffffffffffffffff811115613de857613de8614c61565b604051908082528060200260200182016040528015613e11578160200160208202803683370190505b5093505f5b8160ff168160ff161015614063575f8c6020015160ff168260ff1610613e6a5760a08d015160208e0151613e4a908461575c565b60ff1681518110613e5d57613e5d614e94565b6020026020010151613e8c565b8c608001518260ff1681518110613e8357613e83614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015613ef8578360ff16868281518110613ebf57613ebf614e94565b602002602001015160ff1603613ef057868181518110613ee157613ee1614e94565b60200260200101519150613ef8565b600101613ea0565b508173ffffffffffffffffffffffffffffffffffffffff1663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b8152600401613f3a95949392919061581a565b6020604051808303815f875af1158015613f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7a91906154d5565b878460ff1681518110613f8f57613f8f614e94565b6020026020010181815250505f878460ff1681518110613fb157613fb1614e94565b6020026020010151111561405957868360ff1681518110613fd457613fd4614e94565b602002602001015160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546140279190614fbd565b92505081905550868360ff168151811061404357614043614e94565b6020026020010151886140569190614fbd565b97505b5050600101613e16565b50505050965096945050505050565b5f6fffffffffffffffffffffffffffffffff8211156140c7576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016109e0565b5090565b5f80805b83518210156141a9576001909101905f6140e9858461426c565b905060028301925060028161ffff161015614133576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b5f61413e86856141ed565b90508060ff1660ff0361417d576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b831661419a5760019485019460ff82161b831792505b5061ffff1691909101906140cf565b835182146141e6576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018390526024016109e0565b5050919050565b5f6141f9826001614fbd565b83511015614263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e64730000000000000000000000000060448201526064016109e0565b50016001015190565b5f614278826002614fbd565b835110156142e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e647300000000000000000000000060448201526064016109e0565b50016002015190565b6060816142f981601f614fbd565b1015614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b61436b8284614fbd565b845110156143d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b6060821580156143f35760405191505f82526020820160405261445b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561442c578051835260209283019201614414565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff036144a1576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144ad836001615801565b90505f5b8451811015612a1d575f8582815181106144cd576144cd614e94565b602002602001015190508060ff168360ff1603614542578682815181106144f6576144f6614e94565b60200260200101518460405160200161451092919061587b565b60405160208183030381529060405287838151811061453157614531614e94565b602002602001018190525050612a1d565b8060ff165f03614586578286838151811061455f5761455f614e94565b602002602001019060ff16908160ff16815250508387838151811061453157614531614e94565b506001016144b1565b828054828255905f5260205f20908101928215614607579160200282015b8281111561460757825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906145ad565b506140c79291505b808211156140c7575f815560010161460f565b5f60208284031215614632575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611556575f80fd5b5f805f8060808587031215614674575f80fd5b843567ffffffffffffffff81111561468a575f80fd5b850160c0818803121561469b575f80fd5b966020860135965060408601359560600135945092505050565b60208101600383106146ee577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b73ffffffffffffffffffffffffffffffffffffffff81168114611c59575f80fd5b8035614720816146f4565b919050565b803563ffffffff81168114614720575f80fd5b803567ffffffffffffffff81168114614720575f80fd5b5f805f60608486031215614761575f80fd5b833561476c816146f4565b925061477a60208501614725565b915061478860408501614738565b90509250925092565b5f805f606084860312156147a3575f80fd5b83356147ae816146f4565b925060208401356147be816146f4565b929592945050506040919091013590565b5f8083601f8401126147df575f80fd5b50813567ffffffffffffffff8111156147f6575f80fd5b6020830191508360208260051b8501011115614810575f80fd5b9250929050565b5f805f60408486031215614829575f80fd5b8335614834816146f4565b9250602084013567ffffffffffffffff81111561484f575f80fd5b61485b868287016147cf565b9497909650939450505050565b5f805f6060848603121561487a575f80fd5b83359250602084013591506040840135614893816146f4565b809150509250925092565b5f8083601f8401126148ae575f80fd5b50813567ffffffffffffffff8111156148c5575f80fd5b602083019150836020828501011115614810575f80fd5b5f805f80606085870312156148ef575f80fd5b843567ffffffffffffffff80821115614906575f80fd5b9086019060e08289031215614919575f80fd5b9094506020860135908082111561492e575f80fd5b5061493b8782880161489e565b90945092505060408501358015158114614953575f80fd5b939692955090935050565b5f5b83811015614978578181015183820152602001614960565b50505f910152565b5f815180845261499781602086016020860161495e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f6106df6060830184614980565b5f805f80606085870312156149ff575f80fd5b843567ffffffffffffffff811115614a15575f80fd5b614a218782880161489e565b90989097506020870135966040013595509350505050565b5f60208284031215614a49575f80fd5b61155682614725565b5f8060408385031215614a63575f80fd5b8235614a6e816146f4565b9150614a7c60208401614725565b90509250929050565b5f815180845260208085019450602084015f5b83811015614aca57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614a98565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152614b3060c0850182614a85565b905060a083015184820360a0860152614b498282614a85565b95945050505050565b602081525f6115566020830184614ad5565b5f805f60608486031215614b76575f80fd5b614b7f84614725565b92506020840135614b8f816146f4565b915061478860408501614725565b602081525f6115566020830184614980565b5f8060208385031215614bc0575f80fd5b823567ffffffffffffffff811115614bd6575f80fd5b614be2858286016147cf565b90969095509350505050565b5f60208284031215614bfe575f80fd5b5035919050565b8151815260208083015190820152604081016106c1565b5f60208284031215614c2c575f80fd5b8135611556816146f4565b5f8060408385031215614c48575f80fd5b8235614c53816146f4565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b60405290565b60405160e0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614d2157614d21614c61565b604052919050565b803560ff81168114614720575f80fd5b5f82601f830112614d48575f80fd5b8135602067ffffffffffffffff821115614d6457614d64614c61565b8160051b614d73828201614cda565b9283528481018201928281019087851115614d8c575f80fd5b83870192505b84831015614db4578235614da5816146f4565b82529183019190830190614d92565b979650505050505050565b5f60c08284031215614dcf575f80fd5b614dd7614c8e565b9050614de282614715565b8152614df060208301614d29565b6020820152614e0160408301614d29565b6040820152614e1260608301614d29565b6060820152608082013567ffffffffffffffff80821115614e31575f80fd5b614e3d85838601614d39565b608084015260a0840135915080821115614e55575f80fd5b50614e6284828501614d39565b60a08301525092915050565b5f6106c13683614dbf565b5f60208284031215614e89575f80fd5b8151611556816146f4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614ef3575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f30575f80fd5b83018035915067ffffffffffffffff821115614f4a575f80fd5b602001915036819003821315614810575f80fd5b5f60208284031215614f6e575f80fd5b813567ffffffffffffffff811115614f84575f80fd5b6106df84828501614dbf565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156106c1576106c1614f90565b818382375f9101908152919050565b5f60208284031215614fef575f80fd5b61155682614738565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f6150516040830186614980565b8281036020840152615064818587614ff8565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f61509d608083018688614ff8565b604083019490945250606001529392505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614ef3575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614ef3575f80fd5b5f60208284031215615125575f80fd5b61155682614d29565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615161575f80fd5b830160208101925035905067ffffffffffffffff811115615180575f80fd5b8060051b3603821315614810575f80fd5b8183525f60208085019450825f5b85811015614aca5781356151b2816146f4565b73ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161519f565b60208082528181018390525f906040808401600586901b8501820187855b88811015615374577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112615259575f80fd5b8b0163ffffffff61526982614725565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4182360301811261529f575f80fd5b8589018890520180356152b1816146f4565b73ffffffffffffffffffffffffffffffffffffffff16858801526152d6818901614d29565b606060ff808316828901526152ec8a8501614d29565b92506080818416818a0152615302838601614d29565b935060a09250818416838a015261531b8186018661512e565b60c08b81015294509150615336905061010089018483615191565b9250506153458184018461512e565b93509050838783030160e088015261535e828483615191565b978a0197965050509287019250506001016151f8565b509098975050505050505050565b5f82601f830112615391575f80fd5b813567ffffffffffffffff8111156153ab576153ab614c61565b6153dc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614cda565b8181528460208386010111156153f0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0823603121561541c575f80fd5b615424614cb7565b61542d83614738565b815261543b60208401614725565b602082015261544c60408401614715565b604082015261545d60608401614725565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff81111561548f575f80fd5b61549b36828601615382565b60c08301525092915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6106df6040830184614980565b5f602082840312156154e5575f80fd5b5051919050565b5f60ff8216806154fe576154fe614f90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6106dc6060830184614ad5565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d84015250846031830152836051830152825161561181607185016020870161495e565b919091016071019998505050505050505050565b5f8085851115615633575f80fd5b8386111561563f575f80fd5b5050820193919092039150565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561568c5780818660010360031b1b83161692505b505092915050565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561568c5760049490940360031b84901b1690921692915050565b7fffffffffffffffff000000000000000000000000000000000000000000000000813581811691600885101561568c5760089490940360031b84901b1690921692915050565b803560208310156106c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b60ff82811682821603908111156106c1576106c1614f90565b5f60ff8316806157ac577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561568c5760029490940360031b84901b1690921692915050565b60ff81811683821601908111156106c1576106c1614f90565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f6158486080830187614980565b828103604084015261585b818688614ff8565b9050828103606084015261586f8185614980565b98975050505050505050565b5f835161588c81846020880161495e565b8351908301906158a081836020880161495e565b01949350505050565b606081525f6158bb6060830186614a85565b602083820360208501526158cf8287614a85565b8481036040860152855180825260208088019450909101905f5b81811015615374578451835293830193918301916001016158e9565b5f845161591681846020890161495e565b8201838582375f930192835250909392505050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b16601784015250615a0b601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b50602881019190915260480198975050505050505050565b8281525f8251615a3a81602085016020870161495e565b91909101602001939250505056fea2646970667358221220bea5f362b07accaf075edb98d71a1b4a7df6e2ebc2aacf15c6426cab5ad7691964736f6c63430008160033608060405234801562000010575f80fd5b5060405162003af938038062003af983398101604081905262000033916200045e565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b038581169190911790915584908490612ee090859085908216156200008d576200008b5f8362000220565b505b5f5b8551811015620000f157620000e77f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d357620000d36200050c565b60200260200101516200022060201b60201c565b506001016200008f565b505f5b81518110156200014257620001387fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d357620000d36200050c565b50600101620000f4565b505060016004908155600680546001600160a01b0319166001600160a01b038d169081179091556040805163416ecebf60e01b8152905191965063416ecebf95508083019450602093509091908290030181865afa158015620001a7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001cd919062000520565b6006805463ffffffff92909216600160a01b0263ffffffff60a01b199092169190911790555050600780546001600160a01b039094166001600160a01b0319909416939093179092555062000586915050565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156200027157505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620002be57600180546015906200029990600160a81b90046001600160401b03166200054c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b620002ca8383620002d6565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1662000379575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003303390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620002d0565b505f620002d0565b80516001600160a01b038116811462000398575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620003c1575f80fd5b815160206001600160401b0380831115620003e057620003e06200039d565b8260051b604051601f19603f830116810181811084821117156200040857620004086200039d565b604052938452602081870181019490810192508785111562000428575f80fd5b6020870191505b848210156200045357620004438262000381565b835291830191908301906200042f565b979650505050505050565b5f805f805f8060c0878903121562000474575f80fd5b6200047f8762000381565b95506200048f6020880162000381565b60408801519095506001600160401b0380821115620004ac575f80fd5b620004ba8a838b01620003b1565b9550620004ca60608a0162000381565b9450620004da60808a0162000381565b935060a0890151915080821115620004f0575f80fd5b50620004ff89828a01620003b1565b9150509295509295509295565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121562000531575f80fd5b815163ffffffff8116811462000545575f80fd5b9392505050565b5f6001600160401b038281166002600160401b031981016200057c57634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b61356580620005945f395ff3fe608060405260043610610242575f3560e01c8063724e78da11610131578063c358de0a116100ac578063cd88b9031161007c578063d2ae210411610062578063d2ae2104146107ae578063d547741f14610800578063e395eb5c1461081f575f80fd5b8063cd88b9031461077c578063cfc325701461079b575f80fd5b8063c358de0a146106ee578063c416aa511461070d578063c7b2370b1461073e578063c8f8dcd11461075d575f80fd5b806391d1485411610101578063a217fddf116100e7578063a217fddf14610690578063c015bb7d146106a3578063c2803b2c146106c2575f80fd5b806391d14854146105675780639e944965146105b6575f80fd5b8063724e78da146104f6578063741bef1a146105155780637cd44734146105415780638624ba0714610554575f80fd5b80633146646a116101c1578063475b6d9e116101915780635e280f11116101775780635e280f1114610467578063709eb664146104b8578063717e8a42146104d7575f80fd5b8063475b6d9e1461043d5780635c975abb14610450575f80fd5b80633146646a146103cd57806336568abe146103ec5780633927c0751461040b5780633d85ac331461041e575f80fd5b806316c38b3c1161021657806326e67a37116101fc57806326e67a37146103635780632de113761461038f5780632f2ff15d146103ae575f80fd5b806316c38b3c14610308578063248a9ca314610327575f80fd5b8062bf2e801461024657806301e336671461029957806301ffc9a7146102ba5780631095b6d7146102e9575b5f80fd5b348015610251575f80fd5b50600154610281907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b3480156102a4575f80fd5b506102b86102b336600461267b565b610868565b005b3480156102c5575f80fd5b506102d96102d43660046126b4565b6108a3565b6040519015158152602001610290565b3480156102f4575f80fd5b506102b861030336600461267b565b61093b565b348015610313575f80fd5b506102b86103223660046126f3565b610ac4565b348015610332575f80fd5b50610355610341366004612712565b5f9081526020819052604090206001015490565b604051908152602001610290565b34801561036e575f80fd5b5061038261037d36600461273c565b610ae8565b6040516102909190612755565b34801561039a575f80fd5b506102d96103a936600461279b565b610b6b565b3480156103b9575f80fd5b506102b86103c83660046127b4565b610c4c565b3480156103d8575f80fd5b506102b86103e7366004612823565b610c70565b3480156103f7575f80fd5b506102b86104063660046127b4565b610d33565b6102b86104193660046128c2565b610d65565b348015610429575f80fd5b506102b8610438366004612a3b565b610e53565b6102b861044b366004612b50565b611035565b34801561045b575f80fd5b5060015460ff166102d9565b348015610472575f80fd5b506006546104939073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610290565b3480156104c3575f80fd5b506103556104d2366004612bca565b611089565b3480156104e2575f80fd5b506103556104f1366004612bca565b6111e5565b348015610501575f80fd5b506102b861051036600461279b565b611365565b348015610520575f80fd5b506002546104939073ffffffffffffffffffffffffffffffffffffffff1681565b6102b861054f366004612c34565b611402565b6102b8610562366004612cf0565b6114e1565b348015610572575f80fd5b506102d96105813660046127b4565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156105c1575f80fd5b506106436105d036600461273c565b60056020525f90815260409020805460019091015467ffffffffffffffff8083169261ffff68010000000000000000820416926fffffffffffffffffffffffffffffffff6a0100000000000000000000909204821692918116917001000000000000000000000000000000009091041685565b6040805167ffffffffffffffff968716815261ffff90951660208601526fffffffffffffffffffffffffffffffff938416908501529116606083015291909116608082015260a001610290565b34801561069b575f80fd5b506103555f81565b3480156106ae575f80fd5b506103556106bd366004612d5e565b611616565b3480156106cd575f80fd5b506007546104939073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f9575f80fd5b506102b8610708366004612dad565b6117a3565b348015610718575f80fd5b5060015461049390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b348015610749575f80fd5b506102b861075836600461279b565b611851565b348015610768575f80fd5b50610355610777366004612d5e565b6118f5565b348015610787575f80fd5b506102b8610796366004612dc6565b611a56565b6102b86107a9366004612e45565b611a9f565b3480156107b9575f80fd5b506001546107e7907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610290565b34801561080b575f80fd5b506102b861081a3660046127b4565b611b7d565b34801561082a575f80fd5b506006546108539074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610290565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561089281611ba1565b61089d848484611bae565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061093557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561096581611ba1565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff166109e2576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610a4f575f80fd5b505af1158015610a61573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b5f610ace81611ba1565b8115610ae057610adc611be3565b5050565b610adc611c62565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610b5f57602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b305790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610bbe57505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610c33575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610c4057506001919050565b505f919050565b919050565b5f82815260208190526040902060010154610c6681611ba1565b61089d8383611cb9565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610c9a81611ba1565b610ca2611d89565b6007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610cfc90879087908790600401612ec6565b5f604051808303815f87803b158015610d13575f80fd5b505af1158015610d25573d5f803e3d5ffd5b5050505061089d6001600455565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610d8f81611ba1565b610d97611d89565b610db788610da58686611dcc565b610daf8787611dee565b8a8a8a611e06565b506007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610e1290879087908790600401612ec6565b5f604051808303815f87803b158015610e29575f80fd5b505af1158015610e3b573d5f803e3d5ffd5b50505050610e496001600455565b5050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610e7d81611ba1565b5f5b8251811015610ff9575f838281518110610e9b57610e9b612ee9565b6020908102919091018101516040805160a080820183528385015167ffffffffffffffff908116835260608086015161ffff9081168589019081526080808901516fffffffffffffffffffffffffffffffff908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff165f9081526005909a5296909820945185549851945188166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff9590921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090991690841617979097179290921695909517825551600191820180549351909516700100000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931693169290921717909155919091019050610e7f565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc53826040516110299190612f16565b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561105f81611ba1565b611067611d89565b611075878787878787611e06565b506110806001600455565b50505050505050565b5f8461109481610b6b565b6110ca576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110d2611f73565b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a1660208084018290528a831684860152606084018a905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f434ee01600000000000000000000000000000000000000000000000000000000815292936101009091049091169163434ee0169161119a918591908a908a90600401612fbc565b602060405180830381865afa1580156111b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d99190613079565b98975050505050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61121081611ba1565b8561121a81610b6b565b611250576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8b1660208084018290528b831684860152606084018b905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f566ef76200000000000000000000000000000000000000000000000000000000815292936101009091049091169163566ef76291611318918591908b908b90600401612fbc565b6020604051808303815f875af1158015611334573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113589190613079565b9998505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561138f81611ba1565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561142c81611ba1565b611434611d89565b6006546040517f91d20fa100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906391d20fa1908490349061149c908f908f908f908f908f908f908f908f90600401613090565b5f604051808303818589803b1580156114b3575f80fd5b5088f11580156114c5573d5f803e3d5ffd5b5050505050506114d56001600455565b50505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561150b81611ba1565b611513611d89565b6006545f9061155190602085019074010000000000000000000000000000000000000000900463ffffffff16611549828761279b565b898989611e06565b90505f61155e8234613128565b60065490915073ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08601358360208801611593818a61279b565b60808a01356115a560a08c018c61313b565b6115b260c08e018e61313b565b6040518a63ffffffff1660e01b81526004016115d497969594939291906131d6565b5f604051808303818589803b1580156115eb575f80fd5b5088f11580156115fd573d5f803e3d5ffd5b505050505050505061160f6001600455565b5050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61164181611ba1565b8461164b81610b6b565b611681576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528881166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f65003784000000000000000000000000000000000000000000000000000000008152929361010090910490911691636500378491611758918591908b908b90600401613239565b6020604051808303815f875af1158015611774573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117989190613079565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756117cd81611ba1565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561187b81611ba1565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611029565b5f8361190081610b6b565b611936576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528781166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f337c7a9e00000000000000000000000000000000000000000000000000000000815292936101009091049091169163337c7a9e91611a0d918591908a908a90600401613239565b602060405180830381865afa158015611a28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4c9190613079565b9695505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a8081611ba1565b63ffffffff84165f90815260036020526040902061160f9084846125a0565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611ac981611ba1565b611ad1611d89565b60065473ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08401353460208601611b03818861279b565b6080880135611b1560a08a018a61313b565b611b2260c08c018c61313b565b6040518a63ffffffff1660e01b8152600401611b4497969594939291906131d6565b5f604051808303818589803b158015611b5b575f80fd5b5088f1158015611b6d573d5f803e3d5ffd5b505050505050610adc6001600455565b5f82815260208190526040902060010154611b9781611ba1565b61089d8383611fb2565b611bab8133612077565b50565b73ffffffffffffffffffffffffffffffffffffffff8316611bd857611bd38282612101565b505050565b611bd3838383612203565b611beb611f73565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611c6a612271565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611c38565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015611d1657505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15611d755760018054601590611d4e907501000000000000000000000000000000000000000000900467ffffffffffffffff166132e9565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836122ad565b5060019392505050565b600260045403611dc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600455565b5f611ddb6031602d848661330f565b611de491613336565b60e01c9392505050565b5f611dff611dfc84846123a6565b90565b9392505050565b5f808367ffffffffffffffff811115611e2157611e2161294f565b604051908082528060200260200182016040528015611e4a578160200160208202803683370190505b5090505f5b84811015611f26575f868683818110611e6a57611e6a612ee9565b905060400201803603810190611e80919061337e565b90505f815f015173ffffffffffffffffffffffffffffffffffffffff16826020015187906040515f60405180830381858888f193505050503d805f8114611ee2576040519150601f19603f3d011682016040523d82523d5f602084013e611ee7565b606091505b5050905080848481518110611efe57611efe612ee9565b911515602092830291909101820152820151611f1a90866133d3565b94505050600101611e4f565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c3468888888888886604051611f6096959493929190613422565b60405180910390a1509695505050505050565b60015460ff1615611fb0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561200e57505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b1561206d5760018054601590612046907501000000000000000000000000000000000000000000900467ffffffffffffffff166134b2565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836123be565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610adc576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661214e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146121a4576040519150601f19603f3d011682016040523d82523d5f602084013e6121a9565b606091505b5050905080611bd3576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016120f8565b73ffffffffffffffffffffffffffffffffffffffff8216612250576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bd373ffffffffffffffffffffffffffffffffffffffff84168383612477565b60015460ff16611fb0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561233d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610935565b505f610935565b5f6123b560516031848661330f565b611dff916134f3565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610935565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251611bd393879390925f9283929183919082885af180612520576040513d5f823e3d81fd5b50505f513d91508115612537578060011415612551565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561089d576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016120f8565b828054828255905f5260205f2090601f01602090048101928215612634579160200282015f5b8382111561260657833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026125c6565b80156126325782816101000a81549060ff02191690556001016020815f01049283019260010302612606565b505b50612640929150612644565b5090565b5b80821115612640575f8155600101612645565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f805f6060848603121561268d575f80fd5b61269684612658565b92506126a460208501612658565b9150604084013590509250925092565b5f602082840312156126c4575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611dff575f80fd5b5f60208284031215612703575f80fd5b81358015158114611dff575f80fd5b5f60208284031215612722575f80fd5b5035919050565b803563ffffffff81168114610c47575f80fd5b5f6020828403121561274c575f80fd5b611dff82612729565b602080825282518282018190525f9190848201906040850190845b8181101561278f57835160ff1683529284019291840191600101612770565b50909695505050505050565b5f602082840312156127ab575f80fd5b611dff82612658565b5f80604083850312156127c5575f80fd5b823591506127d560208401612658565b90509250929050565b5f8083601f8401126127ee575f80fd5b50813567ffffffffffffffff811115612805575f80fd5b60208301915083602082850101111561281c575f80fd5b9250929050565b5f805f60408486031215612835575f80fd5b833567ffffffffffffffff81111561284b575f80fd5b612857868287016127de565b909790965060209590950135949350505050565b5f6060828403121561287b575f80fd5b50919050565b5f8083601f840112612891575f80fd5b50813567ffffffffffffffff8111156128a8575f80fd5b6020830191508360208260061b850101111561281c575f80fd5b5f805f805f805f60e0888a0312156128d8575f80fd5b6128e2898961286b565b9650606088013567ffffffffffffffff808211156128fe575f80fd5b61290a8b838c01612881565b909850965060808a0135955060a08a0135915080821115612929575f80fd5b506129368a828b016127de565b989b979a5095989497959660c090950135949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff8111828210171561299f5761299f61294f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156129ec576129ec61294f565b604052919050565b803567ffffffffffffffff81168114610c47575f80fd5b803561ffff81168114610c47575f80fd5b80356fffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f6020808385031215612a4c575f80fd5b823567ffffffffffffffff80821115612a63575f80fd5b818501915085601f830112612a76575f80fd5b813581811115612a8857612a8861294f565b612a96848260051b016129a5565b818152848101925060c0918202840185019188831115612ab4575f80fd5b938501935b82851015612b445780858a031215612acf575f80fd5b612ad761297c565b612ae086612729565b8152612aed8787016129f4565b878201526040612afe8188016129f4565b908201526060612b0f878201612a0b565b908201526080612b20878201612a1c565b9082015260a0612b31878201612a1c565b9082015284529384019392850192612ab9565b50979650505050505050565b5f805f805f8060e08789031215612b65575f80fd5b612b6f888861286b565b9550612b7d60608801612729565b9450612b8b60808801612658565b935060a087013567ffffffffffffffff811115612ba6575f80fd5b612bb289828a01612881565b979a969950949794969560c090950135949350505050565b5f805f805f60808688031215612bde575f80fd5b612be786612729565b9450612bf560208701612658565b935060408601359250606086013567ffffffffffffffff811115612c17575f80fd5b612c23888289016127de565b969995985093965092949392505050565b5f805f805f805f805f60e08a8c031215612c4c575f80fd5b612c558a612658565b9850612c6360208b01612658565b975060408a01359650612c7860608b01612a0b565b955060808a013567ffffffffffffffff80821115612c94575f80fd5b612ca08d838e016127de565b909750955060a08c0135915080821115612cb8575f80fd5b50612cc58c828d016127de565b9a9d999c50979a9699959894979660c00135949350505050565b5f610100828403121561287b575f80fd5b5f805f8060608587031215612d03575f80fd5b843567ffffffffffffffff80821115612d1a575f80fd5b612d2688838901612881565b9096509450602087013593506040870135915080821115612d45575f80fd5b50612d5287828801612cdf565b91505092959194509250565b5f805f60408486031215612d70575f80fd5b612d7984612658565b9250602084013567ffffffffffffffff811115612d94575f80fd5b612da0868287016127de565b9497909650939450505050565b5f60208284031215612dbd575f80fd5b611dff82612a0b565b5f805f60408486031215612dd8575f80fd5b612de184612729565b9250602084013567ffffffffffffffff80821115612dfd575f80fd5b818601915086601f830112612e10575f80fd5b813581811115612e1e575f80fd5b8760208260051b8501011115612e32575f80fd5b6020830194508093505050509250925092565b5f60208284031215612e55575f80fd5b813567ffffffffffffffff811115612e6b575f80fd5b612e7784828501612cdf565b949350505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f612ed9604083018587612e7f565b9050826020830152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f919060409081850190868401855b82811015612faf578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c09093019290850190600101612f32565b5091979650505050505050565b845173ffffffffffffffffffffffffffffffffffffffff908116825260208087015163ffffffff1690830152604080870151909116818301526060808701519083015260808087015161ffff90811682850152865467ffffffffffffffff80821660a08701529381901c90911660c085015260501c6fffffffffffffffffffffffffffffffff90811660e08501526001870154908116610100850152901c166101208201525f610160806101408401526117988184018587612e7f565b5f60208284031215613089575f80fd5b5051919050565b5f73ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525087604083015261ffff8716606083015260c060808301526130d960c083018688612e7f565b82810360a08401526130ec818587612e7f565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610935576109356130fb565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261316e575f80fd5b83018035915067ffffffffffffffff821115613188575f80fd5b60200191503681900382131561281c575f80fd5b63ffffffff6131aa82612729565b1682526020810135602083015267ffffffffffffffff6131cc604083016129f4565b1660408301525050565b6131e0818961319c565b73ffffffffffffffffffffffffffffffffffffffff8716606082015285608082015260e060a08201525f61321860e083018688612e7f565b82810360c084015261322b818587612e7f565b9a9950505050505050505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff8088511684528060208901511660208501525061ffff60408801511660408401526132d56060840187805467ffffffffffffffff808216845261ffff8260401c1660208501526fffffffffffffffffffffffffffffffff808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b806101008401526117988184018587612e7f565b5f67ffffffffffffffff808316818103613305576133056130fb565b6001019392505050565b5f808585111561331d575f80fd5b83861115613329575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156133765780818660040360031b1b83161692505b505092915050565b5f6040828403121561338e575f80fd5b6040516040810181811067ffffffffffffffff821117156133b1576133b161294f565b6040526133bd83612658565b8152602083013560208201528091505092915050565b80820180821115610935576109356130fb565b5f815180845260208085019450602084015f5b838110156134175781511515875295820195908201906001016133f9565b509495945050505050565b5f60e08201613431838a61319c565b63ffffffff8816606084015273ffffffffffffffffffffffffffffffffffffffff878116608085015260e060a085015290859052859061010084015f5b8781101561349f578261348085612658565b168252602084810135908301526040938401939091019060010161346e565b5084810360c08601526130ec81876133e6565b5f67ffffffffffffffff8216806134cb576134cb6130fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b80356020831015610935577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b169291505056fea2646970667358221220bf4067662d56dc81125eda238718adb88046662d26b0b352f03d651c8af9702b64736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b5038038062001b508339810160408190526200003391620000cf565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000080565b5063ffffffff1660a052670de0b6b3a7640000608052620000fb565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215620000e0575f80fd5b815163ffffffff81168114620000f4575f80fd5b9392505050565b60805160a051611a2c620001245f395f818161023a01526102ee01525f61083d0152611a2c5ff3fe608060405260043610610096575f3560e01c8063566ef76211610066578063715018a61161004c578063715018a6146101715780638da5cb5b14610185578063f2fde38b146101b8575f80fd5b8063566ef762146101335780636500378414610152575f80fd5b806301e33667146100a1578063337c7a9e146100c2578063434ee016146100f457806354fd4d5014610113575f80fd5b3661009d57005b5f80fd5b3480156100ac575f80fd5b506100c06100bb366004611549565b6101d7565b005b3480156100cd575f80fd5b506100e16100dc3660046115dd565b6101ef565b6040519081526020015b60405180910390f35b3480156100ff575f80fd5b506100e161010e366004611644565b610408565b34801561011e575f80fd5b506040805160018082526020820152016100eb565b34801561013e575f80fd5b506100e161014d366004611644565b61060a565b34801561015d575f80fd5b506100e161016c3660046115dd565b610620565b34801561017c575f80fd5b506100c061062d565b348015610190575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100eb565b3480156101c3575f80fd5b506100c06101d236600461168d565b610640565b6101df6106a3565b6101ea8383836106f5565b505050565b5f6101fd60208501856116ad565b67ffffffffffffffff165f0361026c576040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024015b60405180910390fd5b5f80806102a960018261028260208b018b6116ad565b61029260a08c0160808d016116ad565b6102a260808d0160608e016116f1565b8b8b610725565b919450925090505f8080806102c160208d018d61168d565b6040517f88a4124c00000000000000000000000000000000000000000000000000000000815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152871660248201526044810188905273ffffffffffffffffffffffffffffffffffffffff91909116906388a4124c90606401608060405180830381865afa158015610360573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610384919061170c565b929650909450925090506103ce846103a260408e0160208f0161175e565b8e60400160208101906103b5919061175e565b8e60400160208101906103c891906116f1565b856107b5565b97506103ee8784848f60400160208101906103e9919061175e565b6108ab565b6103f890896117ac565b9c9b505050505050505050505050565b5f61041660208501856116ad565b67ffffffffffffffff165f036104715761043660408601602087016117c5565b6040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610263565b5f806104c38161048f61048a60408b0160208c016117c5565b505f90565b61049c60208a018a6116ad565b6104ac60a08b0160808c016116ad565b6104bc60808c0160608d016116f1565b8a8a610725565b5090925090505f8080806104da60208c018c61168d565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61050560408e0160208f016117c5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff91909116600482015260608e0135602482015260448101889052606401608060405180830381865afa15801561056e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610592919061170c565b929650909450925090506105d6846105b060408d0160208e0161175e565b8d60800160208101906105c3919061175e565b8d60400160208101906103c891906116f1565b96506105f18684848e60800160208101906103e9919061175e565b6105fb90886117ac565b9b9a5050505050505050505050565b5f61061785858585610408565b95945050505050565b5f610617858585856101ef565b6106356106a3565b61063e5f610911565b565b6106486106a3565b73ffffffffffffffffffffffffffffffffffffffff8116610697576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610263565b6106a081610911565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461063e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610263565b73ffffffffffffffffffffffffffffffffffffffff831661071a576101ea8282610985565b6101ea838383610a87565b5f805f8061073686868d8d8b610af5565b805160608201516080830151919650935090915061075e9067ffffffffffffffff8a166117e8565b60208201516107779067ffffffffffffffff8c166117ac565b61078191906117ac565b92508060400151156107a757606461079a8460666117e8565b6107a491906117ff565b92505b509750975097945050505050565b5f8061ffff8616156107c757856107c9565b845b90505f6127106107dd61ffff84168a6117e8565b6107e791906117ff565b90506fffffffffffffffffffffffffffffffff8416158061081857506fffffffffffffffffffffffffffffffff8516155b156108265791506106179050565b5f88856fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000886fffffffffffffffffffffffffffffffff1661087991906117e8565b61088391906117ff565b61088d91906117ac565b905081811161089c578161089e565b805b9998505050505050505050565b5f8415610909576127108261ffff16846fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff16886108eb91906117e8565b6108f591906117ff565b6108ff91906117e8565b61061791906117ff565b949350505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166109d2576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610a28576040519150601f19603f3d011682016040523d82523d5f602084013e610a2d565b606091505b50509050806101ea576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610263565b73ffffffffffffffffffffffffffffffffffffffff8216610ad4576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101ea73ffffffffffffffffffffffffffffffffffffffff8416838361110f565b610b2a6040518060a001604052805f81526020015f81526020015f151581526020015f63ffffffff1681526020015f81525090565b5f859003610b63576040517e575ea100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80805b87831015610fbc575f368180610b7e8d8d8961119c565b9950919550935091508690507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff851601610ca6578a15610bf1576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610bfd85856111f1565b915091508b8015610c1f57505f816fffffffffffffffffffffffffffffffff16115b15610c5b576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff87166004820152602401610263565b806fffffffffffffffffffffffffffffffff168a5f01818151610c7e91906117ac565b905250610c9d6fffffffffffffffffffffffffffffffff8316896117ac565b97505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff851601610d48578a15610d0d576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f610d18848461126c565b509050806fffffffffffffffffffffffffffffffff16895f01818151610d3e91906117ac565b905250610fb39050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff851601610e75578915610daf576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610dbb85856112c1565b9250925050816fffffffffffffffffffffffffffffffff165f03610e0b576040517fa169d0e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806fffffffffffffffffffffffffffffffff168a5f01818151610e2e91906117ac565b90525060208a0180516fffffffffffffffffffffffffffffffff84169190610e579083906117ac565b90525060808a01805190610e6a82611837565b815250505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60ff851601610eab5760016040890152610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff851601610f7c578a610f11576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f805f610f1e868661134b565b925092509250806fffffffffffffffffffffffffffffffff168b5f01818151610f4791906117ac565b905250610f666fffffffffffffffffffffffffffffffff84168a6117ac565b9850610f72828961186e565b9750505050610fb3565b6040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b50505050610b67565b828814610ff8576040517f990776ea00000000000000000000000000000000000000000000000000000000815260048101849052602401610263565b83516fffffffffffffffffffffffffffffffff861610156110625783516040517e84ce0200000000000000000000000000000000000000000000000000000000815260048101919091526fffffffffffffffffffffffffffffffff86166024820152604401610263565b815f0361109b576040517fe5eb8f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8680156110ac575063ffffffff8116155b156110e3576040517f6cc33f0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81846020018181516110f591906117ac565b90525063ffffffff16606084015250909695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526101ea9084906113cc565b5f368160018401816111af888884611471565b6002929092019190506111c3888884611497565b94506001820161ffff821683016111dc81838b8d611892565b979b909a50969850505061ffff160193505050565b5f8060108314801590611205575060208314155b1561123c576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124784845f6114bb565b915060208314611257575f611263565b611263848460106114bb565b90509250929050565b5f80603083146112a8576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112b384845f6114bb565b9150611263848460106114e1565b5f8080601284148015906112d6575060228414155b1561130d576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61131885855f611471565b9250611326858560026114bb565b915060228414611336575f611342565b611342858560126114bb565b90509250925092565b5f808060148414801590611360575060248414155b15611397576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113a285855f6114bb565b92506113b0858560106114fb565b9150602484146113c0575f611342565b611342858560146114bb565b5f8060205f8451602086015f885af1806113eb576040513d5f823e3d81fd5b50505f513d9150811561140257806001141561141c565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561146b576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610263565b50505050565b5f6002820161148281848688611892565b61148b916118b9565b60f01c95945050505050565b5f8383838181106114aa576114aa611901565b919091013560f81c95945050505050565b5f601082016114cc81848688611892565b6114d59161192e565b60801c95945050505050565b5f602082016114f281848688611892565b61061791611974565b5f6004820161150c81848688611892565b611515916119b0565b60e01c95945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611544575f80fd5b919050565b5f805f6060848603121561155b575f80fd5b61156484611521565b925061157260208501611521565b9150604084013590509250925092565b5f60a08284031215611592575f80fd5b50919050565b5f8083601f8401126115a8575f80fd5b50813567ffffffffffffffff8111156115bf575f80fd5b6020830191508360208285010111156115d6575f80fd5b9250929050565b5f805f808486036101208112156115f2575f80fd5b60608112156115ff575f80fd5b508493506116108660608701611582565b925061010085013567ffffffffffffffff81111561162c575f80fd5b61163887828801611598565b95989497509550505050565b5f805f806101608587031215611658575f80fd5b6116628686611582565b93506116718660a08701611582565b925061014085013567ffffffffffffffff81111561162c575f80fd5b5f6020828403121561169d575f80fd5b6116a682611521565b9392505050565b5f602082840312156116bd575f80fd5b813567ffffffffffffffff811681146116a6575f80fd5b6fffffffffffffffffffffffffffffffff811681146106a0575f80fd5b5f60208284031215611701575f80fd5b81356116a6816116d4565b5f805f806080858703121561171f575f80fd5b845193506020850151611731816116d4565b6040860151909350611742816116d4565b6060860151909250611753816116d4565b939692955090935050565b5f6020828403121561176e575f80fd5b813561ffff811681146116a6575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156117bf576117bf61177f565b92915050565b5f602082840312156117d5575f80fd5b813563ffffffff811681146116a6575f80fd5b80820281158282048414176117bf576117bf61177f565b5f82611832577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118675761186761177f565b5060010190565b63ffffffff81811683821601908082111561188b5761188b61177f565b5092915050565b5f80858511156118a0575f80fd5b838611156118ac575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156118f95780818660020360031b1b83161692505b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156118f95760109490940360031b84901b1690921692915050565b803560208310156117bf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156118f95760049490940360031b84901b169092169291505056fea2646970667358221220ca9d45c801b5ccbb302dcb12078bab5268980f6f82de99fc1d137bac6c0848e664736f6c6343000816003360c060405234801562000010575f80fd5b5060405162004aae38038062004aae8339810160408190526200003391620004ca565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b03861617905582828686612ee05f865f5b8551811015620000d357620000c97f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000b557620000b5620005a5565b60200260200101516200027860201b60201c565b5060010162000071565b505f5b815181101562000124576200011a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000b557620000b5620005a5565b50600101620000d6565b505050505050806001600160401b03165f036200015457604051635f86e17760e01b815260040160405180910390fd5b806001600160401b0316825110156200019a5781516040516378e2c15760e11b81526001600160401b039182166004820152908216602482015260440160405180910390fd5b5f805b835181101562000229575f848281518110620001bd57620001bd620005a5565b60200260200101519050826001600160a01b0316816001600160a01b031611620001fa576040516305fa937f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600460205260409020805460ff19166001908117909155909250016200019d565b50509051600580546001600160401b0393841668010000000000000000026001600160801b0319909116939092169290921717905550505063ffffffff92831660805250501660a052620005f3565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015620002c957505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620003165760018054601590620002f190600160a81b90046001600160401b0316620005b9565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200032283836200032e565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff16620003d1575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003883390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000328565b505f62000328565b805163ffffffff81168114620003ed575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b0381168114620003ed575f80fd5b5f82601f8301126200042d575f80fd5b815160206001600160401b03808311156200044c576200044c620003f2565b8260051b604051601f19603f83011681018181108482111715620004745762000474620003f2565b604052938452602081870181019490810192508785111562000494575f80fd5b6020870191505b84821015620004bf57620004af8262000406565b835291830191908301906200049b565b979650505050505050565b5f805f805f805f60e0888a031215620004e1575f80fd5b620004ec88620003d9565b9650620004fc60208901620003d9565b60408901519096506001600160401b038082111562000519575f80fd5b620005278b838c016200041d565b96506200053760608b0162000406565b955060808a01519150808211156200054d575f80fd5b6200055b8b838c016200041d565b945060a08a01519150808216821462000572575f80fd5b60c08a01519193508082111562000587575f80fd5b50620005968a828b016200041d565b91505092959891949750929550565b634e487b7160e01b5f52603260045260245ffd5b5f6001600160401b038281166002600160401b03198101620005e957634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b60805160a05161447d620006315f395f818161090e0152818161253401526126c301525f818161084f0152818161173901526122a4015261447d5ff3fe6080604052600436106102c0575f3560e01c806395d376d711610170578063cd88b903116100d1578063e395eb5c11610087578063f42ed2ed11610062578063f42ed2ed1461096e578063fd62e75014610981578063fdb9b0f1146109a1575f80fd5b8063e395eb5c146108fd578063f010cb2314610930578063f3b4ebd01461094f575f80fd5b8063d2ae2104116100b7578063d2ae210414610886578063d547741f146108bf578063dafe0ccc146108de575f80fd5b8063cd88b9031461081f578063cf34c7681461083e575f80fd5b8063c358de0a11610126578063c5e193cd1161010c578063c5e193cd146107b4578063c7a823e0146107d3578063c7b2370b14610800575f80fd5b8063c358de0a14610764578063c416aa5114610783575f80fd5b8063a217fddf11610156578063a217fddf14610704578063aef18bf714610717578063b143044b14610745575f80fd5b806395d376d71461064e5780639e94496514610661575f80fd5b806330bb3aac116102255780635c975abb116101db578063741bef1a116101b6578063741bef1a1461058f5780638585c945146105e057806391d14854146105ff575f80fd5b80635c975abb1461052b578063724e78da14610542578063736c0d5b14610561575f80fd5b806336568abe1161020b57806336568abe146104ce57806352d3b871146104ed5780635553fb8e1461050c575f80fd5b806330bb3aac1461049057806331cb6105146104af575f80fd5b80631703a0181161027a57806326e67a371161026057806326e67a37146104265780632de11376146104525780632f2ff15d14610471575f80fd5b80631703a018146103a5578063248a9ca3146103ea575f80fd5b806301ffc9a7116102aa57806301ffc9a7146103385780631095b6d71461036757806316c38b3c14610386575f80fd5b8062bf2e80146102c457806301e3366714610317575b5f80fd5b3480156102cf575f80fd5b506001546102ff907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b348015610322575f80fd5b50610336610331366004613597565b6109c0565b005b348015610343575f80fd5b506103576103523660046135d5565b6109fb565b604051901515815260200161030e565b348015610372575f80fd5b50610336610381366004613597565b610a93565b348015610391575f80fd5b506103366103a036600461362a565b610c1d565b3480156103b0575f80fd5b506005546103d19068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161030e565b3480156103f5575f80fd5b50610418610404366004613643565b5f9081526020819052604090206001015490565b60405190815260200161030e565b348015610431575f80fd5b5061044561044036600461366d565b610c41565b60405161030e9190613686565b34801561045d575f80fd5b5061035761046c3660046136cc565b610cc4565b34801561047c575f80fd5b5061033661048b3660046136e7565b610da5565b34801561049b575f80fd5b506104186104aa366004613771565b610ef4565b3480156104ba575f80fd5b506103366104c93660046137e4565b611067565b3480156104d9575f80fd5b506103366104e83660046136e7565b6110aa565b3480156104f8575f80fd5b50610336610507366004613817565b6110dc565b348015610517575f80fd5b50610418610526366004613897565b6112a5565b348015610536575f80fd5b5060015460ff16610357565b34801561054d575f80fd5b5061033661055c3660046136cc565b611418565b34801561056c575f80fd5b5061035761057b3660046136cc565b60046020525f908152604090205460ff1681565b34801561059a575f80fd5b506002546105bb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030e565b3480156105eb575f80fd5b506103366105fa3660046138ea565b6114bd565b34801561060a575f80fd5b506103576106193660046136e7565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61041861065c366004613919565b611502565b34801561066c575f80fd5b506106c961067b36600461366d565b60066020525f908152604090205467ffffffffffffffff81169068010000000000000000810461ffff16906a010000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff909416845261ffff90921660208401526fffffffffffffffffffffffffffffffff169082015260600161030e565b34801561070f575f80fd5b506104185f81565b348015610722575f80fd5b50610357610731366004613643565b60076020525f908152604090205460ff1681565b348015610750575f80fd5b5061033661075f3660046139be565b6116d7565b34801561076f575f80fd5b5061033661077e3660046139fd565b6119db565b34801561078e575f80fd5b506001546105bb90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156107bf575f80fd5b506104186107ce366004613897565b611a89565b3480156107de575f80fd5b506107f26107ed366004613a16565b611c62565b60405161030e929190613a7e565b34801561080b575f80fd5b5061033661081a3660046136cc565b611e65565b34801561082a575f80fd5b50610336610839366004613ac9565b611f09565b348015610849575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161030e565b348015610891575f80fd5b506001546103d1907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b3480156108ca575f80fd5b506103366108d93660046136e7565b611f59565b3480156108e9575f80fd5b506103366108f8366004613597565b61206e565b348015610908575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b34801561093b575f80fd5b5061041861094a366004613b0b565b61219e565b34801561095a575f80fd5b50610336610969366004613b71565b6121d9565b61041861097c366004613bab565b61244a565b34801561098c575f80fd5b506005546103d19067ffffffffffffffff1681565b3480156109ac575f80fd5b506104186109bb366004613bab565b612603565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109ea81612790565b6109f584848461279a565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610a8d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610abd81612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16610b3a576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610ba7575f80fd5b505af1158015610bb9573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b5f610c2781612790565b8115610c3957610c356127cf565b5050565b610c3561284e565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cb857602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610c895790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610d1757505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610d8c575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610d9957506001919050565b505f919050565b919050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480610df357507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610e1d57507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b15610e6057303314610e5b576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eea565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb057610e5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6040517f94fdc372000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b6109f583836128a5565b5f83610eff81610cc4565b610f35576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a16602080840182905267ffffffffffffffff808c16858701528a8416606086015260055468010000000000000000900416608085015260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660a08601525f92835260069091529084902093517f7bfa20a9000000000000000000000000000000000000000000000000000000008152929361010090910490911691637bfa20a99161101c918591908a908a90600401613c97565b602060405180830381865afa158015611037573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105b9190613d63565b98975050505050505050565b3033146110a0576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c358282612975565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561110681612790565b5f5b82811015611266573684848381811061112357611123613d7a565b9050608002019050604051806060016040528082602001602081019061114991906138ea565b67ffffffffffffffff16815260200161116860608401604085016139fd565b61ffff1681526020016111816080840160608501613dc6565b6fffffffffffffffffffffffffffffffff16905260065f6111a5602085018561366d565b63ffffffff16815260208082019290925260409081015f20835181549385015194909201516fffffffffffffffffffffffffffffffff166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff61ffff90951668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941667ffffffffffffffff90931692909217929092179290921691909117905550600101611108565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051611298929190613ddf565b60405180910390a1505050565b5f816112b081610cc4565b6112e6576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808a16602080850182905267ffffffffffffffff808b168688015289851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517f7bfa20a9000000000000000000000000000000000000000000000000000000008152939461010090920490921692637bfa20a9926113ce928692600401613edd565b602060405180830381865afa1580156113e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140d9190613d63565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561144281612790565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146114f6576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ff81612b73565b50565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61152d81612790565b61153d60a08601608087016136cc565b61154681610cc4565b61157c576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810190915260025473ffffffffffffffffffffffffffffffffffffffff1681525f906020808201906115b6908a018a61366d565b63ffffffff1681526020016115d160808a0160608b016138ea565b67ffffffffffffffff1681526020016115f060a08a0160808b016136cc565b73ffffffffffffffffffffffffffffffffffffffff908116825260055468010000000000000000900467ffffffffffffffff166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff16604090940193909352929350610100909104169063df2b057e9083906006905f90611681908d018d61366d565b63ffffffff1663ffffffff1681526020019081526020015f2089896040518563ffffffff1660e01b81526004016116bb9493929190613c97565b6020604051808303815f875af11580156113e9573d5f803e3d5ffd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561170181612790565b5f5b828110156109f5573684848381811061171e5761171e613d7a565b90506020028101906117309190613fb2565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611766602083018361366d565b63ffffffff161461177757506119d3565b4281606001351161178857506119d3565b5f6117c0611799602084018461366d565b6117a960408501602086016136cc565b6117b66040860186613fee565b866060013561219e565b90505f6117d4826107ed6080860186613fee565b50905080611817576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a15050506119d3565b5f6118366118286040860186613fee565b6118319161404f565b612c8a565b905080156118cd575f8381526007602052604090205460ff1615611896577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab9784846040516118859291906140f7565b60405180910390a1505050506119d3565b5f83815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b5f806118df60408701602088016136cc565b73ffffffffffffffffffffffffffffffffffffffff166119026040880188613fee565b6040516119109291906141bc565b5f604051808303815f865af19150503d805f8114611949576040519150601f19603f3d011682016040523d82523d5f602084013e61194e565b606091505b5091509150816119cc578215611992575f85815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516119c39291906141cb565b60405180910390a15b5050505050505b600101611703565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a0581612790565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d906020016114b1565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de611ab481612790565b82611abe81610cc4565b611af4576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808b16602080850182905267ffffffffffffffff808c16868801528a851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517fdf2b057e00000000000000000000000000000000000000000000000000000000815293946101009092049092169263df2b057e92611bdc928692600401613edd565b6020604051808303815f875af1158015611bf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c1c9190613d63565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef84604051611c4f91815260200190565b60405180910390a1505050949350505050565b6005545f908190611c8a9068010000000000000000900467ffffffffffffffff166041614210565b8314611c9b57505f90506001611e5d565b5f611cf2866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290525f90605c01604051602081830303815290604052805190602001209050919050565b90505f805b60055468010000000000000000900467ffffffffffffffff16811015611e5257365f8888611d26856041614210565b90611d32866001614227565b611d3d906041614210565b92611d4a9392919061423a565b915091505f80611d8f8785858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612d7292505050565b5090925090505f816003811115611da857611da8613a51565b14611dc0575f60019850985050505050505050611e5d565b8573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611611e06575f60029850985050505050505050611e5d565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205460ff16611e45575f60039850985050505050505050611e5d565b5093505050600101611cf7565b5060015f9350935050505b935093915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611e8f81612790565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e0906020016114b1565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611f3381612790565b63ffffffff84165f908152600360205260409020611f529084846134be565b5050505050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480611fa757507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80611fd157507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b156120145730331461200f576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612064565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb05761200f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6109f58383612dbb565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561209881612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16612115576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f07b18bde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906307b18bde906044015f604051808303815f87803b158015612182575f80fd5b505af1158015612194573d5f803e3d5ffd5b5050505050505050565b5f85858386866040516020016121b8959493929190614261565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511612216576040517f0bbaf26300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3061222760408301602084016136cc565b73ffffffffffffffffffffffffffffffffffffffff161461229d5761225260408201602083016136cc565b6040517f1ce0bfcd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610ee1565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166122d1602083018361366d565b63ffffffff1614612324576122e9602082018261366d565b6040517f2697e1c200000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610ee1565b5f612335611799602084018461366d565b90505f612349826107ed6080860186613fee565b50905080612383576040517f15ecadee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526007602052604090205460ff16156123ce576040517f9d6a45a600000000000000000000000000000000000000000000000000000000815260048101839052602401610ee1565b5f828152600760205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556109f5907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217759061243890860186613fee565b81019061244591906136cc565b6128a5565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61247581612790565b8861247f81610cc4565b6124b5576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528c811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fbbc5a33b00000000000000000000000000000000000000000000000000000000815292936101009091049091169163bbc5a33b916125b4918591908d908d908d908d906004016142d2565b6020604051808303815f875af11580156125d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f49190613d63565b9b9a5050505050505050505050565b5f8761260e81610cc4565b612644576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528b811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fd358b30000000000000000000000000000000000000000000000000000000000815292936101009091049091169163d358b30091612743918591908c908c908c908c906004016142d2565b602060405180830381865afa15801561275e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127829190613d63565b9a9950505050505050505050565b6114ff8133612e80565b73ffffffffffffffffffffffffffffffffffffffff83166127c4576127bf8282612f05565b505050565b6127bf838383613007565b6127d7613075565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6128566130b4565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612824565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561290257505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15612961576001805460159061293a907501000000000000000000000000000000000000000000900467ffffffffffffffff16614397565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836130f0565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205481151560ff9091161515036129fb576040517f58c8d2a000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201528115156024820152604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260046020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001683151517905581612a6c57600554612a679060019067ffffffffffffffff166143bd565b612a84565b600554612a849067ffffffffffffffff1660016143e5565b60055490915067ffffffffffffffff680100000000000000009091048116908216811115612af2576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808416600483015282166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff84161790556040805173ffffffffffffffffffffffffffffffffffffffff8616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610c0f565b8067ffffffffffffffff165f03612bb6576040517f5f86e17700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff908116908216811015612c15576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808316600483015283166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a23249906020016114b1565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0223536e0000000000000000000000000000000000000000000000000000000014801590612d1f57507fffffffff0000000000000000000000000000000000000000000000000000000082167fab750e750000000000000000000000000000000000000000000000000000000014155b8015610a8d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f704316e500000000000000000000000000000000000000000000000000000000141592915050565b5f805f8351604103612da9576020840151604085015160608601515f1a612d9b888285856131e9565b955095509550505050612db4565b505081515f91506002905b9250925092565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015612e1757505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b15612e765760018054601590612e4f907501000000000000000000000000000000000000000000900467ffffffffffffffff16614406565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836132dc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c35576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216612f52576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612fa8576040519150601f19603f3d011682016040523d82523d5f602084013e612fad565b606091505b50509050806127bf576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216613054576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127bf73ffffffffffffffffffffffffffffffffffffffff84168383613395565b60015460ff16156130b2576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60015460ff166130b2576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556131803390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610a8d565b505f610a8d565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561322257505f915060039050826132d2565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613273573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166132c957505f9250600191508290506132d2565b92505f91508190505b9450945094915050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610a8d565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017815282516127bf93879390925f9283929183919082885af18061343e576040513d5f823e3d81fd5b50505f513d9150811561345557806001141561346f565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ee1565b828054828255905f5260205f2090601f01602090048101928215613552579160200282015f5b8382111561352457833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026134e4565b80156135505782816101000a81549060ff02191690556001016020815f01049283019260010302613524565b505b5061355e929150613562565b5090565b5b8082111561355e575f8155600101613563565b73ffffffffffffffffffffffffffffffffffffffff811681146114ff575f80fd5b5f805f606084860312156135a9575f80fd5b83356135b481613576565b925060208401356135c481613576565b929592945050506040919091013590565b5f602082840312156135e5575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114613614575f80fd5b9392505050565b80358015158114610da0575f80fd5b5f6020828403121561363a575f80fd5b6136148261361b565b5f60208284031215613653575f80fd5b5035919050565b803563ffffffff81168114610da0575f80fd5b5f6020828403121561367d575f80fd5b6136148261365a565b602080825282518282018190525f9190848201906040850190845b818110156136c057835160ff16835292840192918401916001016136a1565b50909695505050505050565b5f602082840312156136dc575f80fd5b813561361481613576565b5f80604083850312156136f8575f80fd5b82359150602083013561370a81613576565b809150509250929050565b803567ffffffffffffffff81168114610da0575f80fd5b5f8083601f84011261373c575f80fd5b50813567ffffffffffffffff811115613753575f80fd5b60208301915083602082850101111561376a575f80fd5b9250929050565b5f805f805f60808688031215613785575f80fd5b61378e8661365a565b945061379c60208701613715565b935060408601356137ac81613576565b9250606086013567ffffffffffffffff8111156137c7575f80fd5b6137d38882890161372c565b969995985093965092949392505050565b5f80604083850312156137f5575f80fd5b823561380081613576565b915061380e6020840161361b565b90509250929050565b5f8060208385031215613828575f80fd5b823567ffffffffffffffff8082111561383f575f80fd5b818501915085601f830112613852575f80fd5b813581811115613860575f80fd5b8660208260071b8501011115613874575f80fd5b60209290920196919550909350505050565b803561ffff81168114610da0575f80fd5b5f805f80608085870312156138aa575f80fd5b6138b385613886565b93506138c160208601613886565b92506138cf60408601613715565b915060608501356138df81613576565b939692955090935050565b5f602082840312156138fa575f80fd5b61361482613715565b5f60a08284031215613913575f80fd5b50919050565b5f805f6040848603121561392b575f80fd5b833567ffffffffffffffff80821115613942575f80fd5b61394e87838801613903565b94506020860135915080821115613963575f80fd5b506139708682870161372c565b9497909650939450505050565b5f8083601f84011261398d575f80fd5b50813567ffffffffffffffff8111156139a4575f80fd5b6020830191508360208260051b850101111561376a575f80fd5b5f80602083850312156139cf575f80fd5b823567ffffffffffffffff8111156139e5575f80fd5b6139f18582860161397d565b90969095509350505050565b5f60208284031215613a0d575f80fd5b61361482613886565b5f805f60408486031215613a28575f80fd5b83359250602084013567ffffffffffffffff811115613a45575f80fd5b6139708682870161372c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b82151581526040810160048310613abc577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8260208301529392505050565b5f805f60408486031215613adb575f80fd5b613ae48461365a565b9250602084013567ffffffffffffffff811115613aff575f80fd5b6139708682870161397d565b5f805f805f60808688031215613b1f575f80fd5b613b288661365a565b94506020860135613b3881613576565b9350604086013567ffffffffffffffff811115613b53575f80fd5b613b5f8882890161372c565b96999598509660600135949350505050565b5f60208284031215613b81575f80fd5b813567ffffffffffffffff811115613b97575f80fd5b613ba384828501613903565b949350505050565b5f805f805f805f6080888a031215613bc1575f80fd5b8735613bcc81613576565b9650602088013567ffffffffffffffff80821115613be8575f80fd5b613bf48b838c0161372c565b909850965060408a0135915080821115613c0c575f80fd5b613c188b838c0161372c565b909650945060608a0135915080821115613c30575f80fd5b50613c3d8a828b0161372c565b989b979a50959850939692959293505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f610140613d0e838873ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613d4f60c08401875467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8061012084015261140d8184018587613c50565b5f60208284031215613d73575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80356fffffffffffffffffffffffffffffffff81168114610da0575f80fd5b5f60208284031215613dd6575f80fd5b61361482613da7565b60208082528181018390525f90604080840186845b87811015613e6f5763ffffffff613e0a8361365a565b16835267ffffffffffffffff613e21868401613715565b168584015261ffff613e34858401613886565b168484015260606fffffffffffffffffffffffffffffffff613e57828501613da7565b16908401526080928301929190910190600101613df4565b5090979650505050505050565b5f81518084525f5b81811015613ea057602081850181015186830182015201613e84565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f610140613f54838773ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613f9560c08401865467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b80610120840152613fa881840185613e7c565b9695505050505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613fe4575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614021575f80fd5b83018035915067ffffffffffffffff82111561403b575f80fd5b60200191503681900382131561376a575f80fd5b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561408f5780818660040360031b1b83161692505b505092915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126140ca575f80fd5b830160208101925035905067ffffffffffffffff8111156140e9575f80fd5b80360382131561376a575f80fd5b6040815263ffffffff6141098461365a565b1660408201525f602084013561411e81613576565b73ffffffffffffffffffffffffffffffffffffffff1660608301526141466040850185614097565b60a0608085015261415b60e085018284613c50565b915050606085013560a08401526141756080860186614097565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08584030160c08601526141aa838284613c50565b93505050508260208301529392505050565b818382375f9101908152919050565b828152604060208201525f613ba36040830184613e7c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610a8d57610a8d6141e3565b80820180821115610a8d57610a8d6141e3565b5f8085851115614248575f80fd5b83861115614254575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008660e01b1681527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008560601b166004820152836018820152818360388301375f9101603801908152949350505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff808a511684528060208b01511660208501525067ffffffffffffffff60408a015116604084015261ffff60608a015116606084015261436160808401895467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8060e08401526143748184018789613c50565b905082810361010084015261438a818587613c50565b9998505050505050505050565b5f67ffffffffffffffff8083168181036143b3576143b36141e3565b6001019392505050565b67ffffffffffffffff8281168282160390808211156143de576143de6141e3565b5092915050565b67ffffffffffffffff8181168382160190808211156143de576143de6141e3565b5f67ffffffffffffffff82168061441f5761441f6141e3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019291505056fea26469706673582212208293bcc557e204de553c5250d4aeaa3a84335fc59a6c7b5a242fbc34745baa1464736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002470380380620024708339810160408190526200003391620000c8565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000079565b5063ffffffff90911660a052608052620000fe565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8060408385031215620000da575f80fd5b825163ffffffff81168114620000ee575f80fd5b6020939093015192949293505050565b60805160a0516123426200012e5f395f81816107ac015261082601525f81816109120152610cb901526123425ff3fe6080604052600436106100e7575f3560e01c80638da5cb5b11610087578063de0a93c311610057578063de0a93c314610322578063df2b057e14610396578063f2fde38b146103a9578063f5ff608f146103c8575f80fd5b80638da5cb5b1461029e5780639ac23d28146102d1578063bbc5a33b146102f0578063d358b30014610303575f80fd5b806339f26dfc116100c257806339f26dfc1461022c57806354fd4d501461024b578063715018a61461026b5780637bfa20a91461027f575f80fd5b806301e33667146100f257806310b65f76146101135780632565c24514610157575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5061011161010c366004611a78565b6103e7565b005b34801561011e575f80fd5b5061014461012d366004611ac2565b63ffffffff165f9081526001602052604090205490565b6040519081526020015b60405180910390f35b348015610162575f80fd5b506101ec610171366004611ac2565b60036020525f908152604090205463ffffffff8082169167ffffffffffffffff64010000000082048116926c0100000000000000000000000083049091169174010000000000000000000000000000000000000000810482169178010000000000000000000000000000000000000000000000009091041685565b6040805163ffffffff968716815267ffffffffffffffff95861660208201529390941693830193909352831660608201529116608082015260a00161014e565b348015610237575f80fd5b50610111610246366004611b13565b6103ff565b348015610256575f80fd5b5060408051600180825260208201520161014e565b348015610276575f80fd5b506101116104af565b34801561028a575f80fd5b50610144610299366004611bae565b6104c2565b3480156102a9575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b3480156102dc575f80fd5b506101116102eb366004611c15565b61068a565b6101446102fe366004611cd2565b610747565b34801561030e575f80fd5b5061014461031d366004611cd2565b610761565b34801561032d575f80fd5b50600254604080516effffffffffffffffffffffffffffff80841682526f0100000000000000000000000000000084041660208201527e0100000000000000000000000000000000000000000000000000000000000090920461ffff169082015260600161014e565b6101446103a4366004611bae565b61099c565b3480156103b4575f80fd5b506101116103c3366004611d67565b6109b2565b3480156103d3575f80fd5b506101116103e2366004611d80565b610a15565b6103ef610a8e565b6103fa838383610ae0565b505050565b610407610a8e565b6002805461ffff9092167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6effffffffffffffffffffffffffffff9485166f01000000000000000000000000000000027fffff00000000000000000000000000000000000000000000000000000000000090941694909516939093179190911792909216179055565b6104b7610a8e565b6104c05f610b10565b565b5f6104d06020850185611e04565b67ffffffffffffffff165f03610530576104f06040860160208701611ac2565b6040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b61053a8383610b84565b505f61055e61054f60a0880160808901611e04565b67ffffffffffffffff16610c25565b90505f8061056f6020890189611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61059a60408b0160208c01611ac2565b856105a860208c018c611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa158015610617573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063b9190611e3c565b93505050915061067e828860200160208101906106589190611e8e565b61066860c08c0160a08d01611e8e565b61067860608c0160408d01611ea7565b85610c32565b98975050505050505050565b610692610a8e565b8281146106cb576040517fb54ecc3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b83811015610740578282828181106106e7576106e7611ec2565b905060a0020160035f87878581811061070257610702611ec2565b90506020020160208101906107179190611ac2565b63ffffffff16815260208101919091526040015f206107368282611efb565b50506001016106cd565b5050505050565b5f610756878787878787610761565b979650505050505050565b5f61076f6020870187611e04565b67ffffffffffffffff165f036107d9576040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152602401610527565b6107e38383610b84565b505f6107f861054f60608a0160408b01611e04565b90505f8061080960208b018b611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c7f00000000000000000000000000000000000000000000000000000000000000008561085360208e018e611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa1580156108c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e69190611e3c565b9350505091505f6108f78989610d27565b90505f6fffffffffffffffffffffffffffffffff83166109377f0000000000000000000000000000000000000000000000000000000000000000846120c4565b6109419190612108565b905061098c610950828661211b565b61096060408e0160208f01611e8e565b8e60600160208101906109739190611e8e565b8e60400160208101906109869190611ea7565b87610c32565b9c9b505050505050505050505050565b5f6109a9858585856104c2565b95945050505050565b6109ba610a8e565b73ffffffffffffffffffffffffffffffffffffffff8116610a09576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610527565b610a1281610b10565b50565b610a1d610a8e565b5f5b818110156103fa57828282818110610a3957610a39611ec2565b9050604002016020013560015f015f858585818110610a5a57610a5a611ec2565b610a709260206040909202019081019150611ac2565b63ffffffff16815260208101919091526040015f2055600101610a1f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146104c0576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610527565b73ffffffffffffffffffffffffffffffffffffffff8316610b05576103fa8282610e0f565b6103fa838383610f11565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808215610bde575f80610b99868685610f7f565b6040517f7085244b00000000000000000000000000000000000000000000000000000000815260ff851660048201529096509294508593505060249091019050610527565b808314610c1a576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610527565b5f9150505b92915050565b5f610c1f82610120610fd8565b5f8061ffff861615610c445785610c46565b845b90505f612710610c5a61ffff84168a6120c4565b610c649190612108565b90506fffffffffffffffffffffffffffffffff84161580610c9557506fffffffffffffffffffffffffffffffff8516155b15610ca35791506109a99050565b5f846fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000876fffffffffffffffffffffffffffffffff16610cf591906120c4565b610cff9190612108565b610d09908a61211b565b9050818111610d185781610d1a565b805b9998505050505050505050565b5f80610d36848461103c61124b565b6002548151919250610d5f916effffffffffffffffffffffffffffff9091169061ffff1661212e565b6effffffffffffffffffffffffffffff169150806020015115610dca5760025461271090610db3907e01000000000000000000000000000000000000000000000000000000000000900461ffff16846120c4565b610dbd9190612108565b610dc7908361211b565b91505b806040015115610e0857600254610e05906f0100000000000000000000000000000090046effffffffffffffffffffffffffffff168361211b565b91505b5092915050565b73ffffffffffffffffffffffffffffffffffffffff8216610e5c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610eb2576040519150601f19603f3d011682016040523d82523d5f602084013e610eb7565b606091505b50509050806103fa576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610527565b73ffffffffffffffffffffffffffffffffffffffff8216610f5e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103fa73ffffffffffffffffffffffffffffffffffffffff8416838361185d565b5f36816001840181610f928888846118ea565b6002830192909150610faa9089908990600301611910565b94506002820161ffff82168301610fc381838b8d612161565b979b909a50969850505061ffff160193505050565b5f80610fe56041856120c4565b9050610ff2602082612188565b1561101a57611002602082612188565b61100c908261219b565b61101790602061211b565b90505b806110278461010461211b565b611031919061211b565b610e0590602061211b565b61104860018583611934565b6110556001856002611975565b156112455763ffffffff8085165f90815260036020908152604091829020825160a0810184529054808516825267ffffffffffffffff64010000000082048116938301939093526c01000000000000000000000000810490921692810192909252740100000000000000000000000000000000000000008104831660608301527801000000000000000000000000000000000000000000000000900490911660808201528284156111a957816020015167ffffffffffffffff168467ffffffffffffffff16111561116657815160208301516103e89163ffffffff169061113c90876121ae565b61114691906121cf565b61115091906121f3565b826040015161115f9190612219565b90506111a9565b6103e8825f015163ffffffff1685846020015161118391906121ae565b61118d91906121cf565b61119791906121f3565b82604001516111a691906121ae565b90505b42826060015163ffffffff16826111c09190612219565b67ffffffffffffffff1610806111f3575060808201516111e69063ffffffff164261211b565b8167ffffffffffffffff16115b15611242576040517f0c5a8d2300000000000000000000000000000000000000000000000000000000815263ffffffff8716600482015267ffffffffffffffff82166024820152604401610527565b50505b50505050565b604080516060810182525f80825260208201819052918101829052908085818661127682600261211b565b9261128393929190612161565b61128c9161223a565b60f01c905061129c60028361211b565b915061ffff81166001146112dc576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112e760028361211b565b91505f8683876112f882600261211b565b9261130593929190612161565b61130e9161223a565b60f01c905061131e60028461211b565b92508061ffff165f0361135d576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff168352505f5b825f015161ffff168161ffff1610156115c6575f86868481811061138c5761138c611ec2565b919091013560f81c91506113a3905060018461211b565b925060ff81166001146113e2576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113ed60028461211b565b92505f8784886113fe82600261211b565b9261140b93929190612161565b6114149161223a565b60f01c905061142460028561211b565b93507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff82160161158a575f88858961146082600261211b565b9261146d93929190612161565b6114769161223a565b60f01c905061148660028661211b565b9450845f8a828b61149882600461211b565b926114a593929190612161565b6114ae91612280565b60e01c90506114be60048361211b565b91505f8b8b848181106114d3576114d3611ec2565b600192013560f81c821492506114eb9190508461211b565b92505f8c848d6114fc82600861211b565b9261150993929190612161565b611512916122c6565b60c01c90506115278383835f8f63ffffffff16565b508a925061153c91505061ffff83168761211b565b1115611574576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158261ffff82168661211b565b9450506115bc565b6040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600101611366565b508381101561181c575f8585838181106115e2576115e2611ec2565b919091013560f81c91506115f9905060018361211b565b915060ff8116600114611638576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86838761164782600261211b565b9261165493929190612161565b61165d9161223a565b60f01c905061166d60028461211b565b925061ffff81166001146116ad576040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787858181106116c0576116c0611ec2565b919091013560f81c91506116d7905060018561211b565b935060ff81166116ed576001602086015261175c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff821601611723576001604086015261175c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff82160161158a5760016020860181905260408601525b5f88858961176b82600461211b565b9261177893929190612161565b61178191612280565b60e01c905061179160048661211b565b94505f8989878181106117a6576117a6611ec2565b600192013560f81c821492506117be9190508761211b565b95505f8a878b6117cf82600861211b565b926117dc93929190612161565b6117e5916122c6565b60c01c90506117f560088861211b565b965061180883838360018d63ffffffff16565b61181360168861211b565b96505050505050505b808414611855576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526103fa9084906119a2565b5f600282016118fb81848688612161565b6119049161223a565b60f01c95945050505050565b5f83838381811061192357611923611ec2565b919091013560f81c95945050505050565b61193f838383611975565b6103fa576040517f50fae9eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8083165f90815260208590526040812054909161199a91908490611a4116565b949350505050565b5f8060205f8451602086015f885af1806119c1576040513d5f823e3d81fd5b50505f513d915081156119d85780600114156119f2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611245576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610527565b600160ff919091161b16151590565b803573ffffffffffffffffffffffffffffffffffffffff81168114611a73575f80fd5b919050565b5f805f60608486031215611a8a575f80fd5b611a9384611a50565b9250611aa160208501611a50565b9150604084013590509250925092565b63ffffffff81168114610a12575f80fd5b5f60208284031215611ad2575f80fd5b8135611add81611ab1565b9392505050565b80356effffffffffffffffffffffffffffff81168114611a73575f80fd5b803561ffff81168114611a73575f80fd5b5f805f60608486031215611b25575f80fd5b611b2e84611ae4565b9250611b3c60208501611ae4565b9150611b4a60408501611b02565b90509250925092565b5f60608284031215611b63575f80fd5b50919050565b5f8083601f840112611b79575f80fd5b50813567ffffffffffffffff811115611b90575f80fd5b602083019150836020828501011115611ba7575f80fd5b9250929050565b5f805f80848603610140811215611bc3575f80fd5b60c0811215611bd0575f80fd5b50849350611be18660c08701611b53565b925061012085013567ffffffffffffffff811115611bfd575f80fd5b611c0987828801611b69565b95989497509550505050565b5f805f8060408587031215611c28575f80fd5b843567ffffffffffffffff80821115611c3f575f80fd5b818701915087601f830112611c52575f80fd5b813581811115611c60575f80fd5b8860208260051b8501011115611c74575f80fd5b602092830196509450908601359080821115611c8e575f80fd5b818701915087601f830112611ca1575f80fd5b813581811115611caf575f80fd5b88602060a083028501011115611cc3575f80fd5b95989497505060200194505050565b5f805f805f80868803610120811215611ce9575f80fd5b6080811215611cf6575f80fd5b50869550611d078860808901611b53565b945060e087013567ffffffffffffffff80821115611d23575f80fd5b611d2f8a838b01611b69565b9096509450610100890135915080821115611d48575f80fd5b50611d5589828a01611b69565b979a9699509497509295939492505050565b5f60208284031215611d77575f80fd5b611add82611a50565b5f8060208385031215611d91575f80fd5b823567ffffffffffffffff80821115611da8575f80fd5b818501915085601f830112611dbb575f80fd5b813581811115611dc9575f80fd5b8660208260061b8501011115611ddd575f80fd5b60209290920196919550909350505050565b67ffffffffffffffff81168114610a12575f80fd5b5f60208284031215611e14575f80fd5b8135611add81611def565b6fffffffffffffffffffffffffffffffff81168114610a12575f80fd5b5f805f8060808587031215611e4f575f80fd5b845193506020850151611e6181611e1f565b6040860151909350611e7281611e1f565b6060860151909250611e8381611e1f565b939692955090935050565b5f60208284031215611e9e575f80fd5b611add82611b02565b5f60208284031215611eb7575f80fd5b8135611add81611e1f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8135610c1f81611ab1565b8135611f0681611ab1565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135611f4681611def565b6bffffffffffffffff000000008160201b16905080837fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008416171784556040850135611f9181611def565b73ffffffffffffffff0000000000000000000000008160601b169050837fffffffffffffffffffffffff000000000000000000000000000000000000000084161793508084831717855560608601359250611feb83611ab1565b77ffffffff00000000000000000000000000000000000000008360a01b167fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff8516831782171785555050505061209361204660808401611eef565b82547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1660c09190911b7bffffffff00000000000000000000000000000000000000000000000016178255565b5050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610c1f57610c1f612097565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612116576121166120db565b500490565b80820180821115610c1f57610c1f612097565b6effffffffffffffffffffffffffffff81811683821602808216919082811461215957612159612097565b505092915050565b5f808585111561216f575f80fd5b8386111561217b575f80fd5b5050820193919092039150565b5f82612196576121966120db565b500690565b81810381811115610c1f57610c1f612097565b67ffffffffffffffff828116828216039080821115610e0857610e08612097565b67ffffffffffffffff81811683821602808216919082811461215957612159612097565b5f67ffffffffffffffff8084168061220d5761220d6120db565b92169190910492915050565b67ffffffffffffffff818116838216019080821115610e0857610e08612097565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156121595760029490940360031b84901b1690921692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156121595760049490940360031b84901b1690921692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156121595760089490940360031b84901b169092169291505056fea2646970667358221220cccc97c15d4a10960156cf1d97eac992ad00f3710384385711595e0370e0871a64736f6c6343000816003360e060405234801562000010575f80fd5b5060405162001e1538038062001e15833981016040819052620000339162000172565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b62000064816200010b565b50600180546001600160a01b0319166001600160a01b0384811691909117909155811660808190525f60a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620000ca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000f09190620001af565b63ffffffff1660c052505060636003556064600455620001db565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016f575f80fd5b50565b5f806040838503121562000184575f80fd5b825162000191816200015a565b6020840151909250620001a4816200015a565b809150509250929050565b5f60208284031215620001c0575f80fd5b815163ffffffff81168114620001d4575f80fd5b9392505050565b60805160a05160c051611bf3620002225f395f6103fc01525f61036f01525f818161033c015281816106e90152818161081201528181610a5c0152610cc30152611bf35ff3fe60806040526004361061018e575f3560e01c8063715018a6116100d5578063996f79c01161007e578063dabca06311610058578063dabca0631461051f578063f2fde38b1461053e578063fd9be5221461055d57610195565b8063996f79c0146104bf578063aec336e6146104d4578063d80e9bd9146104f357610195565b80638da5cb5b116100af5780638da5cb5b146104545780638f58aa7a1461047d578063909532381461049c57610195565b8063715018a6146103d757806372607537146103eb57806372d713221461043357610195565b80634389e58f1161013757806361d027b31161011157806361d027b31461035e5780636251b637146103915780636750cd4c146103b757610195565b80634389e58f146102d357806354fd4d50146103015780635e280f111461032b57610195565b80631881d94d116101685780631881d94d1461026d5780631c7c294e14610288578063334993ff146102b457610195565b806301ffc9a7146101c75780630e97289b146101fb57806312cc947f1461024c57610195565b3661019557005b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156101d2575f80fd5b506101e66101e136600461127f565b61057c565b60405190151581526020015b60405180910390f35b348015610206575f80fd5b506001546102279073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f2565b348015610257575f80fd5b5061026b6102663660046112fc565b610614565b005b348015610278575f80fd5b5060026040516101f2919061133b565b348015610293575f80fd5b506002546102279073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102bf575f80fd5b5061026b6102ce36600461137a565b6107e7565b3480156102de575f80fd5b506102f26102ed3660046114c1565b6107fa565b6040516101f29392919061159b565b34801561030c575f80fd5b50604080515f80825260208201526002918101919091526060016101f2565b348015610336575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b348015610369575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b34801561039c575f80fd5b506103a5600181565b60405160ff90911681526020016101f2565b3480156103c2575f80fd5b506101e66103d13660046115ed565b50600190565b3480156103e2575f80fd5b5061026b610965565b3480156103f6575f80fd5b5061041e7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101f2565b34801561043e575f80fd5b50610447610978565b6040516101f29190611606565b34801561045f575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610227565b348015610488575f80fd5b5061026b610497366004611644565b610a04565b3480156104a7575f80fd5b506104b160035481565b6040519081526020016101f2565b3480156104ca575f80fd5b506104b160045481565b3480156104df575f80fd5b5061026b6104ee36600461166e565b610b5c565b3480156104fe575f80fd5b5061051261050d366004611689565b610bab565b6040516101f291906116ff565b34801561052a575f80fd5b5061026b610539366004611716565b610beb565b348015610549575f80fd5b5061026b61055836600461166e565b610c03565b348015610568575f80fd5b5061026b610577366004611644565b610c6b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061060e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff1615801590610653575060025473ffffffffffffffffffffffffffffffffffffffff163314155b1561068a576040517f70b216ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60405180606001604052806106a08585610d5b565b63ffffffff1681526020016106b58585610d7d565b81526020016106c48585610d9c565b67ffffffffffffffff169052905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a825d747826107198686610dbe565b6107238787610dcf565b604051610731929190611750565b6040805191829003822060e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168352845163ffffffff1660048401526020850151602484015293015167ffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091166064820152608481019190915260a4015f604051808303815f87803b1580156107cc575f80fd5b505af11580156107de573d5f803e3d5ffd5b50505050505050565b6107ef610dea565b600491909155600355565b604080518082019091525f80825260208201526060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461087f576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61089061088b87611776565b610e3c565b915084515f146108a0578461092a565b600580546108ad90611811565b80601f01602080910402602001604051908101604052809291908181526020018280546108d990611811565b80156109245780601f106108fb57610100808354040283529160200191610924565b820191905f5260205f20905b81548152906001019060200180831161090757829003601f168201915b50505050505b90506109368282610ea1565b6040518060400160405280600454815260200185610954575f610958565b6003545b9052969195509350915050565b61096d610dea565b6109765f610f2a565b565b6005805461098590611811565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190611811565b80156109fc5780601f106109d3576101008083540402835291602001916109fc565b820191905f5260205f20905b8154815290600101906020018083116109df57829003601f168201915b505050505081565b610a0c610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610a59576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae7919061185c565b905073ffffffffffffffffffffffffffffffffffffffff8116610b36576040517f54c1781b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff82168484610f9e565b505050565b610b64610dea565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b604080518082019091525f80825260208201526040518060400160405280600454815260200183610bdc575f610be0565b6003545b905295945050505050565b610bf3610dea565b6005610bff82826118c2565b5050565b610c0b610dea565b73ffffffffffffffffffffffffffffffffffffffff8116610c5f576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610c6881610f2a565b50565b610c73610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610cc0576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4e919061185c565b9050610b5781848461102b565b5f610d6a600d600984866119da565b610d7391611a01565b60e01c9392505050565b5f610d8c602d600d84866119da565b610d9591611a49565b9392505050565b5f610dab6009600184866119da565b610db491611a85565b60c01c9392505050565b5f610d95610dcc848461105b565b90565b365f610dde83605181876119da565b915091505b9250929050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610976576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c56565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610e8b986001989197919673ffffffffffffffffffffffffffffffffffffffff169501611acb565b6040516020818303038152906040529050919050565b6001546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063faed6c5890610ef99085908590600401611b90565b5f604051808303815f87803b158015610f10575f80fd5b505af1158015610f22573d5f803e3d5ffd5b505050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b5790849061106a565b73ffffffffffffffffffffffffffffffffffffffff831661105057610b57828261110f565b610b57838383611211565b5f610d8c6051603184866119da565b5f8060205f8451602086015f885af180611089576040513d5f823e3d81fd5b50505f513d915081156110a05780600114156110ba565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611109576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c56565b50505050565b73ffffffffffffffffffffffffffffffffffffffff821661115c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146111b2576040519150601f19603f3d011682016040523d82523d5f602084013e6111b7565b606091505b5050905080610b57576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c56565b73ffffffffffffffffffffffffffffffffffffffff821661125e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff84168383610f9e565b5f6020828403121561128f575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d95575f80fd5b5f8083601f8401126112ce575f80fd5b50813567ffffffffffffffff8111156112e5575f80fd5b602083019150836020828501011115610de3575f80fd5b5f806020838503121561130d575f80fd5b823567ffffffffffffffff811115611323575f80fd5b61132f858286016112be565b90969095509350505050565b6020810160038310611374577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f806040838503121561138b575f80fd5b50508035926020909101359150565b5f60e082840312156113aa575f80fd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff81118282101715611400576114006113b0565b60405290565b5f82601f830112611415575f80fd5b813567ffffffffffffffff80821115611430576114306113b0565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611476576114766113b0565b8160405283815286602085880101111561148e575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803580151581146114bc575f80fd5b919050565b5f805f606084860312156114d3575f80fd5b833567ffffffffffffffff808211156114ea575f80fd5b6114f68783880161139a565b9450602086013591508082111561150b575f80fd5b5061151886828701611406565b925050611527604085016114ad565b90509250925092565b5f5b8381101561154a578181015183820152602001611532565b50505f910152565b5f8151808452611569816020860160208601611530565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8351815260208085015190820152608060408201525f6115be6080830185611552565b82810360608401526115d08185611552565b9695505050505050565b803563ffffffff811681146114bc575f80fd5b5f602082840312156115fd575f80fd5b610d95826115da565b602081525f610d956020830184611552565b73ffffffffffffffffffffffffffffffffffffffff81168114610c68575f80fd5b80356114bc81611618565b5f8060408385031215611655575f80fd5b823561166081611618565b946020939093013593505050565b5f6020828403121561167e575f80fd5b8135610d9581611618565b5f805f806060858703121561169c575f80fd5b843567ffffffffffffffff808211156116b3575f80fd5b6116bf8883890161139a565b955060208701359150808211156116d4575f80fd5b506116e1878288016112be565b90945092506116f49050604086016114ad565b905092959194509250565b81518152602080830151908201526040810161060e565b5f60208284031215611726575f80fd5b813567ffffffffffffffff81111561173c575f80fd5b61174884828501611406565b949350505050565b818382375f9101908152919050565b803567ffffffffffffffff811681146114bc575f80fd5b5f60e08236031215611786575f80fd5b61178e6113dd565b6117978361175f565b81526117a5602084016115da565b60208201526117b660408401611639565b60408201526117c7606084016115da565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156117f9575f80fd5b61180536828601611406565b60c08301525092915050565b600181811c9082168061182557607f821691505b6020821081036113aa577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6020828403121561186c575f80fd5b8151610d9581611618565b601f821115610b5757805f5260205f20601f840160051c8101602085101561189c5750805b601f840160051c820191505b818110156118bb575f81556001016118a8565b5050505050565b815167ffffffffffffffff8111156118dc576118dc6113b0565b6118f0816118ea8454611811565b84611877565b602080601f831160018114611942575f841561190c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610f22565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561198e5788860151825594840194600190910190840161196f565b50858210156119ca57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b5f80858511156119e8575f80fd5b838611156119f4575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611a415780818660040360031b1b83161692505b505092915050565b8035602083101561060e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015611a415760089490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611b7c816071850160208701611530565b919091016071019998505050505050505050565b604081525f611ba26040830185611552565b8281036020840152611bb48185611552565b9594505050505056fea2646970667358221220153f6a8e912d5720c2f1c4bf884b915b03d8f933123bf4fbba154ab615acb52564736f6c6343000816003360c060405234801562000010575f80fd5b5060405162003f7b38038062003f7b8339810160408190526200003391620002c2565b83838383838360128484818181818d6001600160a01b0381166200007057604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200007b8162000191565b506001600160a01b038083166080528116620000aa57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b158015620000ef575f80fd5b505af115801562000102573d5f803e3d5ffd5b50505050505050506200011a620001e060201b60201c565b60ff168360ff16101562000141576040516301e9714b60e41b815260040160405180910390fd5b6200014e60068462000360565b6200015b90600a6200047b565b60a052506008915062000171905083826200051c565b5060096200018082826200051c565b5050505050505050505050620005e8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000209575f80fd5b81516001600160401b0380821115620002265762000226620001e5565b604051601f8301601f19908116603f01168101908282118183101715620002515762000251620001e5565b81604052838152602092508660208588010111156200026e575f80fd5b5f91505b8382101562000291578582018301518183018401529082019062000272565b5f602085830101528094505050505092915050565b80516001600160a01b0381168114620002bd575f80fd5b919050565b5f805f8060808587031215620002d6575f80fd5b84516001600160401b0380821115620002ed575f80fd5b620002fb88838901620001f9565b9550602087015191508082111562000311575f80fd5b506200032087828801620001f9565b9350506200033160408601620002a6565b91506200034160608601620002a6565b905092959194509250565b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156200037c576200037c6200034c565b92915050565b600181815b80851115620003c257815f1904821115620003a657620003a66200034c565b80851615620003b457918102915b93841c939080029062000387565b509250929050565b5f82620003da575060016200037c565b81620003e857505f6200037c565b81600181146200040157600281146200040c576200042c565b60019150506200037c565b60ff8411156200042057620004206200034c565b50506001821b6200037c565b5060208310610133831016604e8410600b841016171562000451575081810a6200037c565b6200045d838362000382565b805f19048211156200047357620004736200034c565b029392505050565b5f6200048b60ff841683620003ca565b9392505050565b600181811c90821680620004a757607f821691505b602082108103620004c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200051757805f5260205f20601f840160051c81016020851015620004f35750805b601f840160051c820191505b8181101562000514575f8155600101620004ff565b50505b505050565b81516001600160401b03811115620005385762000538620001e5565b620005508162000549845462000492565b84620004cc565b602080601f83116001811462000586575f84156200056e5750858301515b5f19600386901b1c1916600185901b178555620005e0565b5f85815260208120601f198616915b82811015620005b65788860151825594840194600190910190840162000595565b5085821015620005d457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60805160a05161392b620006505f395f81816106f301528181611f9b0152818161200d015261229a01525f81816105a301528181610b5901528181611296015281816115bc01528181611a17015281816123ee0152818161251301526125fb015261392b5ff3fe6080604052600436106102d7575f3560e01c80637d25a05e1161017b578063bb0b6a53116100d1578063d045a0dc11610087578063f2fde38b11610062578063f2fde38b146108d0578063fc0c546a1461052c578063ff7bd03d146108ef575f80fd5b8063d045a0dc1461084d578063d424388514610860578063dd62ed3e1461087f575f80fd5b8063bd815db0116100b7578063bd815db0146107fa578063c7c7f5b31461080d578063ca5eb5e11461082e575f80fd5b8063bb0b6a53146107b0578063bc70b354146107db575f80fd5b8063963efcaa11610131578063a9059cbb1161010c578063a9059cbb14610746578063b731ea0a14610765578063b98bd07014610791575f80fd5b8063963efcaa146106e25780639dc29fac146107155780639f68b96414610734575f80fd5b8063857749b011610161578063857749b0146106925780638da5cb5b146106a557806395d89b41146106ce575f80fd5b80637d25a05e1461063957806382413eac14610673575f80fd5b8063313ce567116102305780635535d461116101e65780636fc1b31e116101c15780636fc1b31e146105c557806370a08231146105e4578063715018a614610625575f80fd5b80635535d4611461053e5780635a0dfe4d1461055d5780635e280f1114610592575f80fd5b80633b6f743b116102165780633b6f743b146104e157806340c10f191461050d57806352ae28791461052c575f80fd5b8063313ce567146104a15780633400288b146104c2575f80fd5b8063134d4f251161029057806318160ddd1161026b57806318160ddd146104505780631f5e13341461046e57806323b872dd14610482575f80fd5b8063134d4f25146103c8578063156a0d0f146103ef57806317442b701461042f575f80fd5b80630d35b415116102c05780630d35b41514610334578063111ecdad1461036257806313137d65146103b3575f80fd5b806306fdde03146102db578063095ea7b314610305575b5f80fd5b3480156102e6575f80fd5b506102ef61090e565b6040516102fc91906127f6565b60405180910390f35b348015610310575f80fd5b5061032461031f366004612829565b61099e565b60405190151581526020016102fc565b34801561033f575f80fd5b5061035361034e366004612869565b6109b7565b6040516102fc9392919061289b565b34801561036d575f80fd5b5060045461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102fc565b6103c66103c13660046129a5565b610b57565b005b3480156103d3575f80fd5b506103dc600281565b60405161ffff90911681526020016102fc565b3480156103fa575f80fd5b50604080517f02e49c2c00000000000000000000000000000000000000000000000000000000815260016020820152016102fc565b34801561043a575f80fd5b50604080516001815260026020820152016102fc565b34801561045b575f80fd5b506007545b6040519081526020016102fc565b348015610479575f80fd5b506103dc600181565b34801561048d575f80fd5b5061032461049c366004612a3e565b610c56565b3480156104ac575f80fd5b5060125b60405160ff90911681526020016102fc565b3480156104cd575f80fd5b506103c66104dc366004612a94565b610c7b565b3480156104ec575f80fd5b506105006104fb366004612abb565b610c91565b6040516102fc9190612b0a565b348015610518575f80fd5b506103c6610527366004612829565b610cf5565b348015610537575f80fd5b503061038e565b348015610549575f80fd5b506102ef610558366004612b32565b610cff565b348015610568575f80fd5b50610324610577366004612a94565b63ffffffff919091165f908152600160205260409020541490565b34801561059d575f80fd5b5061038e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d0575f80fd5b506103c66105df366004612b63565b610da1565b3480156105ef575f80fd5b506104606105fe366004612b63565b73ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604090205490565b348015610630575f80fd5b506103c6610e23565b348015610644575f80fd5b5061065a610653366004612a94565b5f92915050565b60405167ffffffffffffffff90911681526020016102fc565b34801561067e575f80fd5b5061032461068d366004612b7e565b610e36565b34801561069d575f80fd5b5060066104b0565b3480156106b0575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661038e565b3480156106d9575f80fd5b506102ef610e58565b3480156106ed575f80fd5b506104607f000000000000000000000000000000000000000000000000000000000000000081565b348015610720575f80fd5b506103c661072f366004612829565b610e67565b34801561073f575f80fd5b505f610324565b348015610751575f80fd5b50610324610760366004612829565b610e71565b348015610770575f80fd5b5060025461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561079c575f80fd5b506103c66107ab366004612c22565b610e7e565b3480156107bb575f80fd5b506104606107ca366004612c61565b60016020525f908152604090205481565b3480156107e6575f80fd5b506102ef6107f5366004612c7a565b610e98565b6103c6610808366004612c22565b611052565b61082061081b366004612cd7565b611216565b6040516102fc929190612d5e565b348015610839575f80fd5b506103c6610848366004612b63565b611249565b6103c661085b3660046129a5565b6112f0565b34801561086b575f80fd5b506103c661087a366004612b63565b611338565b34801561088a575f80fd5b50610460610899366004612db0565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260066020908152604080832093909416825291909152205490565b3480156108db575f80fd5b506103c66108ea366004612b63565b6113b3565b3480156108fa575f80fd5b50610324610909366004612ddc565b611416565b60606008805461091d90612df6565b80601f016020809104026020016040519081016040528092919081815260200182805461094990612df6565b80156109945780601f1061096b57610100808354040283529160200191610994565b820191905f5260205f20905b81548152906001019060200180831161097757829003601f168201915b5050505050905090565b5f336109ab81858561144a565b60019150505b92915050565b604080518082019091525f808252602082015260606109e760405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a569190612e41565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac29190612e5c565b604080518082018252848152602080820184905282515f80825291810190935290975091925090610b15565b604080518082019091525f815260606020820152815260200190600190039081610aee5790505b5093505f80610b39604089013560608a0135610b3460208c018c612c61565b61145c565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610bcd576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b60208701803590610be790610be2908a612c61565b6114b0565b14610c3e57610bf96020880188612c61565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610bc4565b610c4d87878787878787611504565b50505050505050565b5f33610c63858285611695565b610c6e858585611762565b60019150505b9392505050565b610c8361180b565b610c8d828261185d565b5050565b604080518082019091525f80825260208201525f610cbf60408501356060860135610b346020880188612c61565b9150505f80610cce86846118b1565b9092509050610ceb610ce36020880188612c61565b838388611a02565b9695505050505050565b610c8d8282611aed565b600360209081525f928352604080842090915290825290208054610d2290612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4e90612df6565b8015610d995780601f10610d7057610100808354040283529160200191610d99565b820191905f5260205f20905b815481529060010190602001808311610d7c57829003601f168201915b505050505081565b610da961180b565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610e2b61180b565b610e345f611b47565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b60606009805461091d90612df6565b610c8d8282611bbb565b5f336109ab818585611762565b610e8661180b565b610c8d610e938284612f80565b611c15565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ecb90612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef790612df6565b8015610f425780601f10610f1957610100808354040283529160200191610f42565b820191905f5260205f20905b815481529060010190602001808311610f2557829003601f168201915b5050505050905080515f03610f905783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610e509350505050565b5f839003610f9f579050610e50565b6002831061101c57610fe584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611d1692505050565b80610ff38460028188613089565b604051602001611005939291906130b0565b604051602081830303815290604052915050610e50565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc492919061311d565b5f5b81811015611155573683838381811061106f5761106f613130565b9050602002810190611081919061315d565b90506110b36110936020830183612c61565b602083013563ffffffff919091165f908152600160205260409020541490565b6110bd575061114d565b3063d045a0dc60c08301358360a08101356110dc610100830183613199565b6110ed610100890160e08a01612b63565b6110fb6101208a018a613199565b6040518963ffffffff1660e01b815260040161111d979695949392919061320f565b5f604051808303818588803b158015611134575f80fd5b505af1158015611146573d5f803e3d5ffd5b5050505050505b600101611054565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa15801561119e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111e391908101906132a2565b6040517f8351eea7000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b61121e612747565b604080518082019091525f808252602082015261123c858585611d5b565b915091505b935093915050565b61125161180b565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b1580156112d7575f80fd5b505af11580156112e9573d5f803e3d5ffd5b5050505050565b333014611329576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c4d87878787878787610c3e565b61134061180b565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610e18565b6113bb61180b565b73ffffffffffffffffffffffffffffffffffffffff811661140a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b61141381611b47565b50565b5f60208201803590600190839061142d9086612c61565b63ffffffff16815260208101919091526040015f20541492915050565b6114578383836001611e53565b505050565b5f8061146785611f98565b915081905083811015611241576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610bc4565b63ffffffff81165f90815260016020526040812054806109b1576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610bc4565b5f6115156115128787611fce565b90565b90505f6115408261152e6115298a8a611fe5565b612007565b61153b60208d018d612c61565b61203c565b90506028861115611626575f61157c61155f60608c0160408d0161330b565b61156c60208d018d612c61565b846115778c8c612070565b6120ba565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906115f79086908d905f908790600401613326565b5f604051808303815f87803b15801561160e575f80fd5b505af1158015611620573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61166c60208d018d612c61565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600660209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461175c578181101561174e576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610bc4565b61175c84848484035f611e53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166117b1576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8216611800576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b6114578383836120ec565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610e34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610bc4565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61190c85602001356118c686612293565b6118d360a0890189613199565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061230692505050565b90935090505f8161191e576001611921565b60025b90506119416119336020880188612c61565b826107f560808a018a613199565b60045490935073ffffffffffffffffffffffffffffffffffffffff1680156119f8576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906119b79088908890600401613364565b602060405180830381865afa1580156119d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f69190613388565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff168152602001611a71896114b0565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611aa69291906133a3565b6040805180830381865afa158015611ac0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae49190613474565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611b3c576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d5f83836120ec565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611c0a576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d825f836120ec565b5f5b8151811015611ce657611c46828281518110611c3557611c35613130565b602002602001015160400151611d16565b818181518110611c5857611c58613130565b60200260200101516040015160035f848481518110611c7957611c79613130565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611cb057611cb0613130565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611cdd91906134d2565b50600101611c17565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610e1891906135ee565b600281015161ffff8116600314610c8d57816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b611d63612747565b604080518082019091525f80825260208201525f80611d9833604089013560608a0135611d9360208c018c612c61565b612398565b915091505f80611da889846118b1565b9092509050611dd4611dbd60208b018b612c61565b8383611dce368d90038d018d613695565b8b6123bd565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611e22908d018d612c61565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff8416611ea2576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8316611ef1576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600660209081526040808320938716835292905220829055801561175c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611f8a91815260200190565b60405180910390a350505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000611fc481846136f2565b6109b1919061372a565b5f611fdc6020828486613089565b610c7491613741565b5f611ff4602860208486613089565b611ffd9161377d565b60c01c9392505050565b5f6109b17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff841661372a565b5f73ffffffffffffffffffffffffffffffffffffffff841661205e5761dead93505b6120688484611aed565b509092915050565b606061207f8260288186613089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b6060848484846040516020016120d394939291906137c5565b6040516020818303038152906040529050949350505050565b73ffffffffffffffffffffffffffffffffffffffff8316612123578060075f8282546121189190613842565b909155506121d39050565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260056020526040902054818110156121a8576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610bc4565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526005602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166121fc57600780548290039055612227565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526005602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161228691815260200190565b60405180910390a3505050565b5f806122bf7f0000000000000000000000000000000000000000000000000000000000000000846136f2565b905067ffffffffffffffff8111156109b1576040517fe2ce941300000000000000000000000000000000000000000000000000000000815260048101829052602401610bc4565b805160609015158061236757848460405160200161235392919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b60405160208183030381529060405261238e565b8484338560405160200161237e9493929190613855565b6040516020818303038152906040525b9150935093915050565b5f806123a585858561145c565b90925090506123b48683611bbb565b94509492505050565b6123c5612747565b5f6123d2845f01516124d0565b6020850151909150156123ec576123ec8460200151612510565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff1681526020016124498c6114b0565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b81526004016124849291906133a3565b60806040518083038185885af11580156124a0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906124c591906138ad565b979650505050505050565b5f81341461250c576040517f9f704120000000000000000000000000000000000000000000000000000000008152346004820152602401610bc4565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259e9190612e41565b905073ffffffffffffffffffffffffffffffffffffffff81166125ed576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805133602482018190527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff81811660448501526064808501889052855180860390910181526084909401909452602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001781528451610c8d96881695899361175c9388935f9283929091839182885af1806126c7576040513d5f823e3d81fd5b50505f513d915081156126de5780600114156126f8565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561175c576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610bc4565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161278660405180604001604052805f81526020015f81525090565b905290565b5f5b838110156127a557818101518382015260200161278d565b50505f910152565b5f81518084526127c481602086016020860161278b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610c7460208301846127ad565b73ffffffffffffffffffffffffffffffffffffffff81168114611413575f80fd5b5f806040838503121561283a575f80fd5b823561284581612808565b946020939093013593505050565b5f60e08284031215612863575f80fd5b50919050565b5f60208284031215612879575f80fd5b813567ffffffffffffffff81111561288f575f80fd5b610e5084828501612853565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612932578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261291f878901826127ad565b97505093820193908201906001016128d5565b50508751606088015250505060208501516080850152509050610e50565b5f60608284031215612863575f80fd5b5f8083601f840112612970575f80fd5b50813567ffffffffffffffff811115612987575f80fd5b60208301915083602082850101111561299e575f80fd5b9250929050565b5f805f805f805f60e0888a0312156129bb575f80fd5b6129c58989612950565b965060608801359550608088013567ffffffffffffffff808211156129e8575f80fd5b6129f48b838c01612960565b909750955060a08a01359150612a0982612808565b90935060c08901359080821115612a1e575f80fd5b50612a2b8a828b01612960565b989b979a50959850939692959293505050565b5f805f60608486031215612a50575f80fd5b8335612a5b81612808565b92506020840135612a6b81612808565b929592945050506040919091013590565b803563ffffffff81168114612a8f575f80fd5b919050565b5f8060408385031215612aa5575f80fd5b61284583612a7c565b8015158114611413575f80fd5b5f8060408385031215612acc575f80fd5b823567ffffffffffffffff811115612ae2575f80fd5b612aee85828601612853565b9250506020830135612aff81612aae565b809150509250929050565b8151815260208083015190820152604081016109b1565b803561ffff81168114612a8f575f80fd5b5f8060408385031215612b43575f80fd5b612b4c83612a7c565b9150612b5a60208401612b21565b90509250929050565b5f60208284031215612b73575f80fd5b8135610c7481612808565b5f805f8060a08587031215612b91575f80fd5b612b9b8686612950565b9350606085013567ffffffffffffffff811115612bb6575f80fd5b612bc287828801612960565b9094509250506080850135612bd681612808565b939692955090935050565b5f8083601f840112612bf1575f80fd5b50813567ffffffffffffffff811115612c08575f80fd5b6020830191508360208260051b850101111561299e575f80fd5b5f8060208385031215612c33575f80fd5b823567ffffffffffffffff811115612c49575f80fd5b612c5585828601612be1565b90969095509350505050565b5f60208284031215612c71575f80fd5b610c7482612a7c565b5f805f8060608587031215612c8d575f80fd5b612c9685612a7c565b9350612ca460208601612b21565b9250604085013567ffffffffffffffff811115612cbf575f80fd5b612ccb87828801612960565b95989497509550505050565b5f805f8385036080811215612cea575f80fd5b843567ffffffffffffffff811115612d00575f80fd5b612d0c87828801612853565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612d3e575f80fd5b506020840191506060840135612d5381612808565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff60208501511660208301526040840151612d99604084018280518252602090810151910152565b5082516080830152602083015160a0830152610c74565b5f8060408385031215612dc1575f80fd5b8235612dcc81612808565b91506020830135612aff81612808565b5f60608284031215612dec575f80fd5b610c748383612950565b600181811c90821680612e0a57607f821691505b602082108103612863577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208284031215612e51575f80fd5b8151610c7481612808565b5f60208284031215612e6c575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715612ec357612ec3612e73565b60405290565b6040805190810167ffffffffffffffff81118282101715612ec357612ec3612e73565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f3357612f33612e73565b604052919050565b5f67ffffffffffffffff821115612f5457612f54612e73565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612f9a57612f9a612e73565b8360051b6020612fab818301612eec565b868152918501918181019036841115612fc2575f80fd5b865b8481101561307d57803586811115612fda575f80fd5b88016060368290031215612fec575f80fd5b612ff4612ea0565b612ffd82612a7c565b815261300a868301612b21565b8682015260408083013589811115613020575f80fd5b929092019136601f840112613033575f80fd5b823561304661304182612f3b565b612eec565b8181523689838701011115613059575f80fd5b818986018a8301375f91810189019190915290820152845250918301918301612fc4565b50979650505050505050565b5f8085851115613097575f80fd5b838611156130a3575f80fd5b5050820193919092039150565b5f84516130c181846020890161278b565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610e506020830184866130d6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261318f575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126131cc575f80fd5b83018035915067ffffffffffffffff8211156131e6575f80fd5b60200191503681900382131561299e575f80fd5b67ffffffffffffffff81168114611413575f80fd5b63ffffffff61321d89612a7c565b168152602088013560208201525f6040890135613239816131fa565b67ffffffffffffffff811660408401525087606083015260e0608083015261326560e0830187896130d6565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c08401526132948185876130d6565b9a9950505050505050505050565b5f602082840312156132b2575f80fd5b815167ffffffffffffffff8111156132c8575f80fd5b8201601f810184136132d8575f80fd5b80516132e661304182612f3b565b8181528560208385010111156132fa575f80fd5b611ae482602083016020860161278b565b5f6020828403121561331b575f80fd5b8135610c74816131fa565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f610ceb60808301846127ad565b604081525f61337660408301856127ad565b8281036020840152611ae481856127ad565b5f60208284031215613398575f80fd5b8151610c7481612aae565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a060808401526133d860e08401826127ad565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a085015261341382826127ad565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215613456575f80fd5b61345e612ec9565b9050815181526020820151602082015292915050565b5f60408284031215613484575f80fd5b610c748383613446565b601f82111561145757805f5260205f20601f840160051c810160208510156134b35750805b601f840160051c820191505b818110156112e9575f81556001016134bf565b815167ffffffffffffffff8111156134ec576134ec612e73565b613500816134fa8454612df6565b8461348e565b602080601f831160018114613552575f841561351c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556135e6565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561359e5788860151825594840194600190910190840161357f565b50858210156135da57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015613687578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052613673818601836127ad565b968901969450505090860190600101613615565b509098975050505050505050565b5f604082840312156136a5575f80fd5b6136ad612ec9565b82358152602083013560208201528091505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f82613725577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109b1576109b16136c5565b803560208310156109b1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156137bd5780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161383281602c85016020870161278b565b91909101602c0195945050505050565b808201808211156109b1576109b16136c5565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f825161389d81604885016020870161278b565b9190910160480195945050505050565b5f608082840312156138bd575f80fd5b6138c5612ea0565b8251815260208301516138d7816131fa565b60208201526138e98460408501613446565b6040820152939250505056fea2646970667358221220a7e78c28d4976391911497373c3bfff426de060fa72d1fbc537e431a0fece95964736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b1c38038062001b1c833981016040819052620000339162000240565b808383600362000044838262000351565b50600462000053828262000351565b5050505f8062000069836200009b60201b60201c565b91509150816200007b5760126200007d565b805b60ff1660a05250506001600160a01b03166080525062000452915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691620000e3916200041d565b5f60405180830381855afa9150503d805f81146200011d576040519150601f19603f3d011682016040523d82523d5f602084013e62000122565b606091505b50915091508180156200013757506020815110155b156200016e575f818060200190518101906200015491906200043a565b905060ff81116200016c576001969095509350505050565b505b505f9485945092505050565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015620001aa57818101518382015260200162000190565b50505f910152565b5f82601f830112620001c2575f80fd5b81516001600160401b0380821115620001df57620001df6200017a565b604051601f8301601f19908116603f011681019082821181831017156200020a576200020a6200017a565b8160405283815286602085880101111562000223575f80fd5b620002368460208301602089016200018e565b9695505050505050565b5f805f6060848603121562000253575f80fd5b83516001600160401b03808211156200026a575f80fd5b6200027887838801620001b2565b945060208601519150808211156200028e575f80fd5b506200029d86828701620001b2565b604086015190935090506001600160a01b0381168114620002bc575f80fd5b809150509250925092565b600181811c90821680620002dc57607f821691505b602082108103620002fb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200034c57805f5260205f20601f840160051c81016020851015620003285750805b601f840160051c820191505b8181101562000349575f815560010162000334565b50505b505050565b81516001600160401b038111156200036d576200036d6200017a565b62000385816200037e8454620002c7565b8462000301565b602080601f831160018114620003bb575f8415620003a35750858301515b5f19600386901b1c1916600185901b17855562000415565b5f85815260208120601f198616915b82811015620003eb57888601518255948401946001909101908401620003ca565b50858210156200040957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251620004308184602087016200018e565b9190910192915050565b5f602082840312156200044b575f80fd5b5051919050565b60805160a051611693620004895f395f6105d301525f818161027c0152818161043101528181610a880152610bd601526116935ff3fe608060405234801561000f575f80fd5b50600436106101b0575f3560e01c806370a08231116100f3578063ba08765211610093578063ce96cb771161006e578063ce96cb77146103c3578063d905777e146103d6578063dd62ed3e146103e9578063ef8b30f7146103b0575f80fd5b8063ba0876521461039d578063c63d75b6146102a6578063c6e6f592146103b0575f80fd5b80639dc29fac116100ce5780639dc29fac14610351578063a9059cbb14610364578063b3d7f6b914610377578063b460af941461038a575f80fd5b806370a082311461030157806394bf804d1461033657806395d89b4114610349575f80fd5b806323b872dd1161015e578063402d267d11610139578063402d267d146102a657806340c10f19146102d95780634cdad506146101e45780636e553f65146102ee575f80fd5b806323b872dd14610235578063313ce5671461024857806338d52e0f14610262575f80fd5b8063095ea7b31161018e578063095ea7b3146101f75780630a28a4771461021a57806318160ddd1461022d575f80fd5b806301e1d114146101b457806306fdde03146101cf57806307a2d13a146101e4575b5f80fd5b6101bc61042e565b6040519081526020015b60405180910390f35b6101d76104e3565b6040516101c69190611222565b6101bc6101f236600461128c565b610573565b61020a6102053660046112cb565b610584565b60405190151581526020016101c6565b6101bc61022836600461128c565b61059b565b6002546101bc565b61020a6102433660046112f3565b6105a7565b6102506105cc565b60405160ff90911681526020016101c6565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c6565b6101bc6102b436600461132c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b6102ec6102e73660046112cb565b6105f7565b005b6101bc6102fc366004611345565b610605565b6101bc61030f36600461132c565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b6101bc610344366004611345565b610655565b6101d761068f565b6102ec61035f3660046112cb565b61069e565b61020a6103723660046112cb565b6106a8565b6101bc61038536600461128c565b6106b5565b6101bc61039836600461136f565b6106c1565b6101bc6103ab36600461136f565b610750565b6101bc6103be36600461128c565b6107d6565b6101bc6103d136600461132c565b6107e1565b6101bc6103e436600461132c565b610810565b6101bc6103f73660046113a8565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b5f7f00000000000000000000000000000000000000000000000000000000000000006040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa1580156104ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104de91906113d0565b905090565b6060600380546104f2906113e7565b80601f016020809104026020016040519081016040528092919081815260200182805461051e906113e7565b80156105695780601f1061054057610100808354040283529160200191610569565b820191905f5260205f20905b81548152906001019060200180831161054c57829003601f168201915b5050505050905090565b5f61057e825f61083a565b92915050565b5f33610591818585610872565b5060019392505050565b5f61057e826001610884565b5f336105b48582856108b3565b6105bf858585610980565b60019150505b9392505050565b5f6104de817f0000000000000000000000000000000000000000000000000000000000000000611465565b6106018282610a29565b5050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610635565b60405180910390fd5b5f61063f856107d6565b905061064d33858784610a83565b949350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f610681856106b5565b905061064d33858388610a83565b6060600480546104f2906113e7565b6106018282610b2f565b5f33610591818585610980565b5f61057e82600161083a565b5f806106cc836107e1565b90508085111561072e576040517ffe9cceec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107388661059b565b90506107473386868985610b89565b95945050505050565b5f8061075b83610810565b9050808511156107bd576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107c786610573565b9050610747338686848a610b89565b5f61057e825f610884565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e905f61083a565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e565b5f6105c561084661042e565b61085190600161147e565b61085c5f600a6115af565b600254610869919061147e565b85919085610c8a565b61087f8383836001610ccc565b505050565b5f6105c561089382600a6115af565b6002546108a0919061147e565b6108a861042e565b61086990600161147e565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461097a578181101561096c576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018290526044810183905260640161062c565b61097a84848484035f610ccc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109cf576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8216610a1e576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b61087f838383610e03565b73ffffffffffffffffffffffffffffffffffffffff8216610a78576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b6106015f8383610e03565b610aaf7f0000000000000000000000000000000000000000000000000000000000000000853085610faa565b610ab98382610a29565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051610b21929190918252602082015260400190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b7e576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b610601825f83610e03565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610bc757610bc78386836108b3565b610bd18382610b2f565b610bfc7f00000000000000000000000000000000000000000000000000000000000000008584611033565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051610c7b929190918252602082015260400190565b60405180910390a45050505050565b5f610cb7610c9783611071565b8015610cb257505f8480610cad57610cad6115bd565b868809115b151590565b610cc286868661109d565b610747919061147e565b73ffffffffffffffffffffffffffffffffffffffff8416610d1b576040517fe602df050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8316610d6a576040517f94280d620000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600160209081526040808320938716835292905220829055801561097a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b2191815260200190565b73ffffffffffffffffffffffffffffffffffffffff8316610e3a578060025f828254610e2f919061147e565b90915550610eea9050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020819052604090205481811015610ebf576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602481018290526044810183905260640161062c565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610f1357600280548290039055610f3e565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f9d91815260200190565b60405180910390a3505050565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283811660448301526064820183905261097a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611172565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261087f91859182169063a9059cbb90606401610fec565b5f6002826003811115611086576110866115ea565b6110909190611617565b60ff166001149050919050565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f036110f0578382816110e6576110e66115bd565b04925050506105c5565b808411611107576111076003851502601118611211565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f8060205f8451602086015f885af180611191576040513d5f823e3d81fd5b50505f513d915081156111a85780600114156111c2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561097a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161062c565b634e487b715f52806020526024601cfd5b5f602080835283518060208501525f5b8181101561124e57858101830151858201604001528201611232565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f6020828403121561129c575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112c6575f80fd5b919050565b5f80604083850312156112dc575f80fd5b6112e5836112a3565b946020939093013593505050565b5f805f60608486031215611305575f80fd5b61130e846112a3565b925061131c602085016112a3565b9150604084013590509250925092565b5f6020828403121561133c575f80fd5b6105c5826112a3565b5f8060408385031215611356575f80fd5b82359150611366602084016112a3565b90509250929050565b5f805f60608486031215611381575f80fd5b83359250611391602085016112a3565b915061139f604085016112a3565b90509250925092565b5f80604083850312156113b9575f80fd5b6113c2836112a3565b9150611366602084016112a3565b5f602082840312156113e0575f80fd5b5051919050565b600181811c908216806113fb57607f821691505b602082108103611432577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff818116838216019081111561057e5761057e611438565b8082018082111561057e5761057e611438565b600181815b808511156114ea57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156114d0576114d0611438565b808516156114dd57918102915b93841c9390800290611496565b509250929050565b5f826115005750600161057e565b8161150c57505f61057e565b8160018114611522576002811461152c57611548565b600191505061057e565b60ff84111561153d5761153d611438565b50506001821b61057e565b5060208310610133831016604e8410600b841016171561156b575081810a61057e565b6115758383611491565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156115a7576115a7611438565b029392505050565b5f6105c560ff8416836114f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff83168061164e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff8416069150509291505056fea2646970667358221220e4c7204716e83cc6436d4c089c98eaebf1301b2ac725b313f068e28e347d110264736f6c6343000816003360e060405234801562000010575f80fd5b506040516200355f3803806200355f833981016040819052620000339162000240565b828282826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000099919062000287565b8282818181813380620000c557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000d081620001d0565b506001600160a01b038083166080528116620000ff57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b15801562000144575f80fd5b505af115801562000157573d5f803e3d5ffd5b50505050505050506200016f6200021f60201b60201c565b60ff168360ff16101562000196576040516301e9714b60e41b815260040160405180910390fd5b620001a3600684620002c4565b620001b090600a620003df565b60a0525050506001600160a01b0390921660c05250620003ef9350505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b80516001600160a01b03811681146200023b575f80fd5b919050565b5f805f6060848603121562000253575f80fd5b6200025e8462000224565b92506200026e6020850162000224565b91506200027e6040850162000224565b90509250925092565b5f6020828403121562000298575f80fd5b815160ff81168114620002a9575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b60ff8281168282160390811115620002e057620002e0620002b0565b92915050565b600181815b808511156200032657815f19048211156200030a576200030a620002b0565b808516156200031857918102915b93841c9390800290620002eb565b509250929050565b5f826200033e57506001620002e0565b816200034c57505f620002e0565b8160018114620003655760028114620003705762000390565b6001915050620002e0565b60ff841115620003845762000384620002b0565b50506001821b620002e0565b5060208310610133831016604e8410600b8410161715620003b5575081810a620002e0565b620003c18383620002e6565b805f1904821115620003d757620003d7620002b0565b029392505050565b5f620002a960ff8416836200032e565b60805160a05160c0516130f16200046e5f395f818161069e015281816119b40152611b9001525f8181610514015281816118f10152818161196a0152611a6601525f81816104110152818161088301528181610f6d015281816112810152818161156601528181611bf201528181611de90152611ee001526130f15ff3fe6080604052600436106101f5575f3560e01c806382413eac11610117578063bc70b354116100ac578063d045a0dc1161007c578063f2fde38b11610062578063f2fde38b14610671578063fc0c546a14610690578063ff7bd03d146106c2575f80fd5b8063d045a0dc1461063f578063d424388514610652575f80fd5b8063bc70b354146105cd578063bd815db0146105ec578063c7c7f5b3146105ff578063ca5eb5e114610620575f80fd5b80639f68b964116100e75780639f68b96414610544578063b731ea0a14610557578063b98bd07014610583578063bb0b6a53146105a2575f80fd5b806382413eac146104a0578063857749b0146104bf5780638da5cb5b146104da578063963efcaa14610503575f80fd5b80633b6f743b1161018d5780635e280f111161015d5780635e280f11146104005780636fc1b31e14610433578063715018a6146104525780637d25a05e14610466575f80fd5b80633b6f743b1461035157806352ae28791461037d5780635535d4611461038f5780635a0dfe4d146103bb575f80fd5b8063156a0d0f116101c8578063156a0d0f146102bd57806317442b70146102fd5780631f5e13341461031e5780633400288b14610332575f80fd5b80630d35b415146101f9578063111ecdad1461023057806313137d6514610281578063134d4f2514610296575b5f80fd5b348015610204575f80fd5b50610218610213366004611ffe565b6106e1565b6040516102279392919061209b565b60405180910390f35b34801561023b575f80fd5b5060045461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610227565b61029461028f3660046121c6565b610881565b005b3480156102a1575f80fd5b506102aa600281565b60405161ffff9091168152602001610227565b3480156102c8575f80fd5b50604080517f02e49c2c0000000000000000000000000000000000000000000000000000000081526001602082015201610227565b348015610308575f80fd5b5060408051600181526002602082015201610227565b348015610329575f80fd5b506102aa600181565b34801561033d575f80fd5b5061029461034c366004612277565b610980565b34801561035c575f80fd5b5061037061036b3660046122ac565b610996565b60405161022791906122fb565b348015610388575f80fd5b503061025c565b34801561039a575f80fd5b506103ae6103a9366004612323565b6109fc565b6040516102279190612354565b3480156103c6575f80fd5b506103f06103d5366004612277565b63ffffffff919091165f908152600160205260409020541490565b6040519015158152602001610227565b34801561040b575f80fd5b5061025c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043e575f80fd5b5061029461044d366004612366565b610a9e565b34801561045d575f80fd5b50610294610b20565b348015610471575f80fd5b50610487610480366004612277565b5f92915050565b60405167ffffffffffffffff9091168152602001610227565b3480156104ab575f80fd5b506103f06104ba366004612381565b610b33565b3480156104ca575f80fd5b5060405160068152602001610227565b3480156104e5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661025c565b34801561050e575f80fd5b506105367f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610227565b34801561054f575f80fd5b5060016103f0565b348015610562575f80fd5b5060025461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561058e575f80fd5b5061029461059d366004612425565b610b55565b3480156105ad575f80fd5b506105366105bc366004612464565b60016020525f908152604090205481565b3480156105d8575f80fd5b506103ae6105e736600461247d565b610b6f565b6102946105fa366004612425565b610d29565b61061261060d3660046124da565b610eed565b604051610227929190612561565b34801561062b575f80fd5b5061029461063a366004612366565b610f20565b61029461064d3660046121c6565b610fc7565b34801561065d575f80fd5b5061029461066c366004612366565b61100f565b34801561067c575f80fd5b5061029461068b366004612366565b61108a565b34801561069b575f80fd5b507f000000000000000000000000000000000000000000000000000000000000000061025c565b3480156106cd575f80fd5b506103f06106dc3660046125b3565b6110ed565b604080518082019091525f8082526020820152606061071160405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078091906125cd565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ec91906125e8565b604080518082018252848152602080820184905282515f8082529181019093529097509192509061083f565b604080518082019091525f8152606060208201528152602001906001900390816108185790505b5093505f80610863604089013560608a013561085e60208c018c612464565b611121565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146108f7576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b602087018035906109119061090c908a612464565b611175565b14610968576109236020880188612464565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602088013560248201526044016108ee565b610977878787878787876111c9565b50505050505050565b61098861135a565b61099282826113ac565b5050565b604080518082019091525f80825260208201525f6109c46040850135606086013561085e6020880188612464565b9150505f806109d38684611400565b90925090506109f06109e86020880188612464565b838388611551565b93505050505b92915050565b600360209081525f928352604080842090915290825290208054610a1f9061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4b9061262c565b8015610a965780601f10610a6d57610100808354040283529160200191610a96565b820191905f5260205f20905b815481529060010190602001808311610a7957829003601f168201915b505050505081565b610aa661135a565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610b2861135a565b610b315f61163c565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b610b5d61135a565b610992610b6a8284612757565b6116b0565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ba29061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bce9061262c565b8015610c195780601f10610bf057610100808354040283529160200191610c19565b820191905f5260205f20905b815481529060010190602001808311610bfc57829003601f168201915b5050505050905080515f03610c675783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610b4d9350505050565b5f839003610c76579050610b4d565b60028310610cf357610cbc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506117b192505050565b80610cca8460028188612860565b604051602001610cdc93929190612887565b604051602081830303815290604052915050610b4d565b83836040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9291906128f4565b5f5b81811015610e2c5736838383818110610d4657610d46612907565b9050602002810190610d589190612934565b9050610d8a610d6a6020830183612464565b602083013563ffffffff919091165f908152600160205260409020541490565b610d945750610e24565b3063d045a0dc60c08301358360a0810135610db3610100830183612970565b610dc4610100890160e08a01612366565b610dd26101208a018a612970565b6040518963ffffffff1660e01b8152600401610df497969594939291906129e6565b5f604051808303818588803b158015610e0b575f80fd5b505af1158015610e1d573d5f803e3d5ffd5b5050505050505b600101610d2b565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015610e75573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610eba9190810190612a79565b6040517f8351eea70000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b610ef5611fa4565b604080518082019091525f8082526020820152610f138585856117f6565b915091505b935093915050565b610f2861135a565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b158015610fae575f80fd5b505af1158015610fc0573d5f803e3d5ffd5b5050505050565b333014611000576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097787878787878787610968565b61101761135a565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610b15565b61109261135a565b73ffffffffffffffffffffffffffffffffffffffff81166110e1576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016108ee565b6110ea8161163c565b50565b5f6020820180359060019083906111049086612464565b63ffffffff16815260208101919091526040015f20541492915050565b5f8061112c856118ee565b915081905083811015610f18576040517f71c4efed00000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016108ee565b63ffffffff81165f90815260016020526040812054806109f6576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff841660048201526024016108ee565b5f6111da6111d78787611924565b90565b90505f611205826111f36111ee8a8a611942565b611964565b61120060208d018d612464565b611999565b905060288611156112eb575f61124161122460608c0160408d01612ae2565b61123160208d018d612464565b8461123c8c8c6119e3565b611a2d565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112bc9086908d905f908790600401612afd565b5f604051808303815f87803b1580156112d3575f80fd5b505af11580156112e5573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61133160208d018d612464565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b31576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016108ee565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61145b856020013561141586611a5f565b61142260a0890189612970565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611ad292505050565b90935090505f8161146d576001611470565b60025b90506114906114826020880188612464565b826105e760808a018a612970565b60045490935073ffffffffffffffffffffffffffffffffffffffff168015611547576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906115069088908890600401612b45565b602060405180830381865afa158015611521573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115459190612b69565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff1681526020016115c089611175565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016115f5929190612b84565b6040805180830381865afa15801561160f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116339190612c55565b95945050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b8151811015611781576116e18282815181106116d0576116d0612907565b6020026020010151604001516117b1565b8181815181106116f3576116f3612907565b60200260200101516040015160035f84848151811061171457611714612907565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f84848151811061174b5761174b612907565b60200260200101516020015161ffff1661ffff1681526020019081526020015f2090816117789190612cb3565b506001016116b2565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610b159190612dcf565b600281015161ffff811660031461099257816040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b6117fe611fa4565b604080518082019091525f80825260208201525f8061183333604089013560608a013561182e60208c018c612464565b611b64565b915091505f806118438984611400565b909250905061186f61185860208b018b612464565b8383611869368d90038d018d612e76565b8b611bc1565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118bd908d018d612464565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b5f7f000000000000000000000000000000000000000000000000000000000000000061191a8184612ea6565b6109f69190612ede565b5f6119326020828486612860565b61193b91612f1a565b9392505050565b5f611951602860208486612860565b61195a91612f56565b60c01c9392505050565b5f6109f67f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff8416612ede565b5f6119db73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585611cd4565b509092915050565b60606119f28260288186612860565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606084848484604051602001611a469493929190612f9e565b6040516020818303038152906040529050949350505050565b5f80611a8b7f000000000000000000000000000000000000000000000000000000000000000084612ea6565b905067ffffffffffffffff8111156109f6576040517fe2ce9413000000000000000000000000000000000000000000000000000000008152600481018290526024016108ee565b8051606090151580611b33578484604051602001611b1f92919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b604051602081830303815290604052611b5a565b84843385604051602001611b4a949392919061301b565b6040516020818303038152906040525b9150935093915050565b5f80611b71858585611121565b9092509050611bb873ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016873085611d5a565b94509492505050565b611bc9611fa4565b5f611bd6845f0151611da6565b602085015190915015611bf057611bf08460200151611de6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff168152602001611c4d8c611175565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b8152600401611c88929190612b84565b60806040518083038185885af1158015611ca4573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611cc99190613073565b979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052611d5591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611f05565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052611da09186918216906323b872dd90608401611d0e565b50505050565b5f813414611de2576040517f9f7041200000000000000000000000000000000000000000000000000000000081523460048201526024016108ee565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7491906125cd565b905073ffffffffffffffffffffffffffffffffffffffff8116611ec3576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61099273ffffffffffffffffffffffffffffffffffffffff8216337f000000000000000000000000000000000000000000000000000000000000000085611d5a565b5f8060205f8451602086015f885af180611f24576040513d5f823e3d81fd5b50505f513d91508115611f3b578060011415611f55565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611da0576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016108ee565b60405180606001604052805f80191681526020015f67ffffffffffffffff168152602001611fe360405180604001604052805f81526020015f81525090565b905290565b5f60e08284031215611ff8575f80fd5b50919050565b5f6020828403121561200e575f80fd5b813567ffffffffffffffff811115612024575f80fd5b610b4d84828501611fe8565b5f5b8381101561204a578181015183820152602001612032565b50505f910152565b5f8151808452612069816020860160208601612030565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612132578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261211f87890182612052565b97505093820193908201906001016120d5565b50508751606088015250505060208501516080850152509050610b4d565b5f60608284031215611ff8575f80fd5b5f8083601f840112612170575f80fd5b50813567ffffffffffffffff811115612187575f80fd5b60208301915083602082850101111561219e575f80fd5b9250929050565b73ffffffffffffffffffffffffffffffffffffffff811681146110ea575f80fd5b5f805f805f805f60e0888a0312156121dc575f80fd5b6121e68989612150565b965060608801359550608088013567ffffffffffffffff80821115612209575f80fd5b6122158b838c01612160565b909750955060a08a0135915061222a826121a5565b90935060c0890135908082111561223f575f80fd5b5061224c8a828b01612160565b989b979a50959850939692959293505050565b803563ffffffff81168114612272575f80fd5b919050565b5f8060408385031215612288575f80fd5b6122918361225f565b946020939093013593505050565b80151581146110ea575f80fd5b5f80604083850312156122bd575f80fd5b823567ffffffffffffffff8111156122d3575f80fd5b6122df85828601611fe8565b92505060208301356122f08161229f565b809150509250929050565b8151815260208083015190820152604081016109f6565b803561ffff81168114612272575f80fd5b5f8060408385031215612334575f80fd5b61233d8361225f565b915061234b60208401612312565b90509250929050565b602081525f61193b6020830184612052565b5f60208284031215612376575f80fd5b813561193b816121a5565b5f805f8060a08587031215612394575f80fd5b61239e8686612150565b9350606085013567ffffffffffffffff8111156123b9575f80fd5b6123c587828801612160565b90945092505060808501356123d9816121a5565b939692955090935050565b5f8083601f8401126123f4575f80fd5b50813567ffffffffffffffff81111561240b575f80fd5b6020830191508360208260051b850101111561219e575f80fd5b5f8060208385031215612436575f80fd5b823567ffffffffffffffff81111561244c575f80fd5b612458858286016123e4565b90969095509350505050565b5f60208284031215612474575f80fd5b61193b8261225f565b5f805f8060608587031215612490575f80fd5b6124998561225f565b93506124a760208601612312565b9250604085013567ffffffffffffffff8111156124c2575f80fd5b6124ce87828801612160565b95989497509550505050565b5f805f83850360808112156124ed575f80fd5b843567ffffffffffffffff811115612503575f80fd5b61250f87828801611fe8565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612541575f80fd5b506020840191506060840135612556816121a5565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff6020850151166020830152604084015161259c604084018280518252602090810151910152565b5082516080830152602083015160a083015261193b565b5f606082840312156125c3575f80fd5b61193b8383612150565b5f602082840312156125dd575f80fd5b815161193b816121a5565b5f602082840312156125f8575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b600181811c9082168061264057607f821691505b602082108103611ff8577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b6040516060810167ffffffffffffffff8111828210171561269a5761269a6125ff565b60405290565b6040805190810167ffffffffffffffff8111828210171561269a5761269a6125ff565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561270a5761270a6125ff565b604052919050565b5f67ffffffffffffffff82111561272b5761272b6125ff565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612771576127716125ff565b8360051b60206127828183016126c3565b868152918501918181019036841115612799575f80fd5b865b84811015612854578035868111156127b1575f80fd5b880160603682900312156127c3575f80fd5b6127cb612677565b6127d48261225f565b81526127e1868301612312565b86820152604080830135898111156127f7575f80fd5b929092019136601f84011261280a575f80fd5b823561281d61281882612712565b6126c3565b8181523689838701011115612830575f80fd5b818986018a8301375f9181018901919091529082015284525091830191830161279b565b50979650505050505050565b5f808585111561286e575f80fd5b8386111561287a575f80fd5b5050820193919092039150565b5f8451612898818460208901612030565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610b4d6020830184866128ad565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112612966575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129a3575f80fd5b83018035915067ffffffffffffffff8211156129bd575f80fd5b60200191503681900382131561219e575f80fd5b67ffffffffffffffff811681146110ea575f80fd5b63ffffffff6129f48961225f565b168152602088013560208201525f6040890135612a10816129d1565b67ffffffffffffffff811660408401525087606083015260e06080830152612a3c60e0830187896128ad565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c0840152612a6b8185876128ad565b9a9950505050505050505050565b5f60208284031215612a89575f80fd5b815167ffffffffffffffff811115612a9f575f80fd5b8201601f81018413612aaf575f80fd5b8051612abd61281882612712565b818152856020838501011115612ad1575f80fd5b611633826020830160208601612030565b5f60208284031215612af2575f80fd5b813561193b816129d1565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f612b3b6080830184612052565b9695505050505050565b604081525f612b576040830185612052565b82810360208401526116338185612052565b5f60208284031215612b79575f80fd5b815161193b8161229f565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a06080840152612bb960e0840182612052565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a0850152612bf48282612052565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215612c37575f80fd5b612c3f6126a0565b9050815181526020820151602082015292915050565b5f60408284031215612c65575f80fd5b61193b8383612c27565b601f821115611d5557805f5260205f20601f840160051c81016020851015612c945750805b601f840160051c820191505b81811015610fc0575f8155600101612ca0565b815167ffffffffffffffff811115612ccd57612ccd6125ff565b612ce181612cdb845461262c565b84612c6f565b602080601f831160018114612d33575f8415612cfd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612dc7565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612d7f57888601518255948401946001909101908401612d60565b5085821015612dbb57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015612e68578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612e5481860183612052565b968901969450505090860190600101612df6565b509098975050505050505050565b5f60408284031215612e86575f80fd5b612e8e6126a0565b82358152602083013560208201528091505092915050565b5f82612ed9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109f6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b803560208310156109f6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015612f965780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161300b81602c850160208701612030565b91909101602c0195945050505050565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f8251613063816048850160208701612030565b9190910160480195945050505050565b5f60808284031215613083575f80fd5b61308b612677565b82518152602083015161309d816129d1565b60208201526130af8460408501612c27565b6040820152939250505056fea26469706673582212201d2eeb249efab86d32800173e736d788fc450154b978b7660829bc5ead288d1364736f6c6343000816003361016060405234801562000011575f80fd5b50604051620024be380380620024be833981016040819052620000349162000608565b60015f556001600160a01b03808416608052821660a081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa15801562000087573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000659565b6001600160a01b0390811660c052811660e081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa158015620000fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000122919062000659565b6001600160a01b0316610100816001600160a01b03168152505060a0516001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a1919062000659565b6001600160a01b03166101208190526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620001ea573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200021091906200067e565b63ffffffff1661014052608051610100516001600160a01b039081169116146200026c576101005160805160405163070bc55b60e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b6080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d1919062000659565b6001600160a01b031660c0516001600160a01b031614620003815760c0516080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000354919062000659565b60405163ba9d665f60e01b81526001600160a01b0392831660048201529116602482015260440162000263565b60e0516001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e69190620006a3565b620004145760e051604051637e0a8a5760e11b81526001600160a01b03909116600482015260240162000263565b60c05160405163095ea7b360e01b81526001600160a01b0385811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af115801562000465573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200048b9190620006a3565b506101005160405163095ea7b360e01b81526001600160a01b0383811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620004de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005049190620006a3565b50816001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000542573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005689190620006a3565b15620005e75760c05160405163095ea7b360e01b81526001600160a01b0384811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620005bf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005e59190620006a3565b505b505050620006c4565b6001600160a01b038116811462000605575f80fd5b50565b5f805f606084860312156200061b575f80fd5b83516200062881620005f0565b60208501519093506200063b81620005f0565b60408501519092506200064e81620005f0565b809150509250925092565b5f602082840312156200066a575f80fd5b81516200067781620005f0565b9392505050565b5f602082840312156200068f575f80fd5b815163ffffffff8116811462000677575f80fd5b5f60208284031215620006b4575f80fd5b8151801515811462000677575f80fd5b60805160a05160c05160e051610100516101205161014051611d246200079a5f395f81816102a5015261111301525f8181610200015261096b01525f818161027201528181610375015261119101525f818161018701528181610a1d0152610d4d01525f81816101540152818161031101526111b701525f818160e2015281816103be015281816108dd015281816109c601528181610da7015261113e01525f81816101ba015281816104560152818161055701528181610627015281816107230152818161104201526113290152611d245ff3fe6080604052600436106100c6575f3560e01c80636fad06f511610071578063a99ecc541161004c578063a99ecc5414610261578063aa72fe3f14610294578063d0a10260146102dc575f80fd5b80636fad06f5146101ef5780637e6e1e10146102225780639a6b198c1461024e575f80fd5b8063369caf83116100a1578063369caf8314610176578063411557d1146101a957806353174fa4146101dc575f80fd5b80630bfec755146100d157806319197ec61461012e5780631df34fa314610143575f80fd5b366100cd57005b5f80fd5b3480156100dc575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c36600461160e565b6102ef565b005b34801561014e575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b348015610181575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b4575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b6101416101ea36600461160e565b610353565b3480156101fa575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561022d575f80fd5b5061024161023c366004611661565b6103a9565b60405161012591906116c5565b61014161025c3660046116dc565b610843565b34801561026c575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561029f575f80fd5b506102c77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610125565b6101416102ea36600461177c565b610953565b6102f7610c50565b61033973ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d20565b61034e60015f55565b505050565b61035b610c50565b61039d73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d7a565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036105e0576040517fd905777e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063d905777e90602401602060405180830381865afa15801561049d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c19190611813565b905080841115610528576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716600482015260248101859052604481018290526064015b60405180910390fd5b6040517f4cdad506000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634cdad50690602401602060405180830381865afa1580156105b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d59190611813565b6040840152506107a8565b6040517f402d267d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063402d267d90602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611813565b9050808411156106f4576040517f79012fb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602481018590526044810182905260640161051f565b6040517fef8b30f7000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef8b30f790602401602060405180830381865afa15801561077d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a19190611813565b6040840152505b6040517f3b6f743b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690633b6f743b906107fc9085905f9060040161190a565b6040805180830381865afa158015610816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a919061197a565b95945050505050565b33301461087e576040517fa19dbf0000000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b5f808380602001905181019061089491906119e9565b91509150803410156108db576040517f7cb769dc0000000000000000000000000000000000000000000000000000000081526004810182905234602482015260440161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361093f5761093a85848432610d20565b61094b565b61094b85848432610d7a565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146109c4576040517f91ac5e4f00000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015610a6c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15610abb576040517f84fb3f0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816600482015260240161051f565b5f610ac68686610dcd565b90505f610ad38787610dee565b90505f610ae08888610dfd565b6040517f9a6b198c0000000000000000000000000000000000000000000000000000000081529091503090639a6b198c903490610b27908e90889087908990600401611ad0565b5f604051808303818588803b158015610b3e575f80fd5b505af193505050508015610b50575060015b610c19573d808015610b7d576040519150601f19603f3d011682016040523d82523d5f602084013e610b82565b606091505b507f7cb769dc00000000000000000000000000000000000000000000000000000000610bad82611b15565b7fffffffff000000000000000000000000000000000000000000000000000000001603610bdc57805181602001fd5b610be98b8a8a8632610e47565b6040518a907ffe509803c09416b28ff3d8f690c8b0c61462a892c46d5430c8fb20abe472daf0905f90a250610c44565b60405189907f27b5aea9f5736c02241d8a0272e9ec988ea44cf85c4b4760329431aa19678394905f90a25b50505050505050505050565b60025f5403610c8b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052610d1a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610f6c565b50505050565b5f610d2b858561100b565b9050610d3b8184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5050505050565b5f610d8585856112eb565b9050610d958184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5f610ddc604c602c8486611b64565b610de591611b8b565b90505b92915050565b5f610ddc602c600c8486611b64565b6060610e0c82604c8186611b64565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b610e8c6040518060e001604052805f63ffffffff1681526020015f80191681526020015f81526020015f81526020016060815260200160608152602001606081525090565b610e96858561136d565b63ffffffff168152610ea88585610dcd565b602080830191909152604080830185905280518082018252348082525f9382019390935290517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89169263c7c7f5b3929091610f219186918890600401611bc7565b60c06040518083038185885af1158015610f3d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f629190611c16565b5050505050505050565b5f8060205f8451602086015f885af180610f8b576040513d5f823e3d81fd5b50505f513d91508115610fa2578060011415610fbc565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610d1a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161051f565b6040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018290523060248201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636e553f65906044015b6020604051808303815f875af115801561109e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de59190611813565b80821015611106576040517f71c4efed000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161051f565b5050565b815163ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116911603611242575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146111b5577f00000000000000000000000000000000000000000000000000000000000000006111d7565b7f00000000000000000000000000000000000000000000000000000000000000005b90503415611211576040517f7578d2bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1a61121f846020015190565b604085015173ffffffffffffffffffffffffffffffffffffffff8416919061138f565b604080518082018252348082525f602083015291517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169263c7c7f5b39290916112aa9187918790600401611bc7565b60c06040518083038185885af11580156112c6573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d739190611c16565b6040517fba08765200000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ba08765290606401611082565b5f61137c600c60088486611b64565b61138591611ca6565b60e01c9392505050565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261034e91859182169063a9059cbb90606401610cd3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff8111828210171561141d5761141d6113cd565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561146a5761146a6113cd565b604052919050565b63ffffffff81168114611483575f80fd5b50565b803561149181611472565b919050565b5f67ffffffffffffffff8211156114af576114af6113cd565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126114ea575f80fd5b81356114fd6114f882611496565b611423565b818152846020838601011115611511575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0828403121561153d575f80fd5b6115456113fa565b905061155082611486565b8152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff8082111561158a575f80fd5b611596858386016114db565b608084015260a08401359150808211156115ae575f80fd5b6115ba858386016114db565b60a084015260c08401359150808211156115d2575f80fd5b506115df848285016114db565b60c08301525092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611491575f80fd5b5f805f60608486031215611620575f80fd5b83359250602084013567ffffffffffffffff81111561163d575f80fd5b6116498682870161152d565b925050611658604085016115eb565b90509250925092565b5f805f8060808587031215611674575f80fd5b61167d856115eb565b935061168b602086016115eb565b925060408501359150606085013567ffffffffffffffff8111156116ad575f80fd5b6116b98782880161152d565b91505092959194509250565b815181526020808301519082015260408101610de8565b5f805f80608085870312156116ef575f80fd5b6116f8856115eb565b935060208501359250604085013567ffffffffffffffff81111561171a575f80fd5b611726878288016114db565b949793965093946060013593505050565b5f8083601f840112611747575f80fd5b50813567ffffffffffffffff81111561175e575f80fd5b602083019150836020828501011115611775575f80fd5b9250929050565b5f805f805f805f60a0888a031215611792575f80fd5b61179b886115eb565b965060208801359550604088013567ffffffffffffffff808211156117be575f80fd5b6117ca8b838c01611737565b90975095508591506117de60608b016115eb565b945060808a01359150808211156117f3575f80fd5b506118008a828b01611737565b989b979a50959850939692959293505050565b5f60208284031215611823575f80fd5b5051919050565b5f5b8381101561184457818101518382015260200161182c565b50505f910152565b5f815180845261186381602086016020860161182a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526118d760e085018261184c565b905060a083015184820360a08601526118f0828261184c565b91505060c083015184820360c086015261083a828261184c565b604081525f61191c6040830185611895565b905082151560208301529392505050565b5f6040828403121561193d575f80fd5b6040516040810181811067ffffffffffffffff82111715611960576119606113cd565b604052825181526020928301519281019290925250919050565b5f6040828403121561198a575f80fd5b610de5838361192d565b805161149181611472565b5f82601f8301126119ae575f80fd5b81516119bc6114f882611496565b8181528460208386010111156119d0575f80fd5b6119e182602083016020870161182a565b949350505050565b5f80604083850312156119fa575f80fd5b825167ffffffffffffffff80821115611a11575f80fd5b9084019060e08287031215611a24575f80fd5b611a2c6113fa565b611a3583611994565b8152602083015160208201526040830151604082015260608301516060820152608083015182811115611a66575f80fd5b611a728882860161199f565b60808301525060a083015182811115611a89575f80fd5b611a958882860161199f565b60a08301525060c083015182811115611aac575f80fd5b611ab88882860161199f565b60c08301525060209590950151949694955050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f611b04608083018561184c565b905082606083015295945050505050565b5f815160208301517fffffffff0000000000000000000000000000000000000000000000000000000080821693506004831015611b5c5780818460040360031b1b83161693505b505050919050565b5f8085851115611b72575f80fd5b83861115611b7e575f80fd5b5050820193919092039150565b80356020831015610de8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b608081525f611bd96080830186611895565b9050611bf2602083018580518252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff83166060830152949350505050565b5f8082840360c0811215611c28575f80fd5b6080811215611c35575f80fd5b506040516060810167ffffffffffffffff8282108183111715611c5a57611c5a6113cd565b8160405285518352602086015191508082168214611c76575f80fd5b506020820152611c89856040860161192d565b60408201529150611c9d846080850161192d565b90509250929050565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611ce65780818660040360031b1b83161692505b50509291505056fea26469706673582212203c210af0c85b10469f135dd49d1274fa8e04b8bee0c2069213c4acfe2a3036b564736f6c63430008160033608060405234801561000f575f80fd5b50610a8c8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e5c5e9a31461002d575b5f80fd5b61004061003b3660046106f8565b610057565b60405161004e9291906107cf565b60405180910390f35b606080610064848461006f565b915091509250929050565b60608060028310156100b4576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f6100c260028286886107fc565b6100cb91610823565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161029357805f5b86831015610220575f61011460018501858a8c6107fc565b61011d9161086b565b60f81c90505f81900361015e576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016100ab565b8160ff165f03610170578091506101ac565b8160ff168160ff16146101ac57365f61018b86868c8e6107fc565b9150915061019c89898685856102aa565b9099509750859450919250829150505b60018401935f906101c290600301868b8d6107fc565b6101cb91610823565b60f01c90505f81900361020d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016100ab565b8060020161ffff168501945050506100fc565b82871461025c576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016100ab565b600287111561028c57365f61027385858b8d6107fc565b9150915061028488888585856102aa565b909850965050505b50506102a1565b61029e82878761041d565b93505b50509250929050565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161034457865115610307578684846040516020016102f3939291906108b1565b60405160208183030381529060405261033d565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650610412565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016103db5785511561039e5785848460405160200161038a939291906108b1565b6040516020818303038152906040526103d4565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550610412565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016100ab565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff8516016105425760228214610484576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6104a46104966022600286886107fc565b61049f916108d7565b61069f565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050610698565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff8516016106605760428211158061057d5750606282115b156105b4576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c66104966022600286886107fc565b90505f6105da6104966042602287896107fc565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe850161060d866042818a6107fc565b610616916108d7565b60405160086020938403029190911c9250610647916001916011918391889183916031916002918b918b9101610914565b6040516020818303038152906040529350505050610698565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016100ab565b9392505050565b5f6fffffffffffffffffffffffffffffffff8211156106f4576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016100ab565b5090565b5f8060208385031215610709575f80fd5b823567ffffffffffffffff80821115610720575f80fd5b818501915085601f830112610733575f80fd5b813581811115610741575f80fd5b866020828501011115610752575f80fd5b60209290920196919550909350505050565b5f5b8381101561077e578181015183820152602001610766565b50505f910152565b5f815180845261079d816020860160208601610764565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f6107e16040830185610786565b82810360208401526107f38185610786565b95945050505050565b5f808585111561080a575f80fd5b83861115610816575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156108635780818660020360031b1b83161692505b505092915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156108635760019490940360031b84901b1690921692915050565b5f84516108c2818460208901610764565b8201838582375f930192835250909392505050565b8035602083101561090e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b165b92915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008b60f01b166001840152808a60f81b1660038401527fffffffffffffffffffffffffffffffff000000000000000000000000000000008960801b166004840152808860f81b166014840152506109dc601583018760f01b7fffff000000000000000000000000000000000000000000000000000000000000169052565b610a0d601783018660f81b7fff00000000000000000000000000000000000000000000000000000000000000169052565b610a3e601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea26469706673582212204c5336eb5e4cfed89d8f0ececad030c194802d04a3053cab299816b06066820764736f6c6343000816003375736572412073686f756c64206861766520726563656976656420726566756e64206f6e20457468657265756d4e6f207368617265732073686f756c64206265206d696e7465642064756520746f20726566756e64a2646970667358221220c095692ed8490b927e8d9378756294312aceddfc70e44a28fe131092593298c364736f6c63430008160033608060405234801561000f575f80fd5b50610a8c8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e5c5e9a31461002d575b5f80fd5b61004061003b3660046106f8565b610057565b60405161004e9291906107cf565b60405180910390f35b606080610064848461006f565b915091509250929050565b60608060028310156100b4576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f6100c260028286886107fc565b6100cb91610823565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161029357805f5b86831015610220575f61011460018501858a8c6107fc565b61011d9161086b565b60f81c90505f81900361015e576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016100ab565b8160ff165f03610170578091506101ac565b8160ff168160ff16146101ac57365f61018b86868c8e6107fc565b9150915061019c89898685856102aa565b9099509750859450919250829150505b60018401935f906101c290600301868b8d6107fc565b6101cb91610823565b60f01c90505f81900361020d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016100ab565b8060020161ffff168501945050506100fc565b82871461025c576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016100ab565b600287111561028c57365f61027385858b8d6107fc565b9150915061028488888585856102aa565b909850965050505b50506102a1565b61029e82878761041d565b93505b50509250929050565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161034457865115610307578684846040516020016102f3939291906108b1565b60405160208183030381529060405261033d565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650610412565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016103db5785511561039e5785848460405160200161038a939291906108b1565b6040516020818303038152906040526103d4565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550610412565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016100ab565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff8516016105425760228214610484576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6104a46104966022600286886107fc565b61049f916108d7565b61069f565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050610698565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff8516016106605760428211158061057d5750606282115b156105b4576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c66104966022600286886107fc565b90505f6105da6104966042602287896107fc565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe850161060d866042818a6107fc565b610616916108d7565b60405160086020938403029190911c9250610647916001916011918391889183916031916002918b918b9101610914565b6040516020818303038152906040529350505050610698565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016100ab565b9392505050565b5f6fffffffffffffffffffffffffffffffff8211156106f4576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016100ab565b5090565b5f8060208385031215610709575f80fd5b823567ffffffffffffffff80821115610720575f80fd5b818501915085601f830112610733575f80fd5b813581811115610741575f80fd5b866020828501011115610752575f80fd5b60209290920196919550909350505050565b5f5b8381101561077e578181015183820152602001610766565b50505f910152565b5f815180845261079d816020860160208601610764565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f6107e16040830185610786565b82810360208401526107f38185610786565b95945050505050565b5f808585111561080a575f80fd5b83861115610816575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156108635780818660020360031b1b83161692505b505092915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156108635760019490940360031b84901b1690921692915050565b5f84516108c2818460208901610764565b8201838582375f930192835250909392505050565b8035602083101561090e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b165b92915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008b60f01b166001840152808a60f81b1660038401527fffffffffffffffffffffffffffffffff000000000000000000000000000000008960801b166004840152808860f81b166014840152506109dc601583018760f01b7fffff000000000000000000000000000000000000000000000000000000000000169052565b610a0d601783018660f81b7fff00000000000000000000000000000000000000000000000000000000000000169052565b610a3e601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea26469706673582212204c5336eb5e4cfed89d8f0ececad030c194802d04a3053cab299816b06066820764736f6c63430008160033",
+ "sourceMap": "941:9637:138:-:0;;;;;3126:44:90;;;3166:4;-1:-1:-1;;3126:44:90;;;;;;;;1065:26:101;;;;;;;;;;;738:20:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;710:48:73;;;-1:-1:-1;;;;;710:48:73;;;;;;-1:-1:-1;;;;;;710:48:73;;;;;;;;;4586:43:74;;;-1:-1:-1;;;;;;4586:43:74;4620:9;4586:43;;;987:21:135;;;-1:-1:-1;;987:21:135;1007:1;987:21;;;1493:17;;;;;;;;;;;;-1:-1:-1;;;1493:17:135;;;;;;:8;:17::i;:::-;1470:40;;;-1:-1:-1;;;;;;1470:40:135;-1:-1:-1;;;;;1470:40:135;;;;;;;;;;1539:17;;;;;;;;;;;;-1:-1:-1;;;1539:17:135;;;;;;:8;:17::i;:::-;1516:40;;;-1:-1:-1;;;;;;1516:40:135;-1:-1:-1;;;;;1516:40:135;;;;;;;;;;1624:23;;;;;;;;;;;;-1:-1:-1;;;1624:23:135;;;;;;:8;:23::i;:::-;1595:52;;;-1:-1:-1;;;;;;1595:52:135;-1:-1:-1;;;;;1595:52:135;;;;;;;;;;1691:66;1746:7;-1:-1:-1;1691:27:135;1370:24:62;;;-1:-1:-1;;;1370:24:62;;;2822:51:139;1370:24:62;;;;;;;;;2889:11:139;;;;1370:24:62;;;;1294:107;1691:27:135;:54;:66;:54;:66::i;:::-;1653:104;;;;;;:::i;:::-;;941:9637:138;;;;;;;;;;;;20760:125:91;20824:12;20858:20;20873:4;20858:14;:20::i;:::-;-1:-1:-1;20848:30:91;20760:125;-1:-1:-1;;20760:125:91:o;2092:357:62:-;2254:12;2235:8;808:1;1059:20;2235:8;1077:1;1059:17;:20::i;:::-;:30;;;1055:82;;1116:20;:8;1134:1;1116:17;:20::i;:::-;1098:39;;-1:-1:-1;;;1098:39:62;;3085:6:139;3073:19;;;1098:39:62;;;3055:38:139;3028:18;;1098:39:62;;;;;;;;1055:82;2278:19:::1;2300:51;2338:4:::0;2344:6;2300:37:::1;:51::i;:::-;2278:73:::0;-1:-1:-1;2368:74:62::1;2386:8:::0;306:1:13::1;2278:73:62::0;2368:17:::1;:74::i;:::-;2361:81:::0;2092:357;-1:-1:-1;;;;;;2092:357:62:o;20479:242:91:-;20549:12;20563:18;20641:4;20624:22;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;20624:22:91;;;;;;;20614:33;;20624:22;20614:33;;;;-1:-1:-1;;;;;;20665:19:91;;;;;3799:25:139;;;20614:33:91;-1:-1:-1;20665:7:91;;;;3772:18:139;;20665:19:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20694:20;;-1:-1:-1;;;20694:20:91;;20658:26;;-1:-1:-1;20694:8:91;;;;:20;;20658:26;;20709:4;;20694:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20479:242;;;:::o;12935:305:107:-;13013:6;13056:10;:6;13065:1;13056:10;:::i;:::-;13039:6;:13;:27;;13031:60;;;;-1:-1:-1;;;13031:60:107;;5092:2:139;13031:60:107;;;5074:21:139;5131:2;5111:18;;;5104:30;5170:22;5150:18;;;5143:50;5210:18;;13031:60:107;4890:344:139;13031:60:107;-1:-1:-1;13168:29:107;;;13184:3;13168:29;13162:36;12935:305;;;;;:::o;3460:191:13:-;3544:12;-1:-1:-1;;;;;3575:11:13;;;:69;;3614:30;;;-1:-1:-1;;;;;;5418:3:139;5455:16;;;5451:25;;3614:30:13;;;5439:38:139;5511:16;;;5507:25;5493:12;;;5486:47;5549:12;3614:30:13;;;;;;;;;;;;3575:69;;;3589:22;;-1:-1:-1;;;;;;5747:3:139;5717:16;;;5713:47;3589:22:13;;;5701:60:139;5777:12;;3589:22:13;;;;;;;;;;;;3575:69;3568:76;3460:191;-1:-1:-1;;;3460:191:13:o;6602:435:62:-;6766:12;6747:8;808:1;1059:20;6747:8;1077:1;1059:17;:20::i;:::-;:30;;;1055:82;;1116:20;:8;1134:1;1116:17;:20::i;1055:82::-;6843:8:::1;250:1:13;6912:25:62;:7;:14;:23;;;:25;;:::i;:::-;:29;::::0;6940:1:::1;6912:29;:::i;:::-;6980:11;7009:7;6809:221;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6790:240;;6602:435:::0;;;;;;:::o;16296:213:131:-;16352:6;16382:16;16374:24;;16370:103;;;16421:41;;-1:-1:-1;;;16421:41:131;;16452:2;16421:41;;;6949:36:139;7001:18;;;6994:34;;;6922:18;;16421:41:131;6768:266:139;16370:103:131;-1:-1:-1;16496:5:131;16296:213::o;941:9637:138:-;;;;;;;;:::o;14:127:139:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:380;225:1;221:12;;;;268;;;289:61;;343:4;335:6;331:17;321:27;;289:61;396:2;388:6;385:14;365:18;362:38;359:161;;442:10;437:3;433:20;430:1;423:31;477:4;474:1;467:15;505:4;502:1;495:15;359:161;;146:380;;;:::o;656:517::-;757:2;752:3;749:11;746:421;;;793:5;790:1;783:16;837:4;834:1;824:18;907:2;895:10;891:19;888:1;884:27;878:4;874:38;943:4;931:10;928:20;925:47;;;-1:-1:-1;966:4:139;925:47;1021:2;1016:3;1012:12;1009:1;1005:20;999:4;995:31;985:41;;1076:81;1094:2;1087:5;1084:13;1076:81;;;1153:1;1139:16;;1120:1;1109:13;1076:81;;;1080:3;;746:421;656:517;;;:::o;1349:1341::-;1467:10;;-1:-1:-1;;;;;1489:30:139;;1486:56;;;1522:18;;:::i;:::-;1551:96;1640:6;1600:38;1632:4;1626:11;1600:38;:::i;:::-;1594:4;1551:96;:::i;:::-;1702:4;;1759:2;1748:14;;1776:1;1771:662;;;;2477:1;2494:6;2491:89;;;-1:-1:-1;2546:19:139;;;2540:26;2491:89;-1:-1:-1;;1306:1:139;1302:11;;;1298:24;1294:29;1284:40;1330:1;1326:11;;;1281:57;2593:81;;1741:943;;1771:662;603:1;596:14;;;640:4;627:18;;-1:-1:-1;;1807:20:139;;;1924:236;1938:7;1935:1;1932:14;1924:236;;;2027:19;;;2021:26;2006:42;;2119:27;;;;2087:1;2075:14;;;;1954:19;;1924:236;;;1928:3;2188:6;2179:7;2176:19;2173:201;;;2249:19;;;2243:26;-1:-1:-1;;2332:1:139;2328:14;;;2344:3;2324:24;2320:37;2316:42;2301:58;2286:74;;2173:201;;;2420:1;2411:6;2408:1;2404:14;2400:22;2394:4;2387:36;1741:943;;;;;1349:1341;;:::o;3104:250::-;3189:1;3199:113;3213:6;3210:1;3207:13;3199:113;;;3289:11;;;3283:18;3270:11;;;3263:39;3235:2;3228:10;3199:113;;;-1:-1:-1;;3346:1:139;3328:16;;3321:27;3104:250::o;3359:289::-;3490:3;3528:6;3522:13;3544:66;3603:6;3598:3;3591:4;3583:6;3579:17;3544:66;:::i;:::-;3626:16;;;;;3359:289;-1:-1:-1;;3359:289:139:o;3835:290::-;3905:6;3958:2;3946:9;3937:7;3933:23;3929:32;3926:52;;;3974:1;3971;3964:12;3926:52;4000:16;;-1:-1:-1;;;;;4045:31:139;;4035:42;;4025:70;;4091:1;4088;4081:12;4130:493;4336:1;4332;4327:3;4323:11;4319:19;4311:6;4307:32;4296:9;4289:51;4376:2;4371;4360:9;4356:18;4349:30;4270:4;4408:6;4402:13;4451:6;4446:2;4435:9;4431:18;4424:34;4467:79;4539:6;4534:2;4523:9;4519:18;4514:2;4506:6;4502:15;4467:79;:::i;:::-;4607:2;4586:15;-1:-1:-1;;4582:29:139;4567:45;;;;4614:2;4563:54;;4130:493;-1:-1:-1;;;4130:493:139:o;4628:127::-;4689:10;4684:3;4680:20;4677:1;4670:31;4720:4;4717:1;4710:15;4744:4;4741:1;4734:15;4760:125;4825:9;;;4846:10;;;4843:36;;;4859:18;;:::i;5800:168::-;5867:6;5893:10;;;5905;;;5889:27;;5928:11;;;5925:37;;;5942:18;;:::i;5973:790::-;6222:3;6260:6;6254:13;6276:66;6335:6;6330:3;6323:4;6315:6;6311:17;6276:66;:::i;:::-;6399:13;6403:3;6439:16;;;6435:25;;6364:16;;;6421:40;;;-1:-1:-1;;;;;;6518:3:139;6496:16;;;6492:38;6488:1;6477:13;;6470:61;6566:16;;;6562:25;6558:1;6547:13;;6540:48;6613:13;;6635:78;6613:13;6700:1;6689:13;;6682:4;6670:17;;6635:78;:::i;:::-;6733:20;6755:1;6729:28;;5973:790;-1:-1:-1;;;;;;;5973:790:139:o;6768:266::-;941:9637:138;;;;;;",
+ "linkReferences": {}
+ },
+ "deployedBytecode": {
+ "object": "0x60806040526004361062000572575f3560e01c806367d53a0011620002d6578063ae6ce400116200018e578063d6d6249711620000e2578063f5cf63901162000092578063f93e1d611162000076578063f93e1d611462000f84578063fa7626d41462000fd2578063faed6c581462000fed575f80fd5b8063f5cf63901462000f54578063f5e4efb51462000f6b575f80fd5b8063defd9da611620000c6578063defd9da61462000ec5578063e20c9f711462000f26578063ec53eaa01462000f3d575f80fd5b8063d6d624971462000e80578063deb22e9a1462000ea4575f80fd5b8063b76bada5116200013e578063ba414fa61162000122578063ba414fa61462000e2e578063baead19c1462000e45578063cb1a295f1462000e5f575f80fd5b8063b76bada51462000dcb578063b954fdf61462000de1575f80fd5b8063b1dcf5c81162000172578063b1dcf5c814620009ab578063b5508aa91462000d90578063b752b72a1462000da7575f80fd5b8063ae6ce4001462000d55578063b0464fdc1462000d79575f80fd5b806385226c811162000246578063997cff1b11620001f65780639e0e8c5511620001da5780639e0e8c551462000d105780639fe4ee911462000d27578063a29c89841462000d3e575f80fd5b8063997cff1b1462000cd557806399ce8e8d1462000cf9575f80fd5b806390a606f5116200022a57806390a606f51462000c31578063916a17c61462000c525780639751ca861462000c78575f80fd5b806385226c811462000bee5780638c5e9f741462000c14575f80fd5b80637982cf4211620002a25780637f2e593611620002865780637f2e59361462000ba957806382411c77146200070c578063834bd1591462000bca575f80fd5b80637982cf421462000b645780637a8b5d981462000b88575f80fd5b806367d53a001462000acb578063699cbade1462000aec5780636e1775e31462000b0a578063703ca2541462000b40575f80fd5b80632ade3880116200042a578063536e8d3a116200039a5780635fe1413f116200034a57806365449eb0116200032e57806365449eb01462000a6057806366d9a9a01462000a84578063677d41751462000aaa575f80fd5b80635fe1413f1462000a25578063601978891462000a3c575f80fd5b80635e42c9b2116200037e5780635e42c9b214620009c35780635ea0fefe14620009d95780635f85148e1462000a0e575f80fd5b8063536e8d3a146200098a578063556257df14620009ab575f80fd5b80633e5e3c2311620003f657806345f81ff411620003da57806345f81ff41462000903578063518e8ab0146200091a57806351aa318b1462000972575f80fd5b80633e5e3c2314620008d55780633f7286f414620008ec575f80fd5b80632ade38801462000856578063375591d7146200087c5780633bbd6a94146200089d5780633cae7b8a14620008b4575f80fd5b80631015594a11620004e25780631ed7831c11620004925780632113ce6211620004765780632113ce6214620007d057806325996dae146200081c5780632a35d2501462000832575f80fd5b80631ed7831c14620007945780631f3280c514620007ba575f80fd5b80631766f5a411620004c65780631766f5a4146200070c578063178928d3146200074a5780631cc465251462000770575f80fd5b80631015594a14620006c857806314525bce14620006df575f80fd5b80630a69faa9116200053e5780630afba86811620005225780630afba868146200064b5780630c003ff714620006765780630fcaecfe146200069c575f80fd5b80630a69faa9146200061d5780630a9254e41462000634575f80fd5b806301acc0e2146200057e578063031c346314620005a4578063090852b614620005bb57806309c885c914620005df575f80fd5b366200057a57005b5f80fd5b3480156200058a575f80fd5b50620005a26200059c3660046200b43b565b62001011565b005b348015620005b0575f80fd5b50620005a2620012ed565b348015620005c7575f80fd5b50620005a2620005d93660046200b46b565b62001cb4565b348015620005eb575f80fd5b50603d5462000600906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620005a26200062e3660046200b5f7565b62001ce0565b34801562000640575f80fd5b50620005a262001e37565b34801562000657575f80fd5b506200066261271081565b60405161ffff909116815260200162000614565b34801562000682575f80fd5b50603354620006009061010090046001600160a01b031681565b348015620006a8575f80fd5b50620006b2606581565b60405163ffffffff909116815260200162000614565b348015620006d4575f80fd5b50620005a262001e43565b348015620006eb575f80fd5b50620006fd68056bc75e2d6310000081565b60405190815260200162000614565b34801562000718575f80fd5b5062000729670de0b6b3a764000081565b6040516effffffffffffffffffffffffffffff909116815260200162000614565b34801562000756575f80fd5b50620007616200201c565b6040516200061491906200b6da565b3480156200077c575f80fd5b50620005a26200078e3660046200b711565b620020b0565b348015620007a0575f80fd5b50620007ab62002106565b6040516200061491906200b785565b348015620007c6575f80fd5b50620006b2600381565b348015620007dc575f80fd5b50602454620007fa906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff909116815260200162000614565b34801562000828575f80fd5b50620006b2600181565b3480156200083e575f80fd5b50620007ab620008503660046200b799565b62002168565b34801562000862575f80fd5b506200086d62002281565b6040516200061491906200b85d565b34801562000888575f80fd5b5060345462000600906001600160a01b031681565b620005a2620008ae3660046200b8fc565b620023c9565b348015620008c0575f80fd5b5060385462000600906001600160a01b031681565b348015620008e1575f80fd5b50620007ab62002484565b348015620008f8575f80fd5b50620007ab620024e4565b3480156200090f575f80fd5b50620005a262002544565b34801562000926575f80fd5b506200093e620009383660046200b9b0565b6200288e565b6040805161ffff90941684526fffffffffffffffffffffffffffffffff928316602085015291169082015260600162000614565b3480156200097e575f80fd5b50620006b26201117181565b34801562000996575f80fd5b5060355462000600906001600160a01b031681565b348015620009b7575f80fd5b50620006fd620186a081565b348015620009cf575f80fd5b50620006b2600281565b348015620009e5575f80fd5b50620009fd620009f73660046200ba03565b620028aa565b604051901515815260200162000614565b34801562000a1a575f80fd5b50620005a26200290a565b34801562000a31575f80fd5b50620005a262002d8f565b34801562000a48575f80fd5b50620005a262000a5a3660046200ba30565b620033b0565b34801562000a6c575f80fd5b50620005a262000a7e3660046200bb3a565b6200415e565b34801562000a90575f80fd5b5062000a9b6200424f565b6040516200061491906200bc59565b34801562000ab6575f80fd5b50603e5462000600906001600160a01b031681565b34801562000ad7575f80fd5b5060375462000600906001600160a01b031681565b34801562000af8575f80fd5b50620007fa68056bc75e2d6310000081565b34801562000b16575f80fd5b5062000b2e62000b283660046200bcf4565b620043d4565b6040516200061494939291906200bd69565b34801562000b4c575f80fd5b50620005a262000b5e3660046200bd98565b620043f6565b34801562000b70575f80fd5b506200076162000b823660046200ba03565b620045c7565b34801562000b94575f80fd5b5060395462000600906001600160a01b031681565b34801562000bb5575f80fd5b5060365462000600906001600160a01b031681565b34801562000bd6575f80fd5b50620005a262000be83660046200bdd6565b620046dc565b34801562000bfa575f80fd5b5062000c0562004ced565b6040516200061491906200be4f565b34801562000c20575f80fd5b50620006fd670de0b6b3a764000081565b34801562000c3d575f80fd5b50603a5462000600906001600160a01b031681565b34801562000c5e575f80fd5b5062000c6962004dc2565b6040516200061491906200be63565b34801562000c84575f80fd5b5062000c9c62000c963660046200b9b0565b62004ebc565b604080516fffffffffffffffffffffffffffffffff948516815263ffffffff909316602084015292169181019190915260600162000614565b34801562000ce1575f80fd5b50620005a262000cf33660046200bcf4565b62004ecb565b34801562000d05575f80fd5b50620005a262004f45565b34801562000d1c575f80fd5b50620005a262005247565b34801562000d33575f80fd5b50620005a262005477565b620005a262000d4f3660046200bef4565b62005c41565b34801562000d61575f80fd5b50620005a262000d733660046200b43b565b62005cc8565b34801562000d85575f80fd5b5062000c6962005d7d565b34801562000d9c575f80fd5b5062000c0562005e77565b34801562000db3575f80fd5b50620005a262000dc53660046200bf7f565b62005f4c565b34801562000dd7575f80fd5b50620006fd600381565b34801562000ded575f80fd5b5062000e0562000dff3660046200b9b0565b62005f69565b604080516fffffffffffffffffffffffffffffffff909316835260208301919091520162000614565b34801562000e3a575f80fd5b50620009fd62005f83565b34801562000e51575f80fd5b50620006fd64e8d4a5100081565b34801562000e6b575f80fd5b50603c5462000600906001600160a01b031681565b34801562000e8c575f80fd5b50620005a262000e9e3660046200bf9e565b62006057565b34801562000eb0575f80fd5b50603b5462000600906001600160a01b031681565b34801562000ed1575f80fd5b50620005a262000ee33660046200c016565b602480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b34801562000f32575f80fd5b50620007ab620082a8565b620005a262000f4e3660046200ba30565b62008308565b34801562000f60575f80fd5b50620005a26200843b565b34801562000f77575f80fd5b50620006fd630ee6b28081565b34801562000f90575f80fd5b5062000fa862000fa23660046200b9b0565b620085e3565b604080516fffffffffffffffffffffffffffffffff93841681529290911660208301520162000614565b34801562000fde575f80fd5b50601f54620009fd9060ff1681565b34801562000ff9575f80fd5b50620005a26200100b3660046200c034565b620085f1565b603354737109709ecfa91a80626ff3989d68f67f5b1dd12d90634c63e562906001600160a01b0384811661010090920416148015906200105f57506034546001600160a01b03848116911614155b6040518263ffffffff1660e01b815260040162001080911515815260200190565b5f6040518083038186803b15801562001097575f80fd5b505afa158015620010aa573d5f803e3d5ffd5b5050604080516001600160a01b03851660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fb3f0d0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506200116e91906004016200b6da565b5f604051808303815f87803b15801562001186575f80fd5b505af115801562001199573d5f803e3d5ffd5b5050603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015f604051808303815f87803b1580156200120d575f80fd5b505af115801562001220573d5f803e3d5ffd5b5050603a546001600160a01b0316915063d0a102609050670de0b6b3a7640000836200124b6200867c565b603e5460405160e086901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039384166004820152602481019290925260a060448301525f60a483018190529216606482015260c0608482015260c481019190915260e4015f604051808303818588803b158015620012d2575f80fd5b505af1158015620012e5573d5f803e3d5ffd5b505050505050565b5f620012f86200867c565b603354603a546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015292935061010090910416906340c10f19906044015f604051808303815f87803b1580156200136e575f80fd5b505af115801562001381573d5f803e3d5ffd5b50506040805160e08101808352603a547faa72fe3f0000000000000000000000000000000000000000000000000000000090915291515f945090925082916001600160a01b03169063aa72fe3f9060e4808501916020918187030181865afa158015620013f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200141691906200c0a2565b63ffffffff168152603b546020909101906001600160a01b03168152670de0b6b3a764000060208083018290525f60408085018290528051808401825282815260608601528051808401825282815260808601528051928301905280825260a090930152603b5492935090916200149d91600191859185916001600160a01b03166200871e565b6033546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562001530575f80fd5b505af115801562001543573d5f803e3d5ffd5b5050603954603a54604051670de0b6b3a764000081526001600160a01b039283169450911691507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36039546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562001623575f80fd5b505af115801562001636573d5f803e3d5ffd5b5050603a54604051670de0b6b3a764000081526001600160a01b0390911692505f91507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36039546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562001712575f80fd5b505af115801562001725573d5f803e3d5ffd5b5050603a5460408051670de0b6b3a764000080825260208201526001600160a01b0390921693508392507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3603a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562001806575f80fd5b505af115801562001819573d5f803e3d5ffd5b50506040518592507f27b5aea9f5736c02241d8a0272e9ec988ea44cf85c4b4760329431aa1967839491505f90a262001962603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200189d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620018c391906200c0c0565b603354603a546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416906370a08231906024015b602060405180830381865afa1580156200192d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200195391906200c0c0565b670de0b6b3a764000062008785565b603954604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051620019f3926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015620019c6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620019ec91906200c0c0565b5f62008809565b603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b15801562001a63575f80fd5b505af115801562001a76573d5f803e3d5ffd5b5050603a54603354603e546040517fd0a102600000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d0a10260945062001ad993610100909304831692899288929116906004016200c0d8565b5f604051808303815f87803b15801562001af1575f80fd5b505af115801562001b04573d5f803e3d5ffd5b5050505062001bd7603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001b5e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001b8491906200c0c0565b6033546039546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416906370a082319060240162001911565b603954604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905162001caf926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa15801562001c3b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001c6191906200c0c0565b603954603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116906370a082319060240162001911565b505050565b62001cdc82826001600160a01b03165f1b5f8060405180602001604052805f815250620046dc565b5050565b5f60235f62001cf0878762008887565b63ffffffff16815260208101919091526040015f908120546001600160a01b031691508062001d1f85620088ad565b92505091505f604051806060016040528062001d3c8a8a620089e1565b63ffffffff16815260200162001d538a8a620089f2565b815260200162001d648a8a62008a0e565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e6fffffffffffffffffffffffffffffffff8581169085168462001da58d8d62008a34565b62001db18e8e62008a48565b604080516020810182525f815290517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16815262001dfc949392918e916004016200c120565b5f604051808303818589803b15801562001e14575f80fd5b5088f115801562001e27573d5f803e3d5ffd5b5050505050505050505050505050565b62001e4162008a59565b565b603a54604080517f411557d1000000000000000000000000000000000000000000000000000000008152905162001edf926001600160a01b03169163411557d19160048083019260209291908290030181865afa15801562001ea7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001ecd91906200c194565b6039546001600160a01b031662009e0b565b603a54604080517f369caf83000000000000000000000000000000000000000000000000000000008152905162001f7b926001600160a01b03169163369caf839160048083019260209291908290030181865afa15801562001f43573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001f6991906200c194565b6034546001600160a01b031662009e0b565b603a54604080517f0bfec755000000000000000000000000000000000000000000000000000000008152905162001e41926001600160a01b031691630bfec7559160048083019260209291908290030181865afa15801562001fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200200591906200c194565b60335461010090046001600160a01b031662009e0b565b603f80546200202b906200c1bf565b80601f016020809104026020016040519081016040528092919081815260200182805462002059906200c1bf565b8015620020a85780601f106200207e57610100808354040283529160200191620020a8565b820191905f5260205f20905b8154815290600101906020018083116200208a57829003601f168201915b505050505081565b62001cdc82828460ff1667ffffffffffffffff811115620020d557620020d56200b4e8565b604051908082528060200260200182016040528015620020ff578160200160208202803683370190505b5062006057565b606060168054806020026020016040519081016040528092919081815260200182805480156200215e57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116200213f575b5050505050905090565b60608160ff1667ffffffffffffffff8111156200218957620021896200b4e8565b604051908082528060200260200182016040528015620021b3578160200160208202803683370190505b509050825b620021c483856200c23f565b60ff168160ff1610156200226e5760ff81165f9081526023602090815260408083205481516001600160a01b03909116928101929092523090820152600160608201526200222690879060800160405160208183030381529060405262009e6d565b905080836200223687856200c25b565b60ff16815181106200224c576200224c6200c277565b6001600160a01b039092166020928302919091019091015250600101620021b8565b506200227a81620043f6565b9392505050565b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015620023c0575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015620023a8578382905f5260205f2001805462002316906200c1bf565b80601f016020809104026020016040519081016040528092919081815260200182805462002344906200c1bf565b8015620023935780601f10620023695761010080835404028352916020019162002393565b820191905f5260205f20905b8154815290600101906020018083116200237557829003601f168201915b505050505081526020019060010190620022f6565b505050508152505081526020019060010190620022a4565b50505050905090565b63ffffffff87165f908152602360205260408120546001600160a01b0316908080620023f58962009ec9565b925092509250836001600160a01b03166391d20fa18284908d8b8d898d8d60405180602001604052805f8152506040518a63ffffffff1660e01b81526004016200244697969594939291906200c2a4565b5f604051808303818589803b1580156200245e575f80fd5b5088f115801562002471573d5f803e3d5ffd5b5050505050505050505050505050505050565b606060188054806020026020016040519081016040528092919081815260200182805480156200215e57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116200213f575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156200215e57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116200213f575050505050905090565b5f6200254f6200867c565b603354603a546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015292935061010090910416906340c10f19906044015f604051808303815f87803b158015620025c5575f80fd5b505af1158015620025d8573d5f803e3d5ffd5b50506040805160e08101825260038152603c546001600160a01b03908116602080840191909152670de0b6b3a7640000838501525f606084018190528451808301865281815260808501528451808301865281815260a0850152845191820190945283815260c0830152603b549194509192506200266b916001918591678ac7230489e8000091620186a091166200871e565b60408051678ac7230489e800006024820152670de0b6b3a764000060448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7cb769dc0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb3916200273a916004016200b6da565b5f604051808303815f87803b15801562002752575f80fd5b505af115801562002765573d5f803e3d5ffd5b5050603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015f604051808303815f87803b158015620027d9575f80fd5b505af1158015620027ec573d5f803e3d5ffd5b5050603a54603354603e546040517fd0a102600000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d0a102609450670de0b6b3a764000093620028599361010090048116928a928992909116906004016200c0d8565b5f604051808303818588803b15801562002871575f80fd5b505af115801562002884573d5f803e3d5ffd5b5050505050505050565b5f805f6200289d85856200a011565b9250925092509250925092565b61ffff82165f90815260208080526040808320848452909152812081620028ff82546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b119150505b92915050565b5f620029156200867c565b603354603a546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015292935061010090910416906340c10f19906044015f604051808303815f87803b1580156200298b575f80fd5b505af11580156200299e573d5f803e3d5ffd5b5050603554603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201525f9450911691506370a0823190602401602060405180830381865afa15801562002a08573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002a2e91906200c0c0565b90505f6040518060400160405280600681526020017f3078313233340000000000000000000000000000000000000000000000000000815250600560405160200162002a7c9291906200c304565b60405160208183030381529060405290505f62002ab9600183670de0b6b3a7640000603b5f9054906101000a90046001600160a01b03166200a0a5565b603a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562002b48575f80fd5b505af115801562002b5b573d5f803e3d5ffd5b50506040518692507ffe509803c09416b28ff3d8f690c8b0c61462a892c46d5430c8fb20abe472daf091505f90a2603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b15801562002bf9575f80fd5b505af115801562002c0c573d5f803e3d5ffd5b5050603a54603354603e546040517fd0a102600000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d0a102609450670de0b6b3a76400009362002c799361010090048116928b928992909116906004016200c0d8565b5f604051808303818588803b15801562002c91575f80fd5b505af115801562002ca4573d5f803e3d5ffd5b505060355462002cc49350600192506001600160a01b0316905062001cb4565b603554603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015262002d899291909116906370a0823190602401602060405180830381865afa15801562002d2f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002d5591906200c0c0565b62002d69670de0b6b3a7640000866200c32a565b6040518060600160405280602d815260200162043773602d91396200a0d5565b50505050565b5f62002d9a6200867c565b603354603a546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015292935061010090910416906340c10f19906044015f604051808303815f87803b15801562002e10575f80fd5b505af115801562002e23573d5f803e3d5ffd5b5050603554603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201525f9450911691506370a0823190602401602060405180830381865afa15801562002e8d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002eb391906200c0c0565b6040805160e0810190915260038152603c549192505f9160208201906001600160a01b03168152602001670de0b6b3a76400008152602001670de0b6b3a7640000600162002f0291906200c32a565b815260200160405180602001604052805f815250815260200160405180602001604052805f815250815260200160405180602001604052805f81525081525090505f8160405160200162002f5791906200c3bb565b60405160208183030381529060405290505f62002f94600183670de0b6b3a7640000603b5f9054906101000a90046001600160a01b03166200a0a5565b603a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562003023575f80fd5b505af115801562003036573d5f803e3d5ffd5b50506040518792507ffe509803c09416b28ff3d8f690c8b0c61462a892c46d5430c8fb20abe472daf091505f90a2620030ba603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200189d573d5f803e3d5ffd5b603954604080517f18160ddd00000000000000000000000000000000000000000000000000000000815290516200311e926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015620019c6573d5f803e3d5ffd5b603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b1580156200318e575f80fd5b505af1158015620031a1573d5f803e3d5ffd5b5050603a54603354603e546040517fd0a102600000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d0a102609450670de0b6b3a7640000936200320e9361010090048116928c928992909116906004016200c0d8565b5f604051808303818588803b15801562003226575f80fd5b505af115801562003239573d5f803e3d5ffd5b5050603554620032599350600192506001600160a01b0316905062001cb4565b603554603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620032fe9291909116906370a0823190602401602060405180830381865afa158015620032c4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620032ea91906200c0c0565b62002d69670de0b6b3a7640000876200c32a565b603954604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051620033a9926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa15801562003362573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200338891906200c0c0565b5f604051806060016040528060288152602001620437a0602891396200a0d5565b5050505050565b5f620033bd848462008887565b63ffffffff81165f908152602360205260408120549192506001600160a01b03909116908163402f8468620033f3888862008a34565b620033ff8989620089e1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015263ffffffff1660248201526044016040805180830381865afa15801562003464573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200348a91906200c3cf565b5090505f6200349a87876200a155565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250604080517f54fd4d50000000000000000000000000000000000000000000000000000000008152905195965090946001600160a01b03881694506354fd4d509350600480830193506060928290030181865afa1580156200352c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200355291906200c429565b505090508067ffffffffffffffff1660030362003acf57825f6001600160a01b038216639c33abf7620035868c8c620089e1565b620035928d8d62008a34565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600260448201526064015f60405180830381865afa158015620035ff573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200362891908101906200c4b5565b90505f818060200190518101906200364191906200c559565b608001515f815181106200365957620036596200c277565b602002602001015190505f620036708c8c6200a166565b604051620036809291906200c63b565b6040518091039020905060605f630223536e60e01b88846064604051602401620036ad939291906200c64a565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03851663f010cb238d89856200372f426103e86200c32a565b6040518563ffffffff1660e01b81526004016200375094939291906200c677565b602060405180830381865afa1580156200376c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200379291906200c0c0565b90506200379f816200a177565b6040805160018082528183019092529194505f9250816020015b6040805160a0810182525f808252602082018190526060928201839052828201526080810191909152815260200190600190039081620037b95790505090506040518060a001604052808d63ffffffff168152602001886001600160a01b03168152602001838152602001426103e86200383491906200c32a565b815260200184815250815f815181106200385257620038526200c277565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b143044b90620038a49084906004016200c6b7565b5f604051808303815f87803b158015620038bc575f80fd5b505af1158015620038cf573d5f803e3d5ffd5b505050505f630894edf160e01b8a86604051602401620038f19291906200c783565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03871663f010cb238f8b8562003973426103e86200c32a565b6040518563ffffffff1660e01b81526004016200399494939291906200c677565b602060405180830381865afa158015620039b0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620039d691906200c0c0565b9050620039e3816200a177565b9450506040518060a001604052808e63ffffffff168152602001896001600160a01b03168152602001828152602001426103e862003a2291906200c32a565b815260200185815250825f8151811062003a405762003a406200c277565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063b143044b9062003a929085906004016200c6b7565b5f604051808303815f87803b15801562003aaa575f80fd5b505af115801562003abd573d5f803e3d5ffd5b50505050505050505050505062002884565b8067ffffffffffffffff16600a03620040dc57825f6001600160a01b038216639c33abf762003aff8c8c620089e1565b62003b0b8d8d62008a34565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600160448201526064015f60405180830381865afa15801562003b78573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405262003ba191908101906200c4b5565b90505f8180602001905181019062003bba91906200c7a6565b608001515f8151811062003bd25762003bd26200c277565b602002602001015190505f62003be98c8c6200a2be565b60405162003bf99291906200c63b565b604051809103902090505f62003c108d8d62008a48565b8b60405160200162003c249291906200c7f8565b60405160208183030381529060405280519060200120905060605f63ab750e7560e01b89858560405160240162003c5e939291906200c81f565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562003ce0426103e86200c32a565b6040518563ffffffff1660e01b815260040162003d0194939291906200c677565b602060405180830381865afa15801562003d1d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003d4391906200c0c0565b905062003d50816200a177565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f80825260208201819052606092820183905282820152608081019190915281526020019060019003908162003d6a5790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862003de591906200c32a565b815260200185815250815f8151811062003e035762003e036200c277565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b9062003e559084906004016200c6b7565b5f604051808303815f87803b15801562003e6d575f80fd5b505af115801562003e80573d5f803e3d5ffd5b505050505050505f63594924da60e01b89858560405160240162003ea7939291906200c81f565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562003f29426103e86200c32a565b6040518563ffffffff1660e01b815260040162003f4a94939291906200c677565b602060405180830381865afa15801562003f66573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003f8c91906200c0c0565b905062003f99816200a177565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f80825260208201819052606092820183905282820152608081019190915281526020019060019003908162003fb35790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e86200402e91906200c32a565b815260200185815250815f815181106200404c576200404c6200c277565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b906200409e9084906004016200c6b7565b5f604051808303815f87803b158015620040b6575f80fd5b505af1158015620040c9573d5f803e3d5ffd5b5050505050505050505050505062002884565b6040517f12cc947f0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906312cc947f9062004125908b908b906004016200c845565b5f604051808303815f87803b1580156200413d575f80fd5b505af115801562004150573d5f803e3d5ffd5b505050505050505050505050565b5f5b825181101562001caf575f8382815181106200418057620041806200c277565b602002602001015190505f5b83518110156200424457816001600160a01b031663f0a9e481858381518110620041ba57620041ba6200c277565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff9091166004820152600160248201526044015f604051808303815f87803b15801562004220575f80fd5b505af115801562004233573d5f803e3d5ffd5b5050600190920191506200418c9050565b505060010162004160565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015620023c0578382905f5260205f2090600202016040518060400160405290815f82018054620042a5906200c1bf565b80601f0160208091040260200160405190810160405280929190818152602001828054620042d3906200c1bf565b8015620043225780601f10620042f85761010080835404028352916020019162004322565b820191905f5260205f20905b8154815290600101906020018083116200430457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015620043bb57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620043675790505b5050505050815250508152602001906001019062004272565b5f365f80620043e58787876200a2cf565b935093509350935093509350935093565b80515f5b8181101562001caf575f8382815181106200441957620044196200c277565b602002602001015190505f5b83811015620045bc57828114620045b3575f8582815181106200444c576200444c6200c277565b602002602001015190505f816001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004494573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620044ba91906200c194565b6001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620044f6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200451c91906200c0a2565b9050836001600160a01b0316633400288b826200453f856001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff92909216600483015260248201526044015f604051808303815f87803b15801562004599575f80fd5b505af1158015620045ac573d5f803e3d5ffd5b5050505050505b60010162004425565b5050600101620043fa565b61ffff82165f9081526020808052604080832084845290915281206060916200461e82546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b1115620046d5575f62004631826200a32a565b5f8181526021602052604090208054919250906200464f906200c1bf565b80601f01602080910402602001604051908101604052809291908181526020018280546200467d906200c1bf565b8015620046cc5780601f10620046a257610100808354040283529160200191620046cc565b820191905f5260205f20905b815481529060010190602001808311620046ae57829003601f168201915b50505050509250505b5092915050565b63ffffffff85165f908152602360205260409020546001600160a01b031662004766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f656e64706f696e74206e6f74207965742072656769737465726564000000000060448201526064015b60405180910390fd5b63ffffffff85165f90815260208080526040808320878452909152812090620047bd82546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b90505f855f0362004801575081546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031662004815565b85821162004810578162004812565b855b90505b801562002884578062004828816200c85a565b9150505f62004837846200a3b4565b5f8181526021602052604081208054929350909162004856906200c1bf565b80601f016020809104026020016040519081016040528092919081815260200182805462004884906200c1bf565b8015620048d35780601f10620048a957610100808354040283529160200191620048d3565b820191905f5260205f20905b815481529060010190602001808311620048b557829003601f168201915b50506040517f997cff1b000000000000000000000000000000000000000000000000000000008152939450309363997cff1b93506200491b925085915086906004016200c783565b5f6040518083038186803b15801562004932575f80fd5b505afa15801562004945573d5f803e3d5ffd5b50506040517f6019788900000000000000000000000000000000000000000000000000000000815230925063601978899150620049899084908a906004016200c872565b5f604051808303815f87803b158015620049a1575f80fd5b505af1158015620049b4573d5f803e3d5ffd5b5050505f838152602260205260408120805491925090620049d5906200c1bf565b80601f016020809104026020016040519081016040528092919081815260200182805462004a03906200c1bf565b801562004a525780601f1062004a285761010080835404028352916020019162004a52565b820191905f5260205f20905b81548152906001019060200180831162004a3457829003601f168201915b5050505050905062004a668160026200a441565b1562004b41575f8062004a79836200a456565b604051919350915081905f906001600160a01b0383169085908381818185875af1925050503d805f811462004aca576040519150601f19603f3d011682016040523d82523d5f602084013e62004acf565b606091505b505090508062004b3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4661696c656420746f2073656e6420457468657200000000000000000000000060448201526064016200475d565b505050505b62004b4e8160016200a441565b1562004bc4576040517fec53eaa0000000000000000000000000000000000000000000000000000000008152309063ec53eaa09062004b9490859085906004016200c872565b5f604051808303815f87803b15801562004bac575f80fd5b505af115801562004bbf573d5f803e3d5ffd5b505050505b62004bd18160056200a441565b1562004c49576040517f0a69faa90000000000000000000000000000000000000000000000000000000081523090630a69faa99062004c1990859085908c906004016200c89a565b5f604051808303815f87803b15801562004c31575f80fd5b505af115801562004c44573d5f803e3d5ffd5b505050505b6001600160a01b0388161580159062004c6a575062004c6a8160036200a441565b1562004ce4576040517fa29c8984000000000000000000000000000000000000000000000000000000008152309063a29c89849062004cb4908590859088908e906004016200c8d8565b5f604051808303815f87803b15801562004ccc575f80fd5b505af115801562004cdf573d5f803e3d5ffd5b505050505b50505062004815565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015620023c0578382905f5260205f2001805462004d30906200c1bf565b80601f016020809104026020016040519081016040528092919081815260200182805462004d5e906200c1bf565b801562004dad5780601f1062004d835761010080835404028352916020019162004dad565b820191905f5260205f20905b81548152906001019060200180831162004d8f57829003601f168201915b50505050508152602001906001019062004d10565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015620023c0575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801562004ea357602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162004e4f5790505b5050505050815250508152602001906001019062004de5565b5f805f6200289d85856200a598565b5f62004ed8848462008a48565b905081811462002d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f67756964206e6f74206d6174636800000000000000000000000000000000000060448201526064016200475d565b5f62004f506200867c565b603354603a546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015292935061010090910416906340c10f19906044015f604051808303815f87803b15801562004fc6575f80fd5b505af115801562004fd9573d5f803e3d5ffd5b50506040805160e08101825260038152603b546001600160a01b03166020808301829052670de0b6b3a76400008385018190525f606085018190528551808401875281815260808601528551808401875281815260a0860152855192830190955284825260c08401919091529194509192506200505e9160019185918591906200871e565b60408051630bed727c6024820152600160448201525f606482018190526084808301919091528251808303909101815260a490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f4f3ec0d30000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb3916200512f916004016200b6da565b5f604051808303815f87803b15801562005147575f80fd5b505af11580156200515a573d5f803e3d5ffd5b5050603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015f604051808303815f87803b158015620051ce575f80fd5b505af1158015620051e1573d5f803e3d5ffd5b5050603a54603354603e546040517fd0a102600000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d0a102609450600193620028599361010090048116928a928992909116906004016200c0d8565b5f620052526200867c565b603354603a546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015292935061010090910416906340c10f19906044015f604051808303815f87803b158015620052c8575f80fd5b505af1158015620052db573d5f803e3d5ffd5b5050603554603b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201525f9450911691506370a0823190602401602060405180830381865afa15801562005345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200536b91906200c0c0565b90505f6040518060e00160405280603a5f9054906101000a90046001600160a01b03166001600160a01b031663aa72fe3f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620053ca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620053f091906200c0a2565b63ffffffff168152603b546020909101906001600160a01b03168152670de0b6b3a764000060208083018290525f60408085018290528051808401825282815260608601528051808401825282815260808601528051928301905280825260a090930152603b54929350909162002ab991600191859183916001600160a01b03166200871e565b5f620054826200867c565b603354603a546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152670de0b6b3a7640000602482015292935061010090910416906340c10f19906044015f604051808303815f87803b158015620054f8575f80fd5b505af11580156200550b573d5f803e3d5ffd5b50506040805160e08101825260038152603b546001600160a01b03166020808301829052670de0b6b3a76400008385018190525f606085018190528551808401875281815260808601528551808401875281815260a0860152855192830190955284825260c08401919091529194509192506200558f91600191859181906200871e565b6033546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562005622575f80fd5b505af115801562005635573d5f803e3d5ffd5b5050603954603a54604051670de0b6b3a764000081526001600160a01b039283169450911691507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36039546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562005715575f80fd5b505af115801562005728573d5f803e3d5ffd5b5050603a54604051670de0b6b3a764000081526001600160a01b0390911692505f91507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36039546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b15801562005804575f80fd5b505af115801562005817573d5f803e3d5ffd5b5050603a5460408051670de0b6b3a764000080825260208201526001600160a01b0390921693508392507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a3603a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a4015f604051808303815f87803b158015620058f8575f80fd5b505af11580156200590b573d5f803e3d5ffd5b50506040518592507f27b5aea9f5736c02241d8a0272e9ec988ea44cf85c4b4760329431aa1967839491505f90a26200598f603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200189d573d5f803e3d5ffd5b603954604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051620059f3926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015620019c6573d5f803e3d5ffd5b603d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015f604051808303815f87803b15801562005a63575f80fd5b505af115801562005a76573d5f803e3d5ffd5b5050603a54603354603e546040517fd0a102600000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d0a102609450670de0b6b3a76400009362005ae39361010090048116928a928992909116906004016200c0d8565b5f604051808303818588803b15801562005afb575f80fd5b505af115801562005b0e573d5f803e3d5ffd5b505050505062005b69603360019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001b5e573d5f803e3d5ffd5b603954604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905162001caf926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa15801562005bcd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062005bf391906200c0c0565b6039546034546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116906370a082319060240162001911565b30633bbd6a9462005c53878762008887565b62005c5f888862008a34565b86868662005c6e8c8c6200a2be565b6040518863ffffffff1660e01b815260040162005c9297969594939291906200c921565b5f604051808303815f87803b15801562005caa575f80fd5b505af115801562005cbd573d5f803e3d5ffd5b505050505050505050565b8060235f836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005d09573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062005d2f91906200c0a2565b63ffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015620023c0575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801562005e5e57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162005e0a5790505b5050505050815250508152602001906001019062005da0565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015620023c0578382905f5260205f2001805462005eba906200c1bf565b80601f016020809104026020016040519081016040528092919081815260200182805462005ee8906200c1bf565b801562005f375780601f1062005f0d5761010080835404028352916020019162005f37565b820191905f5260205f20905b81548152906001019060200180831162005f1957829003601f168201915b50505050508152602001906001019062005e9a565b62001cdc82825f8060405180602001604052805f815250620046dc565b5f8062005f7784846200a623565b915091505b9250929050565b6008545f9060ff161562005f9b575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa1580156200602a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200605091906200c0c0565b1415905090565b8260ff1667ffffffffffffffff8111156200607657620060766200b4e8565b604051908082528060200260200182016040528015620060a0578160200160208202803683370190505b508051620060b7916025916020909101906200b0f9565b508260ff1667ffffffffffffffff811115620060d757620060d76200b4e8565b60405190808252806020026020018201604052801562006101578160200160208202803683370190505b50805162006118916026916020909101906200b179565b508260ff1667ffffffffffffffff8111156200613857620061386200b4e8565b60405190808252806020026020018201604052801562006162578160200160208202803683370190505b50805162006179916027916020909101906200b0f9565b508260ff1667ffffffffffffffff8111156200619957620061996200b4e8565b604051908082528060200260200182016040528015620061c3578160200160208202803683370190505b508051620061da916028916020909101906200b0f9565b508260ff1667ffffffffffffffff811115620061fa57620061fa6200b4e8565b60405190808252806020026020018201604052801562006224578160200160208202803683370190505b5080516200623b916029916020909101906200b0f9565b506040805160018082528183019092529060208083019080368337505081516200626d92602a9250602001906200b0f9565b506040517fffa1864900000000000000000000000000000000000000000000000000000000815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015620062d6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620062fc91906200c194565b602a80545f906200631157620063116200c277565b5f918252602082200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0393909316929092179091555b8360ff168160ff16101562006569575f6200636f8260016200c23f565b60ff1690505f838360ff16815181106200638d576200638d6200c277565b602002602001015190508160256001018460ff1681548110620063b457620063b46200c277565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055505f6001600160a01b0316816001600160a01b031603620064905781306040516200640f906200b227565b63ffffffff90921682526001600160a01b03166020820152604001604051809103905ff08015801562006444573d5f803e3d5ffd5b506025805460ff86169081106200645f576200645f6200c277565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555062006525565b813082604051620064a1906200b235565b63ffffffff90931683526001600160a01b039182166020840152166040820152606001604051809103905ff080158015620064de573d5f803e3d5ffd5b506025805460ff8616908110620064f957620064f96200c277565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6200655e60255f018460ff16815481106200654457620065446200c277565b5f918252602090912001546001600160a01b031662005cc8565b505060010162006352565b503060405162006579906200b243565b6001600160a01b039091168152602001604051809103905ff080158015620065a3573d5f803e3d5ffd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790555f5b8360ff168160ff16101562007f36575f8360018111156200660357620066036200c983565b0362007d08575f60255f018260ff16815481106200662557620066256200c277565b905f5260205f20015f9054906101000a90046001600160a01b03169050308164e8d4a51000620186a06040516200665c906200b251565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff08015801562006699573d5f803e3d5ffd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040518190620066e2906200b25f565b6001600160a01b039091168152602001604051809103905ff0801580156200670c573d5f803e3d5ffd5b50602c6001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550308164e8d4a51000620186a06040516200674f906200b26d565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff0801580156200678c573d5f803e3d5ffd5b50602e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556025805460ff8416908110620067df57620067df6200c277565b5f91825260209091200154602c546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b15801562006847575f80fd5b505af11580156200685a573d5f803e3d5ffd5b5050505060255f018260ff16815481106200687957620068796200c277565b5f91825260209091200154602d546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b158015620068e1575f80fd5b505af1158015620068f4573d5f803e3d5ffd5b5050505060255f018260ff16815481106200691357620069136200c277565b5f91825260209091200154602e546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b1580156200697b575f80fd5b505af11580156200698e573d5f803e3d5ffd5b5050602c54602780546001600160a01b039092169350915060ff8516908110620069bc57620069bc6200c277565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602d546028805491909216919060ff851690811062006a1b5762006a1b6200c277565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602e546029805491909216919060ff851690811062006a7a5762006a7a6200c277565b5f918252602082200180546001600160a01b03939093167fffffffffffffffffffffffff0000000000000000000000000000000000000000909316929092179091556040805160018082528183019092529081602001602082028036833701905050905030815f8151811062006af45762006af46200c277565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092525f9290919082016060803683375050602c5482519293506001600160a01b0316918391505f9062006b515762006b516200c277565b6001600160a01b039283166020918202929092010152602d5482519116908290600190811062006b855762006b856200c277565b6001600160a01b039283166020918202929092010152602e5482519116908290600290811062006bb95762006bb96200c277565b6001600160a01b039283166020918202929092010152602b5460405185925f9285929116903090879062006bed906200b27b565b62006bfe969594939291906200c9b0565b604051809103905ff08015801562006c18573d5f803e3d5ffd5b50602f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff861690811062006c6b5762006c6b6200c277565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1660405162006c9d906200b289565b63ffffffff9091168152602001604051809103905ff08015801562006cc4573d5f803e3d5ffd5b50603180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602f546040517fc7b2370b00000000000000000000000000000000000000000000000000000000815260048101929092529091169063c7b2370b906024015f604051808303815f87803b15801562006d52575f80fd5b505af115801562006d65573d5f803e3d5ffd5b5050505060256001018460ff168154811062006d855762006d856200c277565b5f918252602090912060088204015460079091166004026101000a900463ffffffff1662006db58560016200c23f565b602b5460405184916001600160a01b031690602a90600190889062006dda906200b297565b62006dec97969594939291906200ca00565b604051809103905ff08015801562006e06573d5f803e3d5ffd5b50603080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff861690811062006e595762006e596200c277565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16670de0b6b3a764000060405162006e94906200b2a5565b63ffffffff90921682526020820152604001604051809103905ff08015801562006ec0573d5f803e3d5ffd5b50603280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f39f26dfc000000000000000000000000000000000000000000000000000000008152670de0b6b3a764000060048201819052602482015261271060448201526339f26dfc906064015f604051808303815f87803b15801562006f5c575f80fd5b505af115801562006f6f573d5f803e3d5ffd5b50506030546032546040517fc7b2370b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063c7b2370b91506024015f604051808303815f87803b15801562006fd3575f80fd5b505af115801562006fe6573d5f803e3d5ffd5b5050505050506200701160405180606001604052806060815260200160608152602001606081525090565b6200701e8660016200c23f565b60ff1667ffffffffffffffff8111156200703c576200703c6200b4e8565b6040519080825280602002602001820160405280156200709c57816020015b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a082015282525f199092019101816200705b5790505b508152620070ac8660016200c23f565b60ff1667ffffffffffffffff811115620070ca57620070ca6200b4e8565b6040519080825280602002602001820160405280156200711c57816020015b604080516080810182525f8082526020808301829052928201819052606082015282525f19909201910181620070e95790505b5060208201526200712f8660016200c23f565b60ff1667ffffffffffffffff8111156200714d576200714d6200b4e8565b6040519080825280602002602001820160405280156200719357816020015b604080518082019091525f80825260208201528152602001906001900390816200716c5790505b50604082810191909152805160018082528183019092525f91602080830190803683375050604080515f80825260208201909252603054845194955090936001600160a01b039091169250849190620071f057620071f06200c277565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5b8860ff168160ff161015620078a2578060ff168660ff16031562007899575f6200723e8260016200c23f565b60408051600180825281830190925260ff9290921692505f9190816020015b620072676200b2b3565b8152602001906001900390816200725d5790505090505f6040518060c00160405280606467ffffffffffffffff168152602001875160ff168152602001865160ff1681526020015f60ff16815260200187815260200186815250905060405180604001604052808463ffffffff16815260200182815250825f81518110620072f357620072f36200c277565b6020908102919091010152602c546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906329460b0b90620073499085906004016200caad565b5f604051808303815f87803b15801562007361575f80fd5b505af115801562007374573d5f803e3d5ffd5b5050602d546040517f29460b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506329460b0b9150620073c39085906004016200caad565b5f604051808303815f87803b158015620073db575f80fd5b505af1158015620073ee573d5f803e3d5ffd5b505f925060019150620073fe9050565b6040519080825280602002602001820160405280156200743b57816020015b620074276200b318565b8152602001906001900390816200741d5790505b506040805180820182526127108152602f546001600160a01b0316602080830191909152825180840190935263ffffffff88168352820181905282519293509183905f906200748e576200748e6200c277565b6020908102919091010152602c546040517fc14c43490000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c14c434990620074e49085906004016200cba8565b5f604051808303815f87803b158015620074fc575f80fd5b505af11580156200750f573d5f803e3d5ffd5b50506040805160c08101825263ffffffff89168152611388602082018190529181019190915261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a08201528b518051919550935060ff89169250821090506200758457620075846200c277565b602002602001018190525060405180608001604052808463ffffffff16815260200161138867ffffffffffffffff16815260200161271061ffff1681526020016402540be4006fffffffffffffffffffffffffffffffff1681525087602001518560ff1681518110620075fb57620075fb6200c277565b602002602001018190525060405180604001604052808463ffffffff168152602001600381525087604001518560ff16815181106200763e576200763e6200c277565b60200260200101819052505f60256006015f9054906101000a90046001600160a01b03166001600160a01b031663c18403276040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200769e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620076c491906200cc18565b6040805160018082528183019092529192505f9190816020015b620077116040805180820182525f8082528251606081018452818152602081810183905293810191909152909182015290565b815260200190600190039081620076de57905050905060405180604001604052808663ffffffff16815260200160405180606001604052808560016200775891906200cc36565b6fffffffffffffffffffffffffffffffff1681526001602082018190526040909101529052815182905f906200779257620077926200c277565b6020908102919091010152602b546040517f3161b7f60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690633161b7f690620077e89084906004016200cc6d565b5f604051808303815f87803b15801562007800575f80fd5b505af115801562007813573d5f803e3d5ffd5b5050602b546040517f5d6d7ccb00000000000000000000000000000000000000000000000000000000815268056bc75e2d6310000060048201526001600160a01b039091169250635d6d7ccb91506024015f604051808303815f87803b1580156200787c575f80fd5b505af11580156200788f573d5f803e3d5ffd5b5050505050505050505b60010162007212565b506040805160018082528183019092525f91816020015b620078c36200b35a565b815260200190600190039081620078b95750506040805160c081018252602f546001600160a01b03168152855160ff9081166020808401919091528651909116828401525f606083018190526080830188905260a083018790528351808501909452620111718452908301829052835193945090928491906200794a576200794a6200c277565b6020908102919091010152602e546040517fc85f4b4e0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c85f4b4e90620079a09085906004016200ccea565b5f604051808303815f87803b158015620079b8575f80fd5b505af1158015620079cb573d5f803e3d5ffd5b5050505050506040518060c0016040528060256001018760ff1681548110620079f857620079f86200c277565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff168252611388908201819052604082015261271060608201526402540be40060808201526024546fffffffffffffffffffffffffffffffff1660a0909101528351805160ff8b1690811062007a745762007a746200c277565b6020026020010181905250604051806080016040528060256001018760ff168154811062007aa65762007aa66200c277565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff1682526113888282015261271060408301526402540be400606090920191909152840151805160ff8b1690811062007b055762007b056200c277565b6020026020010181905250604051806040016040528060256001018760ff168154811062007b375762007b376200c277565b5f91825260209182902060088204015460079091166004026101000a900463ffffffff16825260039101526040840151805160ff8b1690811062007b7f5762007b7f6200c277565b6020908102919091010152602f5483516040517f3d85ac330000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691633d85ac339162007bd5916004016200cde4565b5f604051808303815f87803b15801562007bed575f80fd5b505af115801562007c00573d5f803e3d5ffd5b505060305460208601516040517f52d3b8710000000000000000000000000000000000000000000000000000000081526001600160a01b0390921693506352d3b871925062007c52916004016200ce7f565b5f604051808303815f87803b15801562007c6a575f80fd5b505af115801562007c7d573d5f803e3d5ffd5b505060325460408087015190517ff5ff608f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909216935063f5ff608f925062007ccf916004016200cefd565b5f604051808303815f87803b15801562007ce7575f80fd5b505af115801562007cfa573d5f803e3d5ffd5b505050505050505062007f2d565b600183600181111562007d1f5762007d1f6200c983565b0362007eca575f3060255f018360ff168154811062007d425762007d426200c277565b5f918252602090912001546040516001600160a01b039091169062007d67906200b3b9565b6001600160a01b03928316815291166020820152604001604051809103905ff08015801562007d98573d5f803e3d5ffd5b50905060255f018260ff168154811062007db65762007db66200c277565b5f918252602090912001546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301529091169063e8964e81906024015f604051808303815f87803b15801562007e1c575f80fd5b505af115801562007e2f573d5f803e3d5ffd5b505050508060256002018360ff168154811062007e505762007e506200c277565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060256003018360ff168154811062007e985762007e986200c277565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505062007f2d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206c696272617279207479706500000000000000000000000060448201526064016200475d565b600101620065de565b505f5b8360ff168160ff16101562002d89575f60255f018260ff168154811062007f645762007f646200c277565b5f9182526020822001546001600160a01b0316915084600181111562007f8e5762007f8e6200c983565b03620080ff57806001600160a01b031663aafea3126201117160256004018560ff168154811062007fc35762007fc36200c277565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b15801562008030575f80fd5b505af115801562008043573d5f803e3d5ffd5b50505050806001600160a01b031663a718531b6201117160256004018560ff16815481106200807657620080766200c277565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815263ffffffff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b158015620080e7575f80fd5b505af1158015620080fa573d5f803e3d5ffd5b505050505b5f5b8560ff168160ff1610156200829d578060ff168360ff16031562008294576001600160a01b03821663aafea3126200813b8360016200c23f565b6027805460ff88169081106200815557620081556200c277565b5f9182526020909120015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90921660048301526001600160a01b031660248201526044015f604051808303815f87803b158015620081bf575f80fd5b505af1158015620081d2573d5f803e3d5ffd5b50505050816001600160a01b031663a718531b826001620081f491906200c23f565b6028805460ff88169081106200820e576200820e6200c277565b5f91825260208220015460405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260ff90931660048401526001600160a01b0316602483015260448201526064015f604051808303815f87803b1580156200827c575f80fd5b505af11580156200828f573d5f803e3d5ffd5b505050505b60010162008101565b505060010162007f39565b606060158054806020026020016040519081016040528092919081815260200182805480156200215e57602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116200213f575050505050905090565b5f60235f62008318868662008887565b63ffffffff16815260208101919091526040015f908120546001600160a01b031691508062008347846200a686565b915091505f6040518060600160405280620083638989620089e1565b63ffffffff1681526020016200837a8989620089f2565b81526020016200838b898962008a0e565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e848484620083b78c8c62008a34565b620083c38d8d62008a48565b620083cf8e8e6200a2be565b60405180602001604052805f8152506040518963ffffffff1660e01b815260040162008401969594939291906200cf46565b5f604051808303818589803b15801562008419575f80fd5b5088f11580156200842c573d5f803e3d5ffd5b50505050505050505050505050565b604080513060248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f91ac5e4f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb391620084f291906004016200b6da565b5f604051808303815f87803b1580156200850a575f80fd5b505af11580156200851d573d5f803e3d5ffd5b5050603a546033546001600160a01b03918216935063d0a102609250610100900416620085496200867c565b603b5460405160e085901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039384166004820152602481019290925260a060448301525f60a483018190529216606482015260c0608482015260c481019190915260e4015f604051808303815f87803b158015620085d0575f80fd5b505af115801562002d89573d5f803e3d5ffd5b5f8062005f7784846200a7c9565b5f620085fe858562008887565b90505f6200860d86866200a843565b63ffffffff83165f90815260208080526040808320848452909152812091925062008639888862008a48565b90506200864782826200a854565b5f81815260216020526040902062008661888a836200d004565b505f81815260226020526040902062005cbd8688836200d004565b6040517f6c5d32a9000000000000000000000000000000000000000000000000000000008152602060048201525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d90636c5d32a9906024015f60405180830381865afa158015620086e5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200870e91908101906200c4b5565b62008719906200d0cb565b905090565b60606200877b5f87856001600160a01b0386168989604051602001620087469291906200d0ef565b60408051601f19818403018152908290526200876692916020016200c7f8565b6040516020818303038152906040526200a8e7565b9695505050505050565b620087c783836040518060400160405280600e81526020017f7465726d3120213d207465726d320000000000000000000000000000000000008152506200a0d5565b62001caf83826040518060400160405280600e81526020017f7465726d3120213d207465726d330000000000000000000000000000000000008152506200a0d5565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b5f6040518083038186803b15801562008874575f80fd5b505afa158015620012e5573d5f803e3d5ffd5b5f620088986031602d84866200d103565b620088a3916200d12c565b60e01c9392505050565b5f805f805f620088bf8660056200a91b565b915091508162008952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f7074696f6e7348656c7065723a206c7a52656164206f7074696f6e206e6f7460448201527f20666f756e64000000000000000000000000000000000000000000000000000060648201526084016200475d565b6040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca8690620089909084906004016200b6da565b606060405180830381865afa158015620089ac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620089d291906200d173565b94509450945050509193909250565b5f62008898600d600984866200d103565b5f62008a03602d600d84866200d103565b6200227a916200d1b9565b5f62008a1f6009600184866200d103565b62008a2a916200d1d7565b60c01c9392505050565b5f6200227a62008a4584846200a843565b90565b5f62008a036071605184866200d103565b62008a636200af57565b60335462008a759060ff165f620020b0565b60025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c0954603d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169182179055604051309062008ae6906200b3c7565b62008af39291906200d21e565b604051809103905ff08015801562008b0d573d5f803e3d5ffd5b50603380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384160217905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e04754604051911690309062008b84906200b3c7565b62008b919291906200d2bb565b604051809103905ff08015801562008bab573d5f803e3d5ffd5b50603580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e54604051911690309062008c1e906200b3c7565b62008c2b9291906200d335565b604051809103905ff08015801562008c45573d5f803e3d5ffd5b50603780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff81111562008ca15762008ca16200b4e8565b60405190808252806020026020018201604052801562008ccb578160200160208202803683370190505b5060355481519192506001600160a01b03169082905f9062008cf15762008cf16200c277565b6001600160a01b0392831660209182029290920101526033548251610100909104909116908290600190811062008d2c5762008d2c6200c277565b6001600160a01b03928316602091820292909201015260375482519116908290600290811062008d605762008d606200c277565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca2549062008db69084906004016200b785565b5f604051808303815f87803b15801562008dce575f80fd5b505af115801562008de1573d5f803e3d5ffd5b50505050603360019054906101000a90046001600160a01b031660405162008e09906200b3d5565b62008e1591906200d3af565b604051809103905ff08015801562008e2f573d5f803e3d5ffd5b50603980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831690811790915560025f5260236020527f1bcb44d21c67d5659cdd5f45cd32c6d6c6d33d5044115600c6652ecd87939c095460405191921690309062008ea6906200b3e3565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff08015801562008ee0573d5f803e3d5ffd5b50603480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556039546033546040519184169361010090910416919062008f39906200b3f1565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff08015801562008f73573d5f803e3d5ffd5b50603a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560015f5260236020527fb361aea33a0348d043deace4a562cb920ac10508397ad80f12dfe9a2a063e04754604051911690309062008fe6906200b3c7565b62008ff39291906200d441565b604051809103905ff0801580156200900d573d5f803e3d5ffd5b50603680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560035f5260236020527fca0574cb82515dd8d8feabc9bfece9b4778855cddef4d6e8f68e64178480ff7e54604051911690309062009080906200b3c7565b6200908d9291906200d4bb565b604051809103905ff080158015620090a7573d5f803e3d5ffd5b50603880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556033545f9060ff1667ffffffffffffffff8111156200910357620091036200b4e8565b6040519080825280602002602001820160405280156200912d578160200160208202803683370190505b5060365481519192506001600160a01b03169082905f906200915357620091536200c277565b6001600160a01b0392831660209182029290920101526034548251911690829060019081106200918757620091876200c277565b6001600160a01b039283166020918202929092010152603854825191169082906002908110620091bb57620091bb6200c277565b6001600160a01b03909216602092830291909101909101526040517f703ca254000000000000000000000000000000000000000000000000000000008152309063703ca25490620092119084906004016200b785565b5f604051808303815f87803b15801562009229575f80fd5b505af11580156200923c573d5f803e3d5ffd5b5050603354604080517fc657c7180000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b031660048301526024820152600d60448201527f41737365744f46543a3a617262000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b158015620092e7575f80fd5b505af1158015620092fa573d5f803e3d5ffd5b5050603554604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b158015620093a1575f80fd5b505af1158015620093b4573d5f803e3d5ffd5b5050603754604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f41737365744f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b1580156200945b575f80fd5b505af11580156200946e573d5f803e3d5ffd5b5050603454604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601460448201527f53686172654f4654416461707465723a3a6172620000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562009515575f80fd5b505af115801562009528573d5f803e3d5ffd5b5050603654604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a657468000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b158015620095cf575f80fd5b505af1158015620095e2573d5f803e3d5ffd5b5050603854604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600d60448201527f53686172654f46543a3a706f6c000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562009689575f80fd5b505af11580156200969c573d5f803e3d5ffd5b5050603954604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152600a60448201527f5661756c743a3a617262000000000000000000000000000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b15801562009743575f80fd5b505af115801562009756573d5f803e3d5ffd5b5050603a54604080517fc657c7180000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152601660448201527f5661756c74436f6d706f73657253796e633a3a617262000000000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c657c71891506084015f604051808303815f87803b158015620097fd575f80fd5b505af115801562009810573d5f803e3d5ffd5b5050603e546200983692506001600160a01b0316905068056bc75e2d631000006200af61565b603d5462009857906001600160a01b031668056bc75e2d631000006200af61565b604080516003808252608082019092525f91816020015b60408051606080820183525f8083526020830152918101919091528152602001906001900390816200986e5790505090506040518060600160405280600363ffffffff168152602001600161ffff168152602001603f8054620098d1906200c1bf565b80601f0160208091040260200160405190810160405280929190818152602001828054620098ff906200c1bf565b80156200994e5780601f1062009924576101008083540402835291602001916200994e565b820191905f5260205f20905b8154815290600101906020018083116200993057829003601f168201915b5050505050815250815f815181106200996b576200996b6200c277565b60200260200101819052506040518060600160405280600263ffffffff168152602001600161ffff168152602001603f8054620099a8906200c1bf565b80601f0160208091040260200160405190810160405280929190818152602001828054620099d6906200c1bf565b801562009a255780601f10620099fb5761010080835404028352916020019162009a25565b820191905f5260205f20905b81548152906001019060200180831162009a0757829003601f168201915b50505050508152508160018151811062009a435762009a436200c277565b60200260200101819052506040518060600160405280600163ffffffff168152602001600161ffff168152602001603f805462009a80906200c1bf565b80601f016020809104026020016040519081016040528092919081815260200182805462009aae906200c1bf565b801562009afd5780601f1062009ad35761010080835404028352916020019162009afd565b820191905f5260205f20905b81548152906001019060200180831162009adf57829003601f168201915b50505050508152508160028151811062009b1b5762009b1b6200c277565b60209081029190910101526033546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063b98bd0709062009b759084906004016200d535565b5f604051808303815f87803b15801562009b8d575f80fd5b505af115801562009ba0573d5f803e3d5ffd5b50506035546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd070915062009bef9084906004016200d535565b5f604051808303815f87803b15801562009c07575f80fd5b505af115801562009c1a573d5f803e3d5ffd5b50506037546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd070915062009c699084906004016200d535565b5f604051808303815f87803b15801562009c81575f80fd5b505af115801562009c94573d5f803e3d5ffd5b50506034546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd070915062009ce39084906004016200d535565b5f604051808303815f87803b15801562009cfb575f80fd5b505af115801562009d0e573d5f803e3d5ffd5b50506036546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd070915062009d5d9084906004016200d535565b5f604051808303815f87803b15801562009d75575f80fd5b505af115801562009d88573d5f803e3d5ffd5b50506038546040517fb98bd0700000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063b98bd070915062009dd79084906004016200d535565b5f604051808303815f87803b15801562009def575f80fd5b505af115801562009e02573d5f803e3d5ffd5b50505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f6906044016200885d565b5f808360405160200162009e8291906200d5d2565b60408051601f198184030181529082905262009ea39185906020016200d5ef565b60405160208183030381529060405290508051602082015ff09150813b620046d5575f80fd5b5f805f805f62009edb8660036200a91b565b915091508162009f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a436f6d706f7365206f7074696f6e2060448201527f6e6f7420666f756e64000000000000000000000000000000000000000000000060648201526084016200475d565b6040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab09062009fac9084906004016200b6da565b606060405180830381865afa15801562009fc8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062009fee91906200d621565b91986fffffffffffffffffffffffffffffffff9182169850911695509350505050565b5f8080601284148015906200a027575060228414155b156200a05f576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200a06c85855f6200afd4565b92506200a07c858560026200affe565b9150602284146200a08e575f6200a09c565b6200a09c858560126200affe565b90509250925092565b60606200a0cc5f86856001600160a01b03861688604051602001620087669291906200c7f8565b95945050505050565b6040517f88b44c85000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d906388b44c85906200a12b908690869086906004016200d654565b5f6040518083038186803b1580156200a142575f80fd5b505afa15801562009e02573d5f803e3d5ffd5b365f62005f7760518285876200d103565b365f62005f7783605181876200d103565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290526060905f90605c0160408051601f198184030181529082905280516020909101207fe341eaa4000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291505f9081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e341eaa490604401606060405180830381865afa1580156200a23c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a26291906200d674565b6040805160208101939093528281019190915260f89290921b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260619091019091529695505050505050565b365f62005f7783607181876200d103565b5f368160018401816200a2e48888846200afd4565b6002929092019190506200a2fa8888846200b028565b94506001820161ffff821683016200a31581838b8d6200d103565b979b909a50969850505061ffff160193505050565b5f6200a35f825470010000000000000000000000000000000081046fffffffffffffffffffffffffffffffff90811691161490565b156200a371576200a37160326200b04f565b5080545f196fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909204821601165f9081526001909101602052604090205490565b80545f906fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116911681036200a3f4576200a3f460316200b04f565b5f19016fffffffffffffffffffffffffffffffff9081165f818152600185016020526040812080549190558454909216700100000000000000000000000000000000909102179092555090565b5f6200a44e83836200a91b565b509392505050565b5f805f806200a4678560026200a91b565b91509150816200a4fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696f6e7348656c7065723a206e617469766544726f70206f7074696f6e60448201527f206e6f7420666f756e640000000000000000000000000000000000000000000060648201526084016200475d565b6040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf6906200a5389084906004016200b6da565b6040805180830381865afa1580156200a553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a57991906200d6ab565b6fffffffffffffffffffffffffffffffff909116969095509350505050565b5f8080601484148015906200a5ae575060248414155b156200a5e6576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200a5f385855f6200affe565b92506200a603858560106200b060565b9150602484146200a615575f6200a09c565b6200a09c858560146200affe565b5f80603083146200a660576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200a66d84845f6200affe565b91506200a67d848460106200b08a565b90509250929050565b5f805f806200a6978560016200a91b565b91509150816200a72a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a52656365697665206f7074696f6e2060448201527f6e6f7420666f756e64000000000000000000000000000000000000000000000060648201526084016200475d565b6040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d61906200a7689084906004016200b6da565b6040805180830381865afa1580156200a783573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200a7a991906200d6da565b6fffffffffffffffffffffffffffffffff91821697911695509350505050565b5f80601083148015906200a7de575060208314155b156200a816576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200a82384845f6200affe565b9150602083146200a835575f6200a67d565b6200a67d848460106200affe565b5f62008a036051603184866200d103565b81546fffffffffffffffffffffffffffffffff8082165f19019170010000000000000000000000000000000090048116908216036200a899576200a89960416200b04f565b6fffffffffffffffffffffffffffffffff165f81815260018401602052604090209190915581547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016179055565b6060848484846040516020016200a90294939291906200d70c565b6040516020818303038152906040529050949350505050565b601f546040517fe5c5e9a30000000000000000000000000000000000000000000000000000000081525f91606091839161010090046001600160a01b03169063e5c5e9a3906200a9709088906004016200b6da565b5f60405180830381865afa1580156200a98b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200a9b491908101906200d78b565b50604080515f80825260208201909252919250908190819081905b85518510156200af2c576040517f6e1775e30000000000000000000000000000000000000000000000000000000081525f90819081903090636e1775e3906200aa1f908c908c906004016200c783565b5f60405180830381865afa1580156200aa3a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526200aa6391908101906200d7f2565b9250925092508b60ff168360ff16036200af21575f808080805f1960ff8916016200ab89576040517ff93e1d61000000000000000000000000000000000000000000000000000000008152309063f93e1d61906200aac6908a906004016200b6da565b6040805180830381865afa1580156200aae1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200ab0791906200d6da565b90955093506200ab18858d6200d84e565b9b506200ab26848c6200d84e565b9a508b8b6040516020016200ab72929190608092831b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000090811682529190921b16601082015260200190565b60405160208183030381529060405298506200af1b565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8916016200ac86576040517fb954fdf6000000000000000000000000000000000000000000000000000000008152309063b954fdf6906200abf2908a906004016200b6da565b6040805180830381865afa1580156200ac0d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200ac3391906200d6ab565b90945092506200ac44848c6200d84e565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b16602082015260308101859052909b506050016200ab72565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff8916016200adc3576040517f518e8ab0000000000000000000000000000000000000000000000000000000008152309063518e8ab0906200acef908a906004016200b6da565b606060405180830381865afa1580156200ad0b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200ad3191906200d621565b909650945091506200ad44858d6200d84e565b9b506200ad52848c6200d84e565b6040517fffff00000000000000000000000000000000000000000000000000000000000060f085901b1660208201527fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b8216602284015283901b166032820152909b506042016200ab72565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff8916016200af1b576040517f9751ca860000000000000000000000000000000000000000000000000000000081523090639751ca86906200ae2c908a906004016200b6da565b606060405180830381865afa1580156200ae48573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200ae6e91906200d173565b91965090945090506200ae82848c6200d84e565b9a506200ae90858d6200d84e565b9b506200ae9e818b6200d87a565b6040517fffffffffffffffffffffffffffffffff0000000000000000000000000000000060808f811b821660208401527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1660308401528e901b166034820152909a5060440160405160208183030381529060405298505b50505050505b96506200a9cf915050565b80515f036200af46575f9750955062005f7c945050505050565b60019a909950975050505050505050565b62001e416200b0a8565b6040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d906044015f604051808303815f87803b158015620012d2575f80fd5b5f600282016200afe7818486886200d103565b6200aff2916200d89a565b60f01c95945050505050565b5f601082016200b011818486886200d103565b6200b01c916200d8e1565b60801c95945050505050565b5f8383838181106200b03e576200b03e6200c277565b919091013560f81c95945050505050565b634e487b715f52806020526024601cfd5b5f600482016200b073818486886200d103565b6200b07e916200d12c565b60e01c95945050505050565b5f602082016200b09d818486886200d103565b6200a0cc916200d1b9565b6040516200b0b6906200b3ff565b604051809103905ff0801580156200b0d0573d5f803e3d5ffd5b50601f60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550565b828054828255905f5260205f209081019282156200b167579160200282015b828111156200b16757825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039091161782556020909201916001909101906200b118565b506200b1759291506200b40d565b5090565b828054828255905f5260205f20906007016008900481019282156200b167579160200282015f5b838211156200b1e657835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026200b1a0565b80156200b2185782816101000a81549063ffffffff02191690556004016020816003010492830192600103026200b1e6565b50506200b1759291506200b40d565b615fc2806200d92983390190565b61619380620138eb83390190565b61196d8062019a7e83390190565b615881806201b3eb83390190565b612b7c8062020c6c83390190565b615cb280620237e883390190565b613af9806202949a83390190565b611b50806202cf9383390190565b614aae806202eae383390190565b612470806203359183390190565b60405180604001604052805f63ffffffff1681526020016200b3136040518060c001604052805f67ffffffffffffffff1681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b905290565b60405180604001604052805f63ffffffff1681526020016200b31360405180604001604052805f63ffffffff1681526020015f6001600160a01b031681525090565b60405180604001604052805f63ffffffff1681526020016200b3136040518060c001604052805f6001600160a01b031681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b611e158062035a0183390190565b613f7b806203781683390190565b611b1c806203b79183390190565b61355f806203d2ad83390190565b6124be806204080c83390190565b610aa98062042cca83390190565b5b808211156200b175575f81556001016200b40e565b6001600160a01b03811681146200b438575f80fd5b50565b5f602082840312156200b44c575f80fd5b81356200227a816200b423565b63ffffffff811681146200b438575f80fd5b5f80604083850312156200b47d575f80fd5b82356200b48a816200b459565b915060208301356200b49c816200b423565b809150509250929050565b5f8083601f8401126200b4b8575f80fd5b50813567ffffffffffffffff8111156200b4d0575f80fd5b60208301915083602082850101111562005f7c575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156200b53b576200b53b6200b4e8565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156200b56d576200b56d6200b4e8565b604052919050565b5f67ffffffffffffffff8211156200b591576200b5916200b4e8565b50601f01601f191660200190565b5f82601f8301126200b5af575f80fd5b81356200b5c66200b5c0826200b575565b6200b541565b8181528460208386010111156200b5db575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80606085870312156200b60b575f80fd5b843567ffffffffffffffff808211156200b623575f80fd5b6200b631888389016200b4a7565b909650945060208701359150808211156200b64a575f80fd5b6200b658888389016200b59f565b935060408701359150808211156200b66e575f80fd5b506200b67d878288016200b59f565b91505092959194509250565b5f5b838110156200b6a55781810151838201526020016200b68b565b50505f910152565b5f81518084526200b6c68160208601602086016200b689565b601f01601f19169290920160200192915050565b602081525f6200227a60208301846200b6ad565b60ff811681146200b438575f80fd5b8035600281106200b70c575f80fd5b919050565b5f80604083850312156200b723575f80fd5b82356200b730816200b6ee565b91506200a67d602084016200b6fd565b5f815180845260208085019450602084015f5b838110156200b77a5781516001600160a01b0316875295820195908201906001016200b753565b509495945050505050565b602081525f6200227a60208301846200b740565b5f805f606084860312156200b7ac575f80fd5b833567ffffffffffffffff8111156200b7c3575f80fd5b6200b7d1868287016200b59f565b93505060208401356200b7e4816200b6ee565b915060408401356200b7f6816200b6ee565b809150509250925092565b5f8282518085526020808601955060208260051b840101602086015f5b848110156200b85057601f198684030189526200b83d8383516200b6ad565b988401989250908301906001016200b81e565b5090979650505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b8ee578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b031684528701518784018790526200b8da878501826200b801565b95880195935050908601906001016200b884565b509098975050505050505050565b5f805f805f805f60c0888a0312156200b913575f80fd5b87356200b920816200b459565b965060208801356200b932816200b423565b9550604088013567ffffffffffffffff808211156200b94f575f80fd5b6200b95d8b838c016200b59f565b965060608a0135955060808a013591506200b978826200b423565b90935060a089013590808211156200b98e575f80fd5b506200b99d8a828b016200b4a7565b989b979a50959850939692959293505050565b5f80602083850312156200b9c2575f80fd5b823567ffffffffffffffff8111156200b9d9575f80fd5b6200b9e7858286016200b4a7565b90969095509350505050565b61ffff811681146200b438575f80fd5b5f80604083850312156200ba15575f80fd5b82356200ba22816200b9f3565b946020939093013593505050565b5f805f604084860312156200ba43575f80fd5b833567ffffffffffffffff808211156200ba5b575f80fd5b6200ba69878388016200b4a7565b909550935060208601359150808211156200ba82575f80fd5b506200ba91868287016200b59f565b9150509250925092565b5f67ffffffffffffffff8211156200bab7576200bab76200b4e8565b5060051b60200190565b5f82601f8301126200bad1575f80fd5b813560206200bae46200b5c0836200ba9b565b8083825260208201915060208460051b8701019350868411156200bb06575f80fd5b602086015b848110156200bb2f5780356200bb21816200b423565b83529183019183016200bb0b565b509695505050505050565b5f80604083850312156200bb4c575f80fd5b823567ffffffffffffffff808211156200bb64575f80fd5b6200bb72868387016200bac1565b93506020915081850135818111156200bb89575f80fd5b85019050601f810186136200bb9c575f80fd5b80356200bbad6200b5c0826200ba9b565b81815260059190911b820183019083810190888311156200bbcc575f80fd5b928401925b828410156200bbf75783356200bbe7816200b459565b825292840192908401906200bbd1565b80955050505050509250929050565b5f815180845260208085019450602084015f5b838110156200b77a5781517fffffffff0000000000000000000000000000000000000000000000000000000016875295820195908201906001016200bc19565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b8ee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815180518785526200bcc5888601826200b6ad565b91890151858303868b01529190506200bcdf81836200bc06565b9689019694505050908601906001016200bc80565b5f805f604084860312156200bd07575f80fd5b833567ffffffffffffffff8111156200bd1e575f80fd5b6200bd2c868287016200b4a7565b909790965060209590950135949350505050565b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b60ff85168152606060208201525f6200bd876060830185876200bd40565b905082604083015295945050505050565b5f602082840312156200bda9575f80fd5b813567ffffffffffffffff8111156200bdc0575f80fd5b6200bdce848285016200bac1565b949350505050565b5f805f805f60a086880312156200bdeb575f80fd5b85356200bdf8816200b459565b9450602086013593506040860135925060608601356200be18816200b423565b9150608086013567ffffffffffffffff8111156200be34575f80fd5b6200be42888289016200b59f565b9150509295509295909350565b602081525f6200227a60208301846200b801565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b8ee578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180516001600160a01b031684528701518784018790526200bee0878501826200bc06565b95880195935050908601906001016200be8a565b5f805f805f608086880312156200bf09575f80fd5b853567ffffffffffffffff808211156200bf21575f80fd5b6200bf2f89838a016200b4a7565b909750955060208801359150808211156200bf48575f80fd5b506200bf57888289016200b59f565b9350506040860135915060608601356200bf71816200b423565b809150509295509295909350565b5f80604083850312156200bf91575f80fd5b82356200ba22816200b459565b5f805f606084860312156200bfb1575f80fd5b83356200bfbe816200b6ee565b92506200bfce602085016200b6fd565b9150604084013567ffffffffffffffff8111156200bfea575f80fd5b6200ba91868287016200bac1565b6fffffffffffffffffffffffffffffffff811681146200b438575f80fd5b5f602082840312156200c027575f80fd5b81356200227a816200bff8565b5f805f80604085870312156200c048575f80fd5b843567ffffffffffffffff808211156200c060575f80fd5b6200c06e888389016200b4a7565b909650945060208701359150808211156200c087575f80fd5b506200c096878288016200b4a7565b95989497509550505050565b5f602082840312156200c0b3575f80fd5b81516200227a816200b459565b5f602082840312156200c0d1575f80fd5b5051919050565b5f6001600160a01b03808716835285602084015260a060408401526200c10260a08401866200b6ad565b93166060830152508082036080909101525f81526020019392505050565b855163ffffffff1681526020808701519082015260408087015167ffffffffffffffff16908201526001600160a01b038516606082015283608082015260e060a08201525f6200c17460e08301856200b6ad565b82810360c08401526200c18881856200b6ad565b98975050505050505050565b5f602082840312156200c1a5575f80fd5b81516200227a816200b423565b80516200b70c816200b423565b600181811c908216806200c1d457607f821691505b6020821081036200c20c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff81811683821601908111156200290457620029046200c212565b60ff82811682821603908111156200290457620029046200c212565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6001600160a01b03808a16835280891660208401525086604083015261ffff8616606083015260c060808301526200c2e260c0830185876200bd40565b82810360a08401526200c2f681856200b6ad565b9a9950505050505050505050565b604081525f6200c31860408301856200b6ad565b905060ff831660208301529392505050565b808201808211156200290457620029046200c212565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526200c38460e08501826200b6ad565b905060a083015184820360a08601526200c39f82826200b6ad565b91505060c083015184820360c08601526200a0cc82826200b6ad565b602081525f6200227a60208301846200c340565b5f80604083850312156200c3e1575f80fd5b82516200c3ee816200b423565b602084015190925080151581146200b49c575f80fd5b805167ffffffffffffffff811681146200b70c575f80fd5b80516200b70c816200b6ee565b5f805f606084860312156200c43c575f80fd5b6200c447846200c404565b925060208401516200c459816200b6ee565b60408501519092506200b7f6816200b6ee565b5f82601f8301126200c47c575f80fd5b81516200c48d6200b5c0826200b575565b8181528460208386010111156200c4a2575f80fd5b6200bdce8260208301602087016200b689565b5f602082840312156200c4c6575f80fd5b815167ffffffffffffffff8111156200c4dd575f80fd5b6200bdce848285016200c46c565b5f82601f8301126200c4fb575f80fd5b815160206200c50e6200b5c0836200ba9b565b8083825260208201915060208460051b8701019350868411156200c530575f80fd5b602086015b848110156200bb2f5780516200c54b816200b423565b83529183019183016200c535565b5f602082840312156200c56a575f80fd5b815167ffffffffffffffff808211156200c582575f80fd5b9083019060c082860312156200c596575f80fd5b6200c5a06200b515565b6200c5ab836200c404565b81526200c5bb602084016200c41c565b60208201526200c5ce604084016200c41c565b60408201526200c5e1606084016200c41c565b60608201526080830151828111156200c5f8575f80fd5b6200c606878286016200c4eb565b60808301525060a0830151828111156200c61e575f80fd5b6200c62c878286016200c4eb565b60a08301525095945050505050565b818382375f9101908152919050565b606081525f6200c65e60608301866200b6ad565b905083602083015260ff83166040830152949350505050565b63ffffffff851681526001600160a01b0384166020820152608060408201525f6200c6a660808301856200b6ad565b905082606083015295945050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b8ee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160a063ffffffff82511685526001600160a01b038983015116898601528782015181898701526200c744828701826200b6ad565b9150506060808301518187015250608080830151925085820381870152506200c76e81836200b6ad565b9689019694505050908601906001016200c6de565b604081525f6200c79760408301856200b6ad565b90508260208301529392505050565b5f602082840312156200c7b7575f80fd5b815167ffffffffffffffff808211156200c7cf575f80fd5b9083019060c082860312156200c7e3575f80fd5b6200c7ed6200b515565b6200c5ab836200c1b2565b8281525f82516200c8118160208501602087016200b689565b919091016020019392505050565b606081525f6200c83360608301866200b6ad565b60208301949094525060400152919050565b602081525f6200bdce6020830184866200bd40565b5f816200c86b576200c86b6200c212565b505f190190565b604081525f6200c88660408301856200b6ad565b82810360208401526200a0cc81856200b6ad565b606081525f6200c8ae60608301866200b6ad565b82810360208401526200c8c281866200b6ad565b905082810360408401526200877b81856200b6ad565b608081525f6200c8ec60808301876200b6ad565b82810360208401526200c90081876200b6ad565b9150508360408301526001600160a01b038316606083015295945050505050565b63ffffffff881681525f6001600160a01b03808916602084015260c060408401526200c95160c08401896200b6ad565b876060850152818716608085015283810360a08501526200c9748186886200bd40565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f6001600160a01b038089168352808816602084015260c060408401526200c9dc60c08401886200b740565b8187166060850152818616608085015283810360a08501526200c2f681866200b740565b63ffffffff881681525f602060ff8916602084015260e060408401526200ca2b60e08401896200b740565b6001600160a01b038881166060860152848203608086015287548083525f8981526020808220940191905b818110156200ca765784548416835260019485019492860192016200ca56565b505067ffffffffffffffff881660a087015285810360c08701526200ca9c81886200b740565b9d9c50505050505050505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b8ee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff168552880151888501889052805167ffffffffffffffff16888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200cb766101008801836200b740565b920151868303840160e08801529190506200cb9281836200b740565b978a01979550505091870191506001016200cad4565b602080825282518282018190525f919060409081850190868401855b828110156200cc0b578151805163ffffffff9081168652908701518051909116878601528601516001600160a01b031685850152606090930192908501906001016200cbc4565b5091979650505050505050565b5f602082840312156200cc29575f80fd5b81516200227a816200bff8565b6fffffffffffffffffffffffffffffffff8181168382160280821691908281146200cc65576200cc656200c212565b505092915050565b602080825282518282018190525f919060409081850190868401855b828110156200cc0b578151805163ffffffff90811686529087015180516fffffffffffffffffffffffffffffffff16888701528088015167ffffffffffffffff1687870152860151166060850152608090930192908501906001016200cc89565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b8ee577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403810186528251805163ffffffff16855288015188850188905280516001600160a01b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200cdb26101008801836200b740565b920151868303840160e08801529190506200cdce81836200b740565b978a01979550505091870191506001016200cd11565b602080825282518282018190525f919060409081850190868401855b828110156200cc0b578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c090930192908501906001016200ce00565b602080825282518282018190525f919060409081850190868401855b828110156200cc0b578151805163ffffffff1685528681015167ffffffffffffffff16878601528581015161ffff16868601526060908101516fffffffffffffffffffffffffffffffff1690850152608090930192908501906001016200ce9b565b602080825282518282018190525f919060409081850190868401855b828110156200cc0b578151805163ffffffff1685528601518685015292840192908501906001016200cf19565b865163ffffffff1681526020808801519082015260408088015167ffffffffffffffff16908201526001600160a01b038616606082015284608082015260e060a08201525f6200cf9b60e0830185876200bd40565b82810360c08401526200cfaf81856200b6ad565b9998505050505050505050565b601f82111562001caf57805f5260205f20601f840160051c810160208510156200cfe35750805b601f840160051c820191505b81811015620033a9575f81556001016200cfef565b67ffffffffffffffff8311156200d01f576200d01f6200b4e8565b6200d037836200d03083546200c1bf565b836200cfbc565b5f601f8411600181146200d06b575f85156200d0535750838201355b5f19600387901b1c1916600186901b178355620033a9565b5f83815260208120601f198716915b828110156200d09c57868501358255602094850194600190920191016200d07a565b50868210156200d0b9575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b805160208083015191908110156200c20c575f1960209190910360031b1b16919050565b604081525f6200c79760408301856200c340565b5f80858511156200d112575f80fd5b838611156200d11f575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156200cc655760049490940360031b84901b1690921692915050565b5f805f606084860312156200d186575f80fd5b83516200d193816200bff8565b60208501519093506200d1a6816200b459565b60408501519092506200b7f6816200bff8565b8035602083101562002904575f19602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156200cc655760089490940360031b84901b1690921692915050565b608081525f6200d25b60808301600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d29881600881527f6172624173736574000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b0380851660408401528084166060840152509392505050565b608081525f6200d2f860808301600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d29881600881527f6574684173736574000000000000000000000000000000000000000000000000602082015260400190565b608081525f6200d37260808301600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d29881600881527f706f6c4173736574000000000000000000000000000000000000000000000000602082015260400190565b606081525f6200d3ec60608301600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d42981600881527f6172625368617265000000000000000000000000000000000000000000000000602082015260400190565b9150506001600160a01b038316604083015292915050565b608081525f6200d47e60808301600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d29881600881527f6574685368617265000000000000000000000000000000000000000000000000602082015260400190565b608081525f6200d4f860808301600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b82810360208401526200d29881600881527f706f6c5368617265000000000000000000000000000000000000000000000000602082015260400190565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b838110156200b8ee578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff168885015286015160608785018190526200d5bd818601836200b6ad565b9689019694505050908601906001016200d55c565b5f82516200d5e58184602087016200b689565b9190910192915050565b5f83516200d6028184602088016200b689565b8351908301906200d6188183602088016200b689565b01949350505050565b5f805f606084860312156200d634575f80fd5b83516200d641816200b9f3565b60208501519093506200d1a6816200bff8565b838152826020820152606060408201525f6200a0cc60608301846200b6ad565b5f805f606084860312156200d687575f80fd5b83516200d694816200b6ee565b602085015160409095015190969495509392505050565b5f80604083850312156200d6bd575f80fd5b82516200d6ca816200bff8565b6020939093015192949293505050565b5f80604083850312156200d6ec575f80fd5b82516200d6f9816200bff8565b60208401519092506200b49c816200bff8565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f82516200d77b81602c8501602087016200b689565b91909101602c0195945050505050565b5f80604083850312156200d79d575f80fd5b825167ffffffffffffffff808211156200d7b5575f80fd5b6200d7c3868387016200c46c565b935060208501519150808211156200d7d9575f80fd5b506200d7e8858286016200c46c565b9150509250929050565b5f805f606084860312156200d805575f80fd5b83516200d812816200b6ee565b602085015190935067ffffffffffffffff8111156200d82f575f80fd5b6200d83d868287016200c46c565b925050604084015190509250925092565b6fffffffffffffffffffffffffffffffff818116838216019080821115620046d557620046d56200c212565b63ffffffff818116838216019080821115620046d557620046d56200c212565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156200cc655760029490940360031b84901b1690921692915050565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156200cc655760109490940360031b84901b169092169291505056fe60c06040526001600d5534801562000015575f80fd5b5060405162005fc238038062005fc28339810160408190526200003891620002c2565b81816001600160a01b0381166200006957604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007481620000c8565b5063ffffffff166080526040516200008c90620002b4565b604051809103905ff080158015620000a6573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c09062000117565b505062000338565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200012162000284565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200016b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000191919062000310565b620001af5760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001e95760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002b25760405163118cdaa760e01b815233600482015260240162000060565b565b6102818062005d4183390190565b5f8060408385031215620002d4575f80fd5b825163ffffffff81168114620002e8575f80fd5b60208401519092506001600160a01b038116811462000305575f80fd5b809150509250929050565b5f6020828403121562000321575f80fd5b8151801515811462000331575f80fd5b9392505050565b60805160a0516159c46200037d5f395f61078601525f818161054301528181612d7701528181613782015281816137e801528181613f570152613fbd01526159c45ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b73578063ef667aa114610b92578063f2fde38b14610bdb578063f64be4c714610bfa575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b54575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614886565b610c2e565b005b348015610374575f80fd5b5061037d610d41565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c036600461492e565b610d71565b6103d86103d3366004614976565b6110f2565b60405161039d91906149c5565b3480156103f0575f80fd5b506103676103ff366004614a07565b611258565b34801561040f575f80fd5b5061042361041e366004614a72565b611315565b60405161039d9190614b2e565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614b57565b61142b565b34801561049b575f80fd5b506104636104aa366004614bb9565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614bf8565b6115ff565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614b57565b611694565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614c20565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614c39565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614c72565b611841565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614c8b565b61188f565b34801561067e575f80fd5b5061036761068d36600461492e565b611904565b34801561069d575f80fd5b506103676106ac366004614d7f565b611df9565b3480156106bc575f80fd5b506103676106cb366004614e59565b611e63565b3480156106db575f80fd5b5061070e6106ea366004614c72565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614c72565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f31565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004614ee3565b611f44565b3480156107ea575f80fd5b506106446107f9366004614f30565b612047565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120b2565b60405161039d9190614f59565b610367610849366004614fa5565b612112565b348015610859575f80fd5b50610367610868366004615049565b6122ce565b348015610878575f80fd5b5061060c610887366004614c39565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd366004615049565b6125c0565b3480156108dd575f80fd5b5061060c6108ec366004614c39565b612694565b3480156108fc575f80fd5b5061036761090b366004615089565b61272b565b34801561091b575f80fd5b5061036761092a3660046150b2565b612b2a565b34801561093a575f80fd5b506103676109493660046150cd565b612b42565b348015610959575f80fd5b50610463610968366004614c39565b612cd8565b348015610978575f80fd5b50610367610987366004615107565b612de6565b348015610997575f80fd5b506105ae6109a6366004614bf8565b61309d565b3480156109b6575f80fd5b506103676109c5366004614c20565b613123565b3480156109d5575f80fd5b506106446109e4366004614f30565b613198565b3480156109f4575f80fd5b50610463610a03366004615121565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614c20565b6131fc565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a366004615089565b613273565b348015610a8a575f80fd5b50610367610a99366004615121565b61356e565b348015610aa9575f80fd5b50610644610ab8366004614c20565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614bf8565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614976565b613690565b60405161039d9190615160565b348015610b4d575f80fd5b505f6105ae565b348015610b5f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b7e575f80fd5b50610367610b8d366004614c20565b6139b1565b348015610b9d575f80fd5b5061070e610bac366004614bf8565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610be6575f80fd5b50610367610bf5366004614c20565b613bab565b348015610c05575f80fd5b506105ae610c14366004614c72565b60096020525f90815260409020546001600160a01b031681565b610c7d86610c3f60208a018a614c72565b60208a0135610c5460608c0160408d01615177565b898989604051602001610c6993929190615190565b604051602081830303815290604052613c01565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cd1908b908a908a908a9033908b908b9060040161522a565b5f604051808303818588803b158015610ce8575f80fd5b505af1158015610cfa573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d30929190615280565b60405180910390a150505050505050565b5f80610d50600d546001141590565b610d5b575f80610d69565b610d69600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610dc4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e7d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3591906152d1565b6002811115610e4657610e466152a4565b03610e7d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f49576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610eef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1391906152fc565b610f49576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f5288613e3f565b5f610f5d89896115ff565b9150508015610f98576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03610ff6576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001015561108c565b43861161102f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b6110fa6147d8565b6111076020840184614c72565b336001600d5414611144576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d5561118390860160808701615317565b80156111985750600e546001600160a01b0316155b156111cf576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111db3388613ea8565b915091505f6111e73490565b90505f6112026111fd60a08b0160808c01615317565b614180565b90506112138460400151838361424a565b600e54604085015160200151611235916001600160a01b03169083868c6142b1565b6040840151516112479083858b6142de565b50506001600d555095945050505050565b61126185613e3f565b5f83838360405160200161127793929190615190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112d3866112b86020880188614c72565b60208801356112cd60608a0160408b01615177565b85613c01565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611305929190615280565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661136b576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113dc573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261142191908101906153f8565b9695505050505050565b61143485613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114bf576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061150b575080155b1561154e576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611305565b6001600160a01b038083165f90815260076020908152604080832063ffffffff86168452909152812054909116908161168d5763ffffffff83165f908152600a60205260409020546001600160a01b0316915081611689576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b61169d85613e3f565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611723576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114b6565b80158061176d57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117b0576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114b6565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611305565b63ffffffff81165f908152600960205260408120546001600160a01b031615801590611889575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516118ee9a9998979695949392919061542a565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561193657506001600160a01b03811615155b1561196d576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a26575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119de91906152d1565b60028111156119ef576119ef6152a4565b03611a26576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611af2576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611a98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611abc91906152fc565b611af2576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611afb88613e3f565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b62576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d4f576001600160a01b0381161580611c1c57506001600160a01b038716155b15611c53576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c7a91906154bf565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d41918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611dee565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110df565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e4e9a999897969594939291906154d2565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611eb6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ebf85613e3f565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f0890889087908790600401615530565b5f604051808303815f87803b158015611f1f575f80fd5b505af1158015611dee573d5f803e3d5ffd5b611f39614308565b611f425f61434d565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fb2576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fc292919061567b565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161203891908890889088908890889061568a565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120ab9185918591859061207690850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166143b4565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561210857602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116120ea575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161215c908790879061567b565b604051809103902090508082146121a9576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114b6565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612230908e908d908c908c9033908d908d906004016156d2565b5f604051808303818588803b158015612247575f80fd5b505af1158015612259573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122ba94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561230057506001600160a01b03811615155b15612337576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b038116156123f1576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612385573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a991906152d1565b60028111156123ba576123ba6152a4565b036123f1576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124bd576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612463573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248791906152fc565b6124bd576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c687613e3f565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361252c576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d30565b5f805f6125cd86866115ff565b91509150816001600160a01b0316846001600160a01b0316036125f5576001925050506120ab565b5f81612628576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061263d565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126775750438160200151115b1561268857600193505050506120ab565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612723576001016126d0565b949350505050565b612733614308565b6001600160a01b0382165f90815260056020526040902054829060ff16612786576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561283f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f791906152d1565b6002811115612808576128086152a4565b0361283f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561290b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d591906152fc565b61290b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612966576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612a965763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a3b87436154bf565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b20565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b32614308565b612b3d83838361444c565b505050565b612b5982612b536020860186614c72565b336125c0565b612b8f576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bb790870187614c72565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612bf48484836143b4565b612c2a576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c3584848361446f565b612c6b576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c9783612c7c6020870187614c72565b6020870135612c916060890160408a01615177565b86614528565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612cca93929190615725565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d209067ffffffffffffffff16600161574d565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612dee614308565b6001600160a01b0381165f90815260056020526040902054819060ff16612e41576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612efb576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eb391906152d1565b6002811115612ec457612ec46152a4565b03612efb576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fc7576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9191906152fc565b612fc7576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613020576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611305565b6001600160a01b038083165f90815260066020908152604080832063ffffffff861684529091529020541680611889575063ffffffff81165f908152600960205260409020546001600160a01b031680611889576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61312b614308565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b0381165f90815260016020908152604082206120ab918591859185906131c790850185614c72565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff1661446f565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981910161318d565b6001600160a01b0382165f90815260056020526040902054829060ff166132c6576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561337f575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613313573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333791906152d1565b6002811115613348576133486152a4565b0361337f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561344b576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156133f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061341591906152fc565b61344b576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613453614308565b845f0361349d5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613522565b4385116134d6576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d30565b61357784613e3f565b613582848484612694565b61358d90600161574d565b67ffffffffffffffff168167ffffffffffffffff16146135e5576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612cca565b604080518082019091525f80825260208201526136b360a0840160808501615317565b80156136c85750600e546001600160a01b0316155b156136ff576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061372790870187614c72565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137629067ffffffffffffffff16600161574d565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137cd9190614c72565b63ffffffff168152602001866020013581526020016138c7847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061381a9190614c72565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b81526020016138d9604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139259050856109a66020890189614c72565b90506001600160a01b03811663d80e9bd98361394460608a018a61576e565b61395460a08c0160808d01615317565b6040518563ffffffff1660e01b815260040161397394939291906157cf565b6040805180830381865afa15801561398d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142191906158c3565b6139b9614308565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5891906152fc565b613a8e576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613ae0576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161318d565b613bb3614308565b6001600160a01b038116613bf5576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114b6565b613bfe8161434d565b50565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d5957600181015b8467ffffffffffffffff168167ffffffffffffffff1611613cf5576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613ced576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114b6565b600101613c4d565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613dec576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114b6565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613e7157506001600160a01b038181165f908152600f6020526040902054163314155b15613bfe576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613eb06147d8565b5f80613f3785613ec36020870187614c72565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fa29190614c72565b63ffffffff16815260200186602001358152602001613fef847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061381a9190614c72565b8152602001614001604088018861576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061404d9050876109a66020890189614c72565b90505f806001600160a01b038316634389e58f8561406e60608c018c61576e565b61407e60a08e0160808f01615317565b6040518563ffffffff1660e01b815260040161409d94939291906157cf565b5f604051808303815f875af11580156140b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526140fd91908101906158dd565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161413160608b018b61576e565b866040516141429493929190615929565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b5f811561424557600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156141e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061420a9190615969565b9050805f03614245576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b825182108061425c5750808360200151115b15612b3d57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114b6565b83156142c2576142c28583866145a7565b828410156142d7576142d785828686036145a7565b5050505050565b83156142ee576142ee82856145fb565b8284101561430257614302818585036145fb565b50505050565b5f546001600160a01b03163314611f42576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114b6565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061272357506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d9061440d908790600401615980565b602060405180830381865afa158015614428573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272391906152fc565b6001600160a01b03831661446457612b3d82826145fb565b612b3d8383836145a7565b5f67ffffffffffffffff821661448b6060860160408701615177565b67ffffffffffffffff16118061272357506001600160a01b0383165f90815260026020908152604082209082906144c490880188614c72565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f8660400160208101906145049190615177565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b8061455f576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6001600160a01b0382166145e7576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b3d6001600160a01b03841683836146d6565b6001600160a01b03821661463b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614684576040519150601f19603f3d011682016040523d82523d5f602084013e614689565b606091505b5050905080612b3d576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114b6565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b3d93879390925f9283929183919082885af180614772576040513d5f823e3d81fd5b50505f513d91508115614789578060011415614796565b6001600160a01b0384163b155b15614302576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114b6565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161481760405180604001604052805f81526020015f81525090565b905290565b5f6060828403121561482c575f80fd5b50919050565b80356001600160a01b0381168114614245575f80fd5b5f8083601f840112614858575f80fd5b50813567ffffffffffffffff81111561486f575f80fd5b60208301915083602082850101111561168d575f80fd5b5f805f805f805f60e0888a03121561489c575f80fd5b6148a6898961481c565b96506148b460608901614832565b95506080880135945060a088013567ffffffffffffffff808211156148d7575f80fd5b6148e38b838c01614848565b909650945060c08a01359150808211156148fb575f80fd5b506149088a828b01614848565b989b979a50959850939692959293505050565b803563ffffffff81168114614245575f80fd5b5f805f8060808587031215614941575f80fd5b61494a85614832565b93506149586020860161491b565b925061496660408601614832565b9396929550929360600135925050565b5f8060408385031215614987575f80fd5b823567ffffffffffffffff81111561499d575f80fd5b830160a081860312156149ae575f80fd5b91506149bc60208401614832565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614a00604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614a1b575f80fd5b614a2486614832565b9450614a33876020880161481c565b93506080860135925060a086013567ffffffffffffffff811115614a55575f80fd5b614a6188828901614848565b969995985093965092949392505050565b5f805f8060808587031215614a85575f80fd5b614a8e85614832565b9350614a9c60208601614832565b9250614aaa6040860161491b565b9150614ab86060860161491b565b905092959194509250565b5f5b83811015614add578181015183820152602001614ac5565b50505f910152565b5f8151808452614afc816020860160208601614ac3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120ab6020830184614ae5565b803567ffffffffffffffff81168114614245575f80fd5b5f805f805f60a08688031215614b6b575f80fd5b614b7486614832565b9450614b826020870161491b565b935060408601359250614b9760608701614b40565b949793965091946080013592915050565b803561ffff81168114614245575f80fd5b5f805f8060808587031215614bcc575f80fd5b614bd585614832565b9350614be360208601614832565b925060408501359150614ab860608601614ba8565b5f8060408385031215614c09575f80fd5b614c1283614832565b91506149bc6020840161491b565b5f60208284031215614c30575f80fd5b6120ab82614832565b5f805f60608486031215614c4b575f80fd5b614c5484614832565b9250614c626020850161491b565b9150604084013590509250925092565b5f60208284031215614c82575f80fd5b6120ab8261491b565b5f805f805f805f805f805f806101208d8f031215614ca7575f80fd5b614cb08d614832565b9b50614cbe60208e01614832565b9a5060408d01359950614cd360608e01614ba8565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614cfb575f80fd5b614d0b8e60c08f01358f01614848565b909650945067ffffffffffffffff60e08e01351115614d28575f80fd5b614d388e60e08f01358f01614848565b909450925067ffffffffffffffff6101008e01351115614d56575f80fd5b614d678e6101008f01358f01614848565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614d9a575f80fd5b614da48d8d61481c565b9a50614db260608d01614832565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614de2575f80fd5b614df28e60e08f01358f01614848565b90975095506101008d0135811015614e08575f80fd5b614e198e6101008f01358f01614848565b90955093506101208d0135811015614e2f575f80fd5b50614e418d6101208e01358e01614848565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614e6c575f80fd5b614e7585614832565b9350614e8360208601614832565b9250604085013567ffffffffffffffff80821115614e9f575f80fd5b818701915087601f830112614eb2575f80fd5b813581811115614ec0575f80fd5b8860208260051b8501011115614ed4575f80fd5b95989497505060200194505050565b5f805f805f60808688031215614ef7575f80fd5b614f0086614832565b945060208601359350614f1560408701614ba8565b9250606086013567ffffffffffffffff811115614a55575f80fd5b5f8060808385031215614f41575f80fd5b614f4b848461481c565b91506149bc60608401614832565b602080825282518282018190525f9190848201906040850190845b81811015614f995783516001600160a01b031683529284019291840191600101614f74565b50909695505050505050565b5f805f805f805f8060c0898b031215614fbc575f80fd5b614fc589614832565b9750614fd360208a01614832565b965060408901359550614fe860608a01614ba8565b9450608089013567ffffffffffffffff80821115615004575f80fd5b6150108c838d01614848565b909650945060a08b0135915080821115615028575f80fd5b506150358b828c01614848565b999c989b5096995094979396929594505050565b5f805f6060848603121561505b575f80fd5b61506484614832565b92506150726020850161491b565b915061508060408501614832565b90509250925092565b5f805f6060848603121561509b575f80fd5b6150a48461491b565b9250614c6260208501614832565b5f805f606084860312156150c4575f80fd5b6150a484614832565b5f805f60a084860312156150df575f80fd5b6150e9858561481c565b92506150f760608501614832565b9150608084013590509250925092565b5f8060408385031215615118575f80fd5b6149ae8361491b565b5f805f8060808587031215615134575f80fd5b61513d85614832565b935061514b6020860161491b565b925060408501359150614ab860608601614b40565b815181526020808301519082015260408101611889565b5f60208284031215615187575f80fd5b6120ab82614b40565b838152818360208301375f910160200190815292915050565b63ffffffff6151b78261491b565b1682526020810135602083015267ffffffffffffffff6151d960408301614b40565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b61523481896151a9565b86606082015260e060808201525f61525060e0830187896151e3565b6001600160a01b03861660a084015282810360c08401526152728185876151e3565b9a9950505050505050505050565b6080810161528e82856151a9565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f602082840312156152e1575f80fd5b8151600381106120ab575f80fd5b8015158114613bfe575f80fd5b5f6020828403121561530c575f80fd5b81516120ab816152ef565b5f60208284031215615327575f80fd5b81356120ab816152ef565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011261536e575f80fd5b815167ffffffffffffffff8082111561538957615389615332565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156153cf576153cf615332565b816040528381528660208588010111156153e7575f80fd5b611421846020830160208901614ac3565b5f60208284031215615408575f80fd5b815167ffffffffffffffff81111561541e575f80fd5b6127238482850161535f565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f61545960e08301888a6151e3565b82810360a084015261546c8187896151e3565b905082810360c08401526154818185876151e3565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561188957611889615492565b5f6101206154e0838e6151a9565b8b60608401528a60808401528960a08401528060c0840152615505818401898b6151e3565b905082810360e084015261551a8187896151e3565b90508281036101008401526154818185876151e3565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b8981101561566b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c36030181126155c4575f80fd5b8b0163ffffffff806155d58361491b565b168552806155e488840161491b565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811261561d575f80fd5b01858101903567ffffffffffffffff811115615637575f80fd5b803603821315615645575f80fd5b878986015261565788860182846151e3565b958701959450505090840190600101615564565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a060808301526156c660a0830184866151e3565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a060408401526156fb60a08401888a6151e3565b818716606085015283810360808501526157168186886151e3565b9b9a5050505050505050505050565b60a0810161573382866151a9565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614a0057614a00615492565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126157a1575f80fd5b83018035915067ffffffffffffffff8211156157bb575f80fd5b60200191503681900382131561168d575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f606086015161581f60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152615850610140840182614ae5565b905082810360208401526158658186886151e3565b915050612ddd604083018415159052565b5f60408284031215615886575f80fd5b6040516040810181811067ffffffffffffffff821117156158a9576158a9615332565b604052825181526020928301519281019290925250919050565b5f604082840312156158d3575f80fd5b6120ab8383615876565b5f80606083850312156158ee575f80fd5b6158f88484615876565b9150604083015167ffffffffffffffff811115615913575f80fd5b61591f8582860161535f565b9150509250929050565b606081525f61593b6060830187614ae5565b828103602084015261594e8186886151e3565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615979575f80fd5b5051919050565b6060810161188982846151a956fea2646970667358221220938f9466c98d432f294c8fa92afa649818bd8c0b591d10b7b71b464300e2a18764736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c6343000816003360e06040526001600d5534801562000015575f80fd5b5060405162006193380380620061938339810160408190526200003891620002ef565b828281816001600160a01b0381166200006b57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200007681620000d9565b5063ffffffff166080526040516200008e90620002c5565b604051809103905ff080158015620000a8573d5f803e3d5ffd5b506001600160a01b031660a0819052620000c29062000128565b50506001600160a01b031660c05250620003679050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200013262000295565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200017c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a291906200033f565b620001c05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615620001fa5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381165f818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b5f546001600160a01b03163314620002c35760405163118cdaa760e01b815233600482015260240162000062565b565b6102818062005f1283390190565b80516001600160a01b0381168114620002ea575f80fd5b919050565b5f805f6060848603121562000302575f80fd5b835163ffffffff8116811462000316575f80fd5b92506200032660208501620002d3565b91506200033660408501620002d3565b90509250925092565b5f6020828403121562000350575f80fd5b8151801515811462000360575f80fd5b9392505050565b60805160a05160c051615b48620003ca5f395f8181610b500152818161314e015281816141df01526143f001525f61078601525f818161054301528181612d98015281816137b40152818161381a01528181613f860152613fec0152615b485ff3fe608060405260043610610350575f3560e01c80639132e5c3116101bd578063c9fc7bcd116100f2578063ddc28c5811610092578063e8964e811161006d578063e8964e8114610b93578063ef667aa114610bb2578063f2fde38b14610bfb578063f64be4c714610c1a575f80fd5b8063ddc28c5814610b16578063e1758bd814610b42578063e4fe1d9414610b74575f80fd5b8063d4b4ec8f116100cd578063d4b4ec8f14610a60578063d70b890214610a7f578063dc706a6214610a9e578063dc93c8a214610acc575f80fd5b8063c9fc7bcd146109e9578063ca5eb5e114610a2e578063cb5026b914610a4d575f80fd5b8063a7229fd91161015d578063aafea31211610138578063aafea3121461096d578063b96a277f1461098c578063c28e0eed146109ab578063c9a54a99146109ca575f80fd5b8063a7229fd914610910578063a825d7471461092f578063aafe5e071461094e575f80fd5b80639c6d7340116101985780639c6d73401461086d5780639d7f9775146108b3578063a0dd43fc146108d2578063a718531b146108f1575f80fd5b80639132e5c31461081a57806391d20fa11461083b5780639535ff301461084e575f80fd5b80635b17bb70116102935780636f50a8031161023357806379624ca91161020e57806379624ca9146107a85780637cb59012146107c0578063861e1ca5146107df5780638da5cb5b146107fe575f80fd5b80636f50a8031461072d578063715018a6146107615780637331809114610775575f80fd5b80636a14d7151161026e5780636a14d715146106735780636bf73fa3146106925780636dbd9f90146106b15780636e83f5bb146106d0575f80fd5b80635b17bb70146105c65780636750cd4c14610625578063697fe6b614610654575f80fd5b80632baf0be7116102fe578063402f8468116102d9578063402f8468146104d557806340f8068314610513578063416ecebf14610532578063587cde1e1461057a575f80fd5b80632baf0be7146104305780632e80fbf31461047157806335d330b014610490575f80fd5b80632637a4501161032e5780632637a450146103c55780632a56c1b0146103e55780632b3197b914610404575f80fd5b80630c0c389e1461035457806314f651a914610369578063183c834f146103a6575b5f80fd5b610367610362366004614a0a565b610c4e565b005b348015610374575f80fd5b5061037d610d61565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b1575f80fd5b506103676103c0366004614ab2565b610d91565b6103d86103d3366004614afa565b611112565b60405161039d9190614b49565b3480156103f0575f80fd5b506103676103ff366004614b8b565b611279565b34801561040f575f80fd5b5061042361041e366004614bf6565b611336565b60405161039d9190614cb2565b34801561043b575f80fd5b506104637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405190815260200161039d565b34801561047c575f80fd5b5061036761048b366004614cdb565b61144c565b34801561049b575f80fd5b506104636104aa366004614d3d565b600c60209081525f948552604080862082529385528385208152918452828420909152825290205481565b3480156104e0575f80fd5b506104f46104ef366004614d7c565b611620565b604080516001600160a01b03909316835290151560208301520161039d565b34801561051e575f80fd5b5061036761052d366004614cdb565b6116b5565b34801561053d575f80fd5b506105657f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039d565b348015610585575f80fd5b506105ae610594366004614da4565b600f6020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156105d1575f80fd5b5061060c6105e0366004614dbd565b600160209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161039d565b348015610630575f80fd5b5061064461063f366004614df6565b611862565b604051901515815260200161039d565b34801561065f575f80fd5b5061036761066e366004614e0f565b6118b0565b34801561067e575f80fd5b5061036761068d366004614ab2565b611925565b34801561069d575f80fd5b506103676106ac366004614f03565b611e1a565b3480156106bc575f80fd5b506103676106cb366004614fdd565b611e84565b3480156106db575f80fd5b5061070e6106ea366004614df6565b600b6020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039d565b348015610738575f80fd5b506105ae610747366004614df6565b600a6020525f90815260409020546001600160a01b031681565b34801561076c575f80fd5b50610367611f52565b348015610780575f80fd5b506105ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b3575f80fd5b50600d5460011415610644565b3480156107cb575f80fd5b506103676107da366004615067565b611f65565b3480156107ea575f80fd5b506106446107f93660046150b4565b612068565b348015610809575f80fd5b505f546001600160a01b03166105ae565b348015610825575f80fd5b5061082e6120d3565b60405161039d91906150dd565b610367610849366004615129565b612133565b348015610859575f80fd5b506103676108683660046151cd565b6122ef565b348015610878575f80fd5b5061060c610887366004614dbd565b600360209081525f938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108be575f80fd5b506106446108cd3660046151cd565b6125e1565b3480156108dd575f80fd5b5061060c6108ec366004614dbd565b6126b5565b3480156108fc575f80fd5b5061036761090b36600461520d565b61274c565b34801561091b575f80fd5b5061036761092a366004615236565b612b4b565b34801561093a575f80fd5b50610367610949366004615251565b612b63565b348015610959575f80fd5b50610463610968366004614dbd565b612cf9565b348015610978575f80fd5b5061036761098736600461528b565b612e07565b348015610997575f80fd5b506105ae6109a6366004614d7c565b6130be565b3480156109b6575f80fd5b506103676109c5366004614da4565b613144565b3480156109d5575f80fd5b506106446109e43660046150b4565b6131c3565b3480156109f4575f80fd5b50610463610a033660046152a5565b600260209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610a39575f80fd5b50610367610a48366004614da4565b613227565b348015610a58575f80fd5b506104635f81565b348015610a6b575f80fd5b50610367610a7a36600461520d565b6132a5565b348015610a8a575f80fd5b50610367610a993660046152a5565b6135a0565b348015610aa9575f80fd5b50610644610ab8366004614da4565b60056020525f908152604090205460ff1681565b348015610ad7575f80fd5b50610644610ae6366004614d7c565b6001600160a01b039182165f90815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b21575f80fd5b50610b35610b30366004614afa565b6136c2565b60405161039d91906152e4565b348015610b4d575f80fd5b507f00000000000000000000000000000000000000000000000000000000000000006105ae565b348015610b7f575f80fd5b50600e546105ae906001600160a01b031681565b348015610b9e575f80fd5b50610367610bad366004614da4565b6139e3565b348015610bbd575f80fd5b5061070e610bcc366004614d7c565b600860209081525f9283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c06575f80fd5b50610367610c15366004614da4565b613bdd565b348015610c25575f80fd5b506105ae610c34366004614df6565b60096020525f90815260409020546001600160a01b031681565b610c9d86610c5f60208a018a614df6565b60208a0135610c7460608c0160408d016152fb565b898989604051602001610c8993929190615314565b604051602081830303815290604052613c30565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610cf1908b908a908a908a9033908b908b906004016153ae565b5f604051808303818588803b158015610d08575f80fd5b505af1158015610d1a573d5f803e3d5ffd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d50929190615404565b60405180910390a150505050505050565b5f80610d70600d546001141590565b610d7b575f80610d89565b610d89600d5460a081901c91565b915091509091565b6001600160a01b0382165f90815260056020526040902054829060ff16610de4576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610e9d575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e559190615455565b6002811115610e6657610e66615428565b03610e9d576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610f69576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610f0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f339190615480565b610f69576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f7288613e6e565b5f610f7d8989611620565b9150508015610fb8576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855f03611016576001600160a01b0389165f90815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600101556110ac565b43861161104f576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f90815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b61111a61495c565b6111276020840184614df6565b336001600d5414611164576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d556111a39086016080870161549b565b80156111b85750600e546001600160a01b0316155b156111ef576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806111fb3388613ed7565b915091505f6112086141af565b90505f61122361121e60a08b0160808c0161549b565b614255565b90506112348460400151838361431f565b600e54604085015160200151611256916001600160a01b03169083868c614386565b6040840151516112689083858b6143b3565b50506001600d555095945050505050565b61128285613e6e565b5f83838360405160200161129893929190615314565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506112f4866112d96020880188614df6565b60208801356112ee60608a0160408b016152fb565b85613c30565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048587604051611326929190615404565b60405180910390a1505050505050565b6001600160a01b0383165f90815260056020526040902054606090849060ff1661138c576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf7906064015f60405180830381865afa1580156113fd573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611442919081019061557c565b9695505050505050565b61145585613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff861684529091529020548181146114e0576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff9081169084161180159061152c575080155b1561156f576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a001611326565b6001600160a01b038083165f90815260076020908152604080832063ffffffff8616845290915281205490911690816116ae5763ffffffff83165f908152600a60205260409020546001600160a01b03169150816116aa576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b6116be85613e6e565b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611744576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016114d7565b80158061178e57506001600160a01b0386165f90815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b156117d1576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016114d7565b6001600160a01b0386165f81815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a001611326565b63ffffffff81165f908152600960205260408120546001600160a01b0316158015906118aa575063ffffffff82165f908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d60405161190f9a999897969594939291906155ae565b60405180910390a4505050505050505050505050565b6001600160a01b0382165f90815260056020526040902054829060ff1615801561195757506001600160a01b03811615155b1561198e576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611a47575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ff9190615455565b6002811115611a1057611a10615428565b03611a47576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611b13576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611ab9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611add9190615480565b611b13576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b1c88613e6e565b6001600160a01b038089165f90815260076020908152604080832063ffffffff8c16845290915290205481169087168103611b83576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038981165f81815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611d70576001600160a01b0381161580611c3d57506001600160a01b038716155b15611c74576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040518060400160405280836001600160a01b031681526020018843611c9b9190615643565b90526001600160a01b03808c165f90815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611d62918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611e0f565b6001600160a01b038981165f81815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080016110ff565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611e6f9a99989796959493929190615656565b60405180910390a35050505050505050505050565b6001600160a01b0383165f90815260056020526040902054839060ff16611ed7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ee085613e6e565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f29908890879087906004016156b4565b5f604051808303815f87803b158015611f40575f80fd5b505af1158015611e0f573d5f803e3d5ffd5b611f5a61441e565b611f635f614463565b565b335f908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611fd3576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181604051611fe39291906157ff565b60408051918290038220335f818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc19161205991908890889088908890889061580e565b60405180910390a15050505050565b6001600160a01b0381165f90815260016020908152604082206120cc9185918591859061209790850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff166144ca565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561212957602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161210b575b5050505050905090565b6001600160a01b038089165f908152600c60209081526040808320938b168352928152828220898352815282822061ffff89168352905281812054915161217d90879087906157ff565b604051809103902090508082146121ca576040517f35ca595f00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016114d7565b6001600160a01b03808b165f908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a10260903490612251908e908d908c908c9033908d908d90600401615856565b5f604051808303818588803b158015612268575f80fd5b505af115801561227a573d5f803e3d5ffd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a6040516122db94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b0381165f90815260056020526040902054819060ff1615801561232157506001600160a01b03811615155b15612358576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612412576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ca9190615455565b60028111156123db576123db615428565b03612412576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b038216156124de576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612484573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124a89190615480565b6124de576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124e787613e6e565b6001600160a01b038781165f90815260066020908152604080832063ffffffff8b16845290915290205481871691160361254d576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038781165f81815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d50565b5f805f6125ee8686611620565b91509150816001600160a01b0316846001600160a01b031603612616576001925050506120cc565b5f81612649576001600160a01b0387165f90815260086020908152604080832063ffffffff8a168452909152902061265e565b63ffffffff86165f908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156126985750438160200151115b156126a957600193505050506120cc565b505f9695505050505050565b6001600160a01b0383165f90815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b0385165f90815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff6001860116845290915290205415612744576001016126f1565b949350505050565b61275461441e565b6001600160a01b0382165f90815260056020526040902054829060ff166127a7576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615612860575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128189190615455565b600281111561282957612829615428565b03612860576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561292c576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f69190615480565b61292c576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600a60205260409020546001600160a01b039081169087168103612987576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88165f818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612ab75763ffffffff88165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612a5c8743615643565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612b41565b63ffffffff88165f818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612b5361441e565b612b5e838383614562565b505050565b612b7a82612b746020860186614df6565b336125e1565b612bb0576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f9081526001602090815260408220908290612bd890870187614df6565b63ffffffff16815260208082019290925260409081015f90812087840135825290925290205467ffffffffffffffff169050612c158484836144ca565b612c4b576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c56848483614585565b612c8c576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cb883612c9d6020870187614df6565b6020870135612cb26060890160408a016152fb565b8661463e565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612ceb939291906158a9565b60405180910390a150505050565b6001600160a01b0383165f90815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612d419067ffffffffffffffff1660016158d1565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612e0f61441e565b6001600160a01b0381165f90815260056020526040902054819060ff16612e62576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612f1c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed49190615455565b6002811115612ee557612ee5615428565b03612f1c576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612fe8576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612f8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fb29190615480565b612fe8576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f908152600960205260409020546001600160a01b03808716911603613041576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86165f8181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f59101611326565b6001600160a01b038083165f90815260066020908152604080832063ffffffff8616845290915290205416806118aa575063ffffffff81165f908152600960205260409020546001600160a01b0316806118aa576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61314c61441e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036131b7576040517f10647d0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131c0816146bd565b50565b6001600160a01b0381165f90815260016020908152604082206120cc918591859185906131f290850185614df6565b63ffffffff16815260208082019290925260409081015f90812089840135825290925290205467ffffffffffffffff16614585565b335f818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d798398191015b60405180910390a150565b6001600160a01b0382165f90815260056020526040902054829060ff166132f8576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b038116156133b1575f816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133699190615455565b600281111561337a5761337a615428565b036133b1576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561347d576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015613423573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134479190615480565b61347d576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61348561441e565b845f036134cf5763ffffffff87165f908152600b6020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010155613554565b438511613508576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87165f908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d50565b6135a984613e6e565b6135b48484846126b5565b6135bf9060016158d1565b67ffffffffffffffff168167ffffffffffffffff1614613617576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b6001600160a01b0384165f81815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612ceb565b604080518082019091525f80825260208201526136e560a084016080850161549b565b80156136fa5750600e546001600160a01b0316155b15613731576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600360209081526040822090829061375990870187614df6565b63ffffffff16815260208082019290925260409081015f9081208784013582529092529020546137949067ffffffffffffffff1660016158d1565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001865f0160208101906137ff9190614df6565b63ffffffff168152602001866020013581526020016138f9847f0000000000000000000000000000000000000000000000000000000000000000888a5f01602081019061384c9190614df6565b8b602001355f85856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b815260200161390b60408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525092935091506139579050856109a66020890189614df6565b90506001600160a01b03811663d80e9bd98361397660608a018a6158f2565b61398660a08c0160808d0161549b565b6040518563ffffffff1660e01b81526004016139a59493929190615953565b6040805180830381865afa1580156139bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114429190615a47565b6139eb61441e565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613a66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a8a9190615480565b613ac0576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f9081526005602052604090205460ff1615613b12576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910161329a565b613be561441e565b6001600160a01b038116613c27576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016114d7565b6131c081614463565b6001600160a01b0385165f90815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613d8857600181015b8467ffffffffffffffff168167ffffffffffffffff1611613d24576001600160a01b0388165f90815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613d1c576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016114d7565b600101613c7c565b506001600160a01b0387165f90815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b0389165f90815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613e1b576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044016114d7565b50506001600160a01b039095165f90815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613ea057506001600160a01b038181165f908152600f6020526040902054163314155b156131c0576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613edf61495c565b5f80613f6685613ef26020870187614df6565b6001600160a01b03919091165f90815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b90505f6040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b03168152602001865f016020810190613fd19190614df6565b63ffffffff1681526020018660200135815260200161401e847f00000000000000000000000000000000000000000000000000000000000000008a8a5f01602081019061384c9190614df6565b815260200161403060408801886158f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250929350915061407c9050876109a66020890189614df6565b90505f806001600160a01b038316634389e58f8561409d60608c018c6158f2565b6140ad60a08e0160808f0161549b565b6040518563ffffffff1660e01b81526004016140cc9493929190615953565b5f604051808303815f875af11580156140e7573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261412c9190810190615a61565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161416060608b018b6158f2565b866040516141719493929190615aad565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561422c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142509190615aed565b905090565b5f811561431a57600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156142bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142df9190615aed565b9050805f0361431a576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b82518210806143315750808360200151115b15612b5e57825160208401516040517f4f3ec0d30000000000000000000000000000000000000000000000000000000081526004810192909252602482018490526044820152606481018290526084016114d7565b83156143975761439785838661472b565b828410156143ac576143ac858286860361472b565b5050505050565b34156143eb576040517f9a317a5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144187f000000000000000000000000000000000000000000000000000000000000000085858585614386565b50505050565b5f546001600160a01b03163314611f63576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016114d7565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808267ffffffffffffffff16118061274457506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d90614523908790600401615b04565b602060405180830381865afa15801561453e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127449190615480565b6001600160a01b03831661457a57612b5e828261477f565b612b5e83838361472b565b5f67ffffffffffffffff82166145a160608601604087016152fb565b67ffffffffffffffff16118061274457506001600160a01b0383165f90815260026020908152604082209082906145da90880188614df6565b63ffffffff1663ffffffff1681526020019081526020015f205f866020013581526020019081526020015f205f86604001602081019061461a91906152fb565b67ffffffffffffffff16815260208101919091526040015f20541415949350505050565b80614675576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b039094165f90815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6146c561441e565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a623969060200161329a565b6001600160a01b03821661476b576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b5e6001600160a01b038416838361485a565b6001600160a01b0382166147bf576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614808576040519150601f19603f3d011682016040523d82523d5f602084013e61480d565b606091505b5050905080612b5e576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018390526044016114d7565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251612b5e93879390925f9283929183919082885af1806148f6576040513d5f823e3d81fd5b50505f513d9150811561490d57806001141561491a565b6001600160a01b0384163b155b15614418576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016114d7565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161499b60405180604001604052805f81526020015f81525090565b905290565b5f606082840312156149b0575f80fd5b50919050565b80356001600160a01b038116811461431a575f80fd5b5f8083601f8401126149dc575f80fd5b50813567ffffffffffffffff8111156149f3575f80fd5b6020830191508360208285010111156116ae575f80fd5b5f805f805f805f60e0888a031215614a20575f80fd5b614a2a89896149a0565b9650614a38606089016149b6565b95506080880135945060a088013567ffffffffffffffff80821115614a5b575f80fd5b614a678b838c016149cc565b909650945060c08a0135915080821115614a7f575f80fd5b50614a8c8a828b016149cc565b989b979a50959850939692959293505050565b803563ffffffff8116811461431a575f80fd5b5f805f8060808587031215614ac5575f80fd5b614ace856149b6565b9350614adc60208601614a9f565b9250614aea604086016149b6565b9396929550929360600135925050565b5f8060408385031215614b0b575f80fd5b823567ffffffffffffffff811115614b21575f80fd5b830160a08186031215614b32575f80fd5b9150614b40602084016149b6565b90509250929050565b5f6080820190508251825267ffffffffffffffff60208401511660208301526040830151614b84604084018280518252602090810151910152565b5092915050565b5f805f805f60c08688031215614b9f575f80fd5b614ba8866149b6565b9450614bb787602088016149a0565b93506080860135925060a086013567ffffffffffffffff811115614bd9575f80fd5b614be5888289016149cc565b969995985093965092949392505050565b5f805f8060808587031215614c09575f80fd5b614c12856149b6565b9350614c20602086016149b6565b9250614c2e60408601614a9f565b9150614c3c60608601614a9f565b905092959194509250565b5f5b83811015614c61578181015183820152602001614c49565b50505f910152565b5f8151808452614c80816020860160208601614c47565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6120cc6020830184614c69565b803567ffffffffffffffff8116811461431a575f80fd5b5f805f805f60a08688031215614cef575f80fd5b614cf8866149b6565b9450614d0660208701614a9f565b935060408601359250614d1b60608701614cc4565b949793965091946080013592915050565b803561ffff8116811461431a575f80fd5b5f805f8060808587031215614d50575f80fd5b614d59856149b6565b9350614d67602086016149b6565b925060408501359150614c3c60608601614d2c565b5f8060408385031215614d8d575f80fd5b614d96836149b6565b9150614b4060208401614a9f565b5f60208284031215614db4575f80fd5b6120cc826149b6565b5f805f60608486031215614dcf575f80fd5b614dd8846149b6565b9250614de660208501614a9f565b9150604084013590509250925092565b5f60208284031215614e06575f80fd5b6120cc82614a9f565b5f805f805f805f805f805f806101208d8f031215614e2b575f80fd5b614e348d6149b6565b9b50614e4260208e016149b6565b9a5060408d01359950614e5760608e01614d2c565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e01351115614e7f575f80fd5b614e8f8e60c08f01358f016149cc565b909650945067ffffffffffffffff60e08e01351115614eac575f80fd5b614ebc8e60e08f01358f016149cc565b909450925067ffffffffffffffff6101008e01351115614eda575f80fd5b614eeb8e6101008f01358f016149cc565b81935080925050509295989b509295989b509295989b565b5f805f805f805f805f805f6101408c8e031215614f1e575f80fd5b614f288d8d6149a0565b9a50614f3660608d016149b6565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e01351115614f66575f80fd5b614f768e60e08f01358f016149cc565b90975095506101008d0135811015614f8c575f80fd5b614f9d8e6101008f01358f016149cc565b90955093506101208d0135811015614fb3575f80fd5b50614fc58d6101208e01358e016149cc565b81935080925050509295989b509295989b9093969950565b5f805f8060608587031215614ff0575f80fd5b614ff9856149b6565b9350615007602086016149b6565b9250604085013567ffffffffffffffff80821115615023575f80fd5b818701915087601f830112615036575f80fd5b813581811115615044575f80fd5b8860208260051b8501011115615058575f80fd5b95989497505060200194505050565b5f805f805f6080868803121561507b575f80fd5b615084866149b6565b94506020860135935061509960408701614d2c565b9250606086013567ffffffffffffffff811115614bd9575f80fd5b5f80608083850312156150c5575f80fd5b6150cf84846149a0565b9150614b40606084016149b6565b602080825282518282018190525f9190848201906040850190845b8181101561511d5783516001600160a01b0316835292840192918401916001016150f8565b50909695505050505050565b5f805f805f805f8060c0898b031215615140575f80fd5b615149896149b6565b975061515760208a016149b6565b96506040890135955061516c60608a01614d2c565b9450608089013567ffffffffffffffff80821115615188575f80fd5b6151948c838d016149cc565b909650945060a08b01359150808211156151ac575f80fd5b506151b98b828c016149cc565b999c989b5096995094979396929594505050565b5f805f606084860312156151df575f80fd5b6151e8846149b6565b92506151f660208501614a9f565b9150615204604085016149b6565b90509250925092565b5f805f6060848603121561521f575f80fd5b61522884614a9f565b9250614de6602085016149b6565b5f805f60608486031215615248575f80fd5b615228846149b6565b5f805f60a08486031215615263575f80fd5b61526d85856149a0565b925061527b606085016149b6565b9150608084013590509250925092565b5f806040838503121561529c575f80fd5b614b3283614a9f565b5f805f80608085870312156152b8575f80fd5b6152c1856149b6565b93506152cf60208601614a9f565b925060408501359150614c3c60608601614cc4565b8151815260208083015190820152604081016118aa565b5f6020828403121561530b575f80fd5b6120cc82614cc4565b838152818360208301375f910160200190815292915050565b63ffffffff61533b82614a9f565b1682526020810135602083015267ffffffffffffffff61535d60408301614cc4565b1660408301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6153b8818961532d565b86606082015260e060808201525f6153d460e083018789615367565b6001600160a01b03861660a084015282810360c08401526153f6818587615367565b9a9950505050505050505050565b60808101615412828561532d565b6001600160a01b03831660608301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60208284031215615465575f80fd5b8151600381106120cc575f80fd5b80151581146131c0575f80fd5b5f60208284031215615490575f80fd5b81516120cc81615473565b5f602082840312156154ab575f80fd5b81356120cc81615473565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126154f2575f80fd5b815167ffffffffffffffff8082111561550d5761550d6154b6565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715615553576155536154b6565b8160405283815286602085880101111561556b575f80fd5b611442846020830160208901614c47565b5f6020828403121561558c575f80fd5b815167ffffffffffffffff8111156155a2575f80fd5b612744848285016154e3565b8a815261ffff8a16602082015288604082015287606082015260e060808201525f6155dd60e08301888a615367565b82810360a08401526155f0818789615367565b905082810360c0840152615605818587615367565b9d9c50505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156118aa576118aa615616565b5f610120615664838e61532d565b8b60608401528a60808401528960a08401528060c0840152615689818401898b615367565b905082810360e084015261569e818789615367565b9050828103610100840152615605818587615367565b5f60408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b870101885f5b898110156157ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c3603018112615748575f80fd5b8b0163ffffffff8061575983614a9f565b16855280615768888401614a9f565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181126157a1575f80fd5b01858101903567ffffffffffffffff8111156157bb575f80fd5b8036038213156157c9575f80fd5b87898601526157db8886018284615367565b9587019594505050908401906001016156e8565b50909a9950505050505050505050565b818382375f9101908152919050565b5f6001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a0608083015261584a60a083018486615367565b98975050505050505050565b5f6001600160a01b03808a16835288602084015260a0604084015261587f60a08401888a615367565b8187166060850152838103608085015261589a818688615367565b9b9a5050505050505050505050565b60a081016158b7828661532d565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614b8457614b84615616565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615925575f80fd5b83018035915067ffffffffffffffff82111561593f575f80fd5b6020019150368190038213156116ae575f80fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a08201525f60608601516159a360c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e06101208401526159d4610140840182614c69565b905082810360208401526159e9818688615367565b915050612dfe604083018415159052565b5f60408284031215615a0a575f80fd5b6040516040810181811067ffffffffffffffff82111715615a2d57615a2d6154b6565b604052825181526020928301519281019290925250919050565b5f60408284031215615a57575f80fd5b6120cc83836159fa565b5f8060608385031215615a72575f80fd5b615a7c84846159fa565b9150604083015167ffffffffffffffff811115615a97575f80fd5b615aa3858286016154e3565b9150509250929050565b606081525f615abf6060830187614c69565b8281036020840152615ad2818688615367565b9150506001600160a01b038316604083015295945050505050565b5f60208284031215615afd575f80fd5b5051919050565b606081016118aa828461532d56fea264697066735822122068baa86dcd9bd8142959c16f23b905a6a20b9dbc18984656c1ecce183a4b190464736f6c63430008160033608060405234801561000f575f80fd5b506102648061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806301ffc9a71461007c5780631881d94d146100a457806354fd4d50146100b35780636750cd4c146100da575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61008f61008a366004610186565b6100ee565b60405190151581526020015b60405180910390f35b600260405161009b91906101cc565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009b565b61008f6100e836600461020b565b50600190565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f60208284031215610196575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101c5575f80fd5b9392505050565b6020810160038310610205577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f6020828403121561021b575f80fd5b813563ffffffff811681146101c5575f80fdfea2646970667358221220c9b0aa35644fe701225b1e57fadf97d8225d8d6d1516d425b30241f80ec5085f64736f6c63430008160033608060405234801561000f575f80fd5b506040516200196d3803806200196d83398101604081905261003091610108565b338061005557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005e816100b9565b506001600160a01b03165f908152600260205260409020805460ff1916600190811790915580546001600160801b03191668056bc75e2d6310000017905560058054602f60801b6001600160801b0391909116179055610135565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610118575f80fd5b81516001600160a01b038116811461012e575f80fd5b9392505050565b61182a80620001435f395ff3fe608060405260043610610178575f3560e01c80638ca2fb08116100d1578063d350ad251161007c578063e0ad121a11610057578063e0ad121a14610607578063f2fde38b146106ba578063fd9be522146106d9575f80fd5b8063d350ad25146104d4578063da26663a146104f3578063dbbb4155146105e8575f80fd5b8063c1723a1d116100ac578063c1723a1d1461045f578063c184032714610472578063cd68b79b14610498575f80fd5b80638ca2fb08146103b55780638da5cb5b146103f357806392807f581461041c575f80fd5b80635d6d7ccb116101315780637bc3c9ab1161010c5780637bc3c9ab146102fa5780637dc438a41461033f57806388a4124c1461035e575f80fd5b80635d6d7ccb146102765780635e280f1114610295578063715018a6146102e6575f80fd5b80633161b7f6116101615780633161b7f6146101d257806336a5beba146101f157806352a7251014610257575f80fd5b806311f2c3431461017c5780632f7cb0b4146101b1575b5f80fd5b348015610187575f80fd5b5061019e61019636600461145a565b5f9392505050565b6040519081526020015b60405180910390f35b3480156101bc575f80fd5b506101d06101cb3660046114a9565b6106f8565b005b3480156101dd575f80fd5b506101d06101ec3660046114c9565b610735565b3480156101fc575f80fd5b506040805180820182525f8082526020918201528151808301835260045467ffffffffffffffff811680835263ffffffff680100000000000000009092048216928401928352845190815291511691810191909152016101a8565b348015610262575f80fd5b506101d061027136600461155b565b610901565b348015610281575f80fd5b506101d06102903660046114a9565b61095e565b3480156102a0575f80fd5b506006546102c19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a8565b3480156102f1575f80fd5b506101d0610a23565b348015610305575f80fd5b506103196103143660046115a5565b610a36565b604080519283526fffffffffffffffffffffffffffffffff9091166020830152016101a8565b34801561034a575f80fd5b506101d06103593660046115c0565b610ad0565b348015610369575f80fd5b5061037d61037836600461145a565b610bd9565b604080519485526fffffffffffffffffffffffffffffffff9384166020860152918316918401919091521660608201526080016101a8565b3480156103c0575f80fd5b506103e36103cf3660046115d6565b60026020525f908152604090205460ff1681565b60405190151581526020016101a8565b3480156103fe575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166102c1565b348015610427575f80fd5b506005546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff90911681526020016101a8565b61037d61046d36600461145a565b610bf9565b34801561047d575f80fd5b506001546fffffffffffffffffffffffffffffffff1661043e565b3480156104a3575f80fd5b5060055461043e9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b3480156104df575f80fd5b506101d06104ee3660046114a9565b610c29565b3480156104fe575f80fd5b506105a461050d3660046115ef565b60408051606080820183525f808352602080840182905292840181905263ffffffff94851681526003835283902083519182018452546fffffffffffffffffffffffffffffffff81168252700100000000000000000000000000000000810467ffffffffffffffff169282019290925278010000000000000000000000000000000000000000000000009091049092169082015290565b6040805182516fffffffffffffffffffffffffffffffff16815260208084015167ffffffffffffffff16908201529181015163ffffffff16908201526060016101a8565b3480156105f3575f80fd5b506101d06106023660046115d6565b610c74565b348015610612575f80fd5b506105a4610621366004611608565b60408051606080820183525f808352602080840182905292840181905261ffff949094168452600382529282902082519384018352546fffffffffffffffffffffffffffffffff8116845267ffffffffffffffff700100000000000000000000000000000000820416918401919091527801000000000000000000000000000000000000000000000000900463ffffffff169082015290565b3480156106c5575f80fd5b506101d06106d43660046115d6565b610cc3565b3480156106e4575f80fd5b506101d06106f3366004611621565b610d26565b610700610d3c565b600580546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055565b336107545f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146107b757335f9081526002602052604090205460ff166107b7576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156108fc57368383838181106107d4576107d4611649565b6080029190910191506108f390506107ef60208301836115ef565b6108013684900384016020850161168d565b805160208083015160409384015184516060810186526fffffffffffffffffffffffffffffffff948516815267ffffffffffffffff92831681850190815263ffffffff9283168288019081529783165f908152600390955295909320925183549551965194167fffffffffffffffff000000000000000000000000000000000000000000000000909516949094177001000000000000000000000000000000009590911694909402939093177fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000009190921602179055565b506001016107b9565b505050565b610909610d3c565b73ffffffffffffffffffffffffffffffffffffffff919091165f90815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b3361097d5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16146109e057335f9081526002602052604090205460ff166109e0576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610a2b610d3c565b610a345f610d8e565b565b5f808461ffff16606e1480610a5057508461ffff1661279f145b80610a6057508461ffff16614eaf145b15610a7d57610a748561ffff168585610e02565b91509150610ac8565b8461ffff16606f1480610a9557508461ffff16612794145b80610aa557508461ffff16614ea4145b15610ab957610a748561ffff168585610f5c565b610a748561ffff168585611104565b935093915050565b33610aef5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610b5257335f9081526002602052604090205460ff16610b52576040517f320ae52900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b626107ef60208301836115ef565b5f610b7360a083016080840161171c565b90505f610b8660c0840160a085016115ef565b6004805463ffffffff90921668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090921667ffffffffffffffff90941693909317179091555050565b5f805f80610be88787876111d7565b935093509350935093509350935093565b5f80808080610c0c565b60405180910390fd5b610c178888886111d7565b94509450945094505093509350935093565b610c31610d3c565b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b610c7c610d3c565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ccb610d3c565b73ffffffffffffffffffffffffffffffffffffffff8116610d1a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610c03565b610d2381610d8e565b50565b610d2e610d3c565b610d3882826112ad565b5050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610a34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c03565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b63ffffffff8381165f90815260036020526040812060045460055492938493849268010000000000000000900490911690606490610e669070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1689611762565b610e7091906117ac565b610e7a9190611762565b82549091505f90610ead907801000000000000000000000000000000000000000000000000900463ffffffff1688611762565b83546004549192505f9167ffffffffffffffff70010000000000000000000000000000000090920482169184918691610ee791168b6117bf565b610ef191906117bf565b610efb91906117bf565b610f059190611762565b60015485549192506fffffffffffffffffffffffffffffffff90811691610f2d911683611762565b610f3791906117ac565b935493996fffffffffffffffffffffffffffffffff9094169850929650505050505050565b5f805f610f68866113af565b63ffffffff8082165f9081526003602052604081208054939450929091610fac91780100000000000000000000000000000000000000000000000090041688611762565b610fb890610c746117bf565b82549091505f90610fe790700100000000000000000000000000000000900467ffffffffffffffff1683611762565b63ffffffff808b165f908152600360205260408120805493945092909161102b9178010000000000000000000000000000000000000000000000009004168b611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661105a8b846117bf565b6110649190611762565b60015487549192505f916fffffffffffffffffffffffffffffffff9182169161108e911687611762565b61109891906117ac565b60015485549192505f916fffffffffffffffffffffffffffffffff918216916110c2911685611762565b6110cc91906117ac565b90505f6110d982846117bf565b9554959f6fffffffffffffffffffffffffffffffff9096169e50949c50505050505050505050505050565b63ffffffff8084165f908152600360205260408120805491928392839161114891780100000000000000000000000000000000000000000000000090041687611762565b82549091505f90700100000000000000000000000000000000900467ffffffffffffffff1661117787846117bf565b6111819190611762565b60015484549192506fffffffffffffffffffffffffffffffff908116916111a9911683611762565b6111b391906117ac565b925492986fffffffffffffffffffffffffffffffff90931697509195505050505050565b5f808080806111e8617530896117d2565b90508063ffffffff16606e148061120657508063ffffffff1661279f145b8061121857508063ffffffff16614eaf145b1561123257611228818888610e02565b9095509350611281565b8063ffffffff16606f148061124e57508063ffffffff16612794145b8061126057508063ffffffff16614ea4145b1561127057611228818888610f5c565b61127b818888611104565b90955093505b505060015460055493979296506fffffffffffffffffffffffffffffffff908116955090921692509050565b73ffffffffffffffffffffffffffffffffffffffff82166112fa576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114611350576040519150601f19603f3d011682016040523d82523d5f602084013e611355565b606091505b50509050806108fc576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c03565b5f806113bd617530846117d2565b90508063ffffffff16606f036113d65750606592915050565b8063ffffffff16612794036113ef575061278992915050565b8063ffffffff16614ea4036114085750614e9992915050565b6040517ff42c33dc00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610c03565b803563ffffffff81168114611455575f80fd5b919050565b5f805f6060848603121561146c575f80fd5b61147584611442565b95602085013595506040909401359392505050565b80356fffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f602082840312156114b9575f80fd5b6114c28261148a565b9392505050565b5f80602083850312156114da575f80fd5b823567ffffffffffffffff808211156114f1575f80fd5b818501915085601f830112611504575f80fd5b813581811115611512575f80fd5b8660208260071b8501011115611526575f80fd5b60209290920196919550909350505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611455575f80fd5b5f806040838503121561156c575f80fd5b61157583611538565b915060208301358015158114611589575f80fd5b809150509250929050565b803561ffff81168114611455575f80fd5b5f805f606084860312156115b7575f80fd5b61147584611594565b5f60c082840312156115d0575f80fd5b50919050565b5f602082840312156115e6575f80fd5b6114c282611538565b5f602082840312156115ff575f80fd5b6114c282611442565b5f60208284031215611618575f80fd5b6114c282611594565b5f8060408385031215611632575f80fd5b61163b83611538565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b803567ffffffffffffffff81168114611455575f80fd5b5f6060828403121561169d575f80fd5b6040516060810181811067ffffffffffffffff821117156116e5577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040526116f18361148a565b81526116ff60208401611676565b602082015261171060408401611442565b60408201529392505050565b5f6020828403121561172c575f80fd5b6114c282611676565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761177957611779611735565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826117ba576117ba61177f565b500490565b8082018082111561177957611779611735565b5f63ffffffff808416806117e8576117e861177f565b9216919091069291505056fea2646970667358221220057b4584fe743c800fee37c9f14cc5705300ed67e417991ba4a7213c92a3bfad64736f6c6343000816003360e060405234801562000010575f80fd5b506040516200588138038062005881833981016040819052620000339162000185565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001cf565b6001600160a01b03821660805263ffffffff811660a05283833380620000d957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000e4816200011e565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b03989098169790971790965550620001fb945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811462000182575f80fd5b50565b5f805f806080858703121562000199575f80fd5b8451620001a6816200016d565b6020860151909450620001b9816200016d565b6040860151606090960151949790965092505050565b5f60208284031215620001e0575f80fd5b815163ffffffff81168114620001f4575f80fd5b9392505050565b60805160a05160c0516156426200023f5f395f8181612458015261264f01525f50505f81816107f80152818161093b015281816116c30152611daa01526156425ff3fe608060405260043610610186575f3560e01c806361d027b3116100d1578063d15b0d491161007c578063f2fde38b11610057578063f2fde38b14610528578063faaebd2114610547578063fd9be52214610580575f80fd5b8063d15b0d49146104be578063d80e9bd9146104dd578063f0f4426014610509575f80fd5b80638da5cb5b116100ac5780638da5cb5b1461044a5780639c33abf714610473578063c14c43491461049f575f80fd5b806361d027b3146103eb5780636750cd4c14610417578063715018a614610436575f80fd5b806329460b0b1161013157806343ea4fa91161010c57806343ea4fa9146103145780634d9632001461033357806354fd4d50146103c0575f80fd5b806329460b0b1461029c57806339e3f938146102bb5780634389e58f146102e7575f80fd5b80631881d94d116101615780631881d94d14610242578063200175f71461025c57806320efd7221461027d575f80fd5b806301ffc9a7146101915780630e97289b146101c5578063188183f414610216575f80fd5b3661018d57005b5f80fd5b34801561019c575f80fd5b506101b06101ab3660046141f9565b61059f565b60405190151581526020015b60405180910390f35b3480156101d0575f80fd5b506006546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b348015610221575f80fd5b50610235610230366004614285565b610683565b6040516101bc91906142bc565b34801561024d575f80fd5b505f6040516101bc91906142ef565b348015610267575f80fd5b5061027b61027636600461432e565b61078e565b005b348015610288575f80fd5b5061027b6102973660046143ad565b610939565b3480156102a7575f80fd5b5061027b6102b63660046143fe565b610aec565b3480156102c6575f80fd5b506102da6102d5366004614285565b610ccf565b6040516101bc91906144fe565b3480156102f2575f80fd5b5061030661030136600461451f565b610e6a565b6040516101bc929190614631565b34801561031f575f80fd5b506102da61032e366004614285565b610f1f565b34801561033e575f80fd5b5061038f61034d366004614285565b600460209081525f928352604080842090915290825290205463ffffffff811690640100000000900473ffffffffffffffffffffffffffffffffffffffff1682565b6040805163ffffffff909316835273ffffffffffffffffffffffffffffffffffffffff9091166020830152016101bc565b3480156103cb575f80fd5b5060408051600381525f60208201526002918101919091526060016101bc565b3480156103f6575f80fd5b506003546101f19073ffffffffffffffffffffffffffffffffffffffff1681565b348015610422575f80fd5b506101b0610431366004614654565b6112d0565b348015610441575f80fd5b5061027b6112da565b348015610455575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166101f1565b34801561047e575f80fd5b5061049261048d36600461466f565b6112ed565b6040516101bc91906146b7565b3480156104aa575f80fd5b5061027b6104b93660046146c9565b6113d4565b3480156104c9575f80fd5b5061027b6104d8366004614738565b611547565b3480156104e8575f80fd5b506104fc6104f736600461451f565b6115d5565b6040516101bc919061474f565b348015610514575f80fd5b5061027b610523366004614766565b611643565b348015610533575f80fd5b5061027b610542366004614766565b611657565b348015610552575f80fd5b50610572610561366004614766565b60056020525f908152604090205481565b6040519081526020016101bc565b34801561058b575f80fd5b5061027b61059a366004614781565b6116b7565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061063157507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b8061067d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b604080518082019091525f808252602082015263ffffffff8083165f8181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916845260048352818420948452939091528120805492939092169081900361071257825463ffffffff16610714565b805b63ffffffff1684528154640100000000900473ffffffffffffffffffffffffffffffffffffffff1680610766578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16610768565b805b73ffffffffffffffffffffffffffffffffffffffff166020860152509295945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146107df576040517f885762a700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061088391906147ab565b73ffffffffffffffffffffffffffffffffffffffff16036108d0576040517fe695d04400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108db8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109a8576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b81811015610ae657368383838181106109c5576109c56147c6565b90506020028101906109d791906147f3565b90506109ee6109e96020830183614654565b611821565b6001610a006040830160208401614654565b63ffffffff1603610a4057610a3b610a1b6020830183614654565b86610a29604085018561482f565b810190610a369190614958565b611868565b610add565b6002610a526040830160208401614654565b63ffffffff1603610a8d57610a3b610a6d6020830183614654565b86610a7b604085018561482f565b810190610a889190614b11565b611914565b610a9d6040820160208301614654565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b506001016109aa565b50505050565b610af461195d565b5f5b81811015610c915736838383818110610b1157610b116147c6565b9050602002810190610b239190614b43565b905060ff610b346020830183614b75565b610b45906040810190602001614ba7565b60ff1603610b7f576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff610b8e6020830183614b75565b610b9f906060810190604001614ba7565b60ff1603610bd9576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff610bef6020830183614b75565b610bfd906020810190614bc0565b67ffffffffffffffff1603610c3e576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5c610c4e6020830183614b75565b610c5790614bd9565b6119af565b610c885f610c6d6020840184614654565b610c7a6020850185614b75565b610c8390614bd9565b611a00565b50600101610af6565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610cc3929190614c90565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a01000000000000000000009091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610dec57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dc1575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610e5957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e2e575b505050505081525050905092915050565b604080518082019091525f80825260208201526060610e8b86868686611d93565b6006546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815292945090925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610ee990849089908990600401614e2d565b5f604051808303815f87803b158015610f00575f80fd5b505af1158015610f12573d5f803e3d5ffd5b5050505094509492505050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610fce57825467ffffffffffffffff168452610fed565b67ffffffffffffffff81811614610fed5767ffffffffffffffff811684525b815468010000000000000000900460ff166110a157825468010000000000000000900460ff161561109c578260010180548060200260200160405190810160405280929190818152602001828054801561107b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611050575b50505050506080850152825468010000000000000000900460ff1660208501525b61113d565b815468010000000000000000900460ff9081161461113d578160010180548060200260200160405190810160405280929190818152602001828054801561111c57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116110f1575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff1661120a5782546901000000000000000000900460ff161561120557826002018054806020026020016040519081016040528092919081815260200182805480156111cd57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111a2575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112be565b81546901000000000000000000900460ff908116146112be578160020180548060200260200160405190810160405280929190818152602001828054801561128657602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161125b575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b6112c7846119af565b50505092915050565b5f61067d82611e8a565b6112e261195d565b6112eb5f611ef0565b565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161134c576113268385610683565b60405160200161133691906142bc565b60405160208183030381529060405290506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601611393576113838385610f1f565b60405160200161133691906144fe565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610ad4565b9392505050565b6113dc61195d565b5f5b8181101561151557368383838181106113f9576113f96147c6565b60609081029290920192505f916114169150830160408401614766565b73ffffffffffffffffffffffffffffffffffffffff1603611463576040517f20e9d05a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114736040820160208301614654565b63ffffffff165f036114b1576040517f49cfac4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec906114eb8385614654565b63ffffffff16815260208101919091526040015f2061150a8282614e8f565b5050506001016113de565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610cc3929190614f27565b61154f61195d565b600254811115611599576002546040517f34084fb8000000000000000000000000000000000000000000000000000000008152610ad4918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f806116246115fd6060890160408a01614766565b61160d60808a0160608b01614654565b61161a60c08b018b61482f565b9050878a8a611f64565b604080518082019091529182526020820152925050505b949350505050565b61164b61195d565b61165481612062565b50565b61165f61195d565b73ffffffffffffffffffffffffffffffffffffffff81166116ae576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b61165481611ef0565b6116c0816120d5565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174e91906147ab565b905061175b81848461213d565b6040805133815273ffffffffffffffffffffffffffffffffffffffff851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a66698839060600161092c565b73ffffffffffffffffffffffffffffffffffffffff82166117fb576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61181c73ffffffffffffffffffffffffffffffffffffffff8416838361216d565b505050565b61182a81611e8a565b611654576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610ad4565b73ffffffffffffffffffffffffffffffffffffffff8083165f90815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc8059061092c90849086908590614fb3565b61191f828483611a00565b6119298284610f1f565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161092c9392919061500f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146112eb576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ad4565b602081015160ff161580156119c95750606081015160ff16155b15611654576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff9081161480611a1b5750602081015160ff16155b15611a625760808101515115611a5d576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae1565b806020015160ff16816080015151141580611a9d57506002611a86600160ff615076565b611a90919061508f565b60ff16816020015160ff16115b15611ad4576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae181608001516121fa565b604081015160ff9081161480611afc5750604081015160ff16155b15611b825760a08101515115611b3e576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611b7d576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c59565b806040015160ff168160a0015151141580611bbd57506002611ba6600160ff615076565b611bb0919061508f565b60ff16816040015160ff16115b15611bf4576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff161580611c155750806040015160ff16816060015160ff16115b15611c4c576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c598160a001516121fa565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a0100000000000000000000959091169490940293909317835560808401518051859493611d6f93908501920190614166565b5060a08201518051611d8b916002840191602090910190614166565b505050505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314611e17576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611e24888888612292565b90925090505f80611e55611e3e60608c0160408d01614766565b611e4e60808d0160608e01614654565b858a612359565b9092509050611e6482846150d5565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff161515806113cd5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f80611f7286866124e3565b915091505f611f828b8b846124fc565b90505f611f8f8c8c610683565b9050611fa48a825f015163ffffffff16612508565b806020015173ffffffffffffffffffffffffffffffffffffffff1663709eb6648c8e8d886040518563ffffffff1660e01b8152600401611fe794939291906150e8565b602060405180830381865afa158015612002573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120269190615132565b61203090836150d5565b91505f806120408e8e868e612550565b909250905061204f82856150d5565b9e909d509b505050505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016115ca565b335f9081526005602052604090205480821115612128576040517f34084fb80000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b335f9081526005602052604090209190039055565b73ffffffffffffffffffffffffffffffffffffffff83166121625761181c8282612691565b61181c8383836117ae565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261181c908490612793565b5f805b825181101561181c575f838281518110612219576122196147c6565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611612288576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b91506001016121fd565b60605f805f6122a186866124e3565b90925090505f6122ca6122ba60608a0160408b01614766565b61023060808b0160608c01614654565b90505f6122da60c08a018a61482f565b905090506122f181835f015163ffffffff16612508565b60208201516123219061230a60808c0160608d01614654565b61231a60608d0160408e01614766565b8488612832565b61232b90866150d5565b94505f806123398b86612966565b909250905061234882886150d5565b909b909a5098505050505050505050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526003549192505f9182916124809173ffffffffffffffffffffffffffffffffffffffff16907f000000000000000000000000000000000000000000000000000000000000000090849087612988565b9150915061249087878484612a33565b909550935084156124d75760035473ffffffffffffffffffffffffffffffffffffffff165f90815260056020526040812080548792906124d19084906150d5565b90915550505b50505094509492505050565b6060806124f08484612aaa565b915091505b9250929050565b5f61163b848484612b90565b8082111561254c576040517fc667af3e0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610ad4565b5050565b6003545f90819073ffffffffffffffffffffffffffffffffffffffff1615611e815760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526003549192505f9182916126759173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086612c04565b9150915061268587878484612a33565b94509450505050611e81565b73ffffffffffffffffffffffffffffffffffffffff82166126de576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612734576040519150601f19603f3d011682016040523d82523d5f602084013e612739565b606091505b505090508061181c576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ad4565b5f8060205f8451602086015f885af1806127b2576040513d5f823e3d81fd5b50505f513d915081156127c95780600114156127e3565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610ae6576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ad4565b6040517f717e8a420000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff87169063717e8a429061288c9088908890889088906004016150e8565b6020604051808303815f875af11580156128a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128cc9190615132565b9050801561290e5773ffffffffffffffffffffffffffffffffffffffff86165f90815260056020526040812080548392906129089084906150d5565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff88168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b5f606061297d6005612977866151d3565b85612cab565b909590945092505050565b5f6060863b8083036129ad57604080515f808252602082019092529250925050612a29565b5f805f8761ffff1667ffffffffffffffff8111156129cd576129cd614890565b6040519080825280601f01601f1916602001820160405280156129f7576020820181803683370190505b5090505f80885160208a018c8f8ff191503d925087831115612a17578792505b828152825f602083013e909450925050505b9550959350505050565b5f80831580612a43575082516020115b15612a5257505f905080611e81565b5f83806020019051810190612a679190615132565b90508515612a7757809150612aa0565b5f6002548811612a8957600254612a8b565b875b9050808211612a9a5781612a9c565b805b9350505b5094509492505050565b6060805f80612ab98686612dfe565b9150915080515f03612b0e57604080515f808252602082019092528391612b02565b604080518082019091525f815260606020820152815260200190600190039081612adb5790505b509350935050506124f5565b6040805160018082528183019092525f91816020015b604080518082019091525f815260606020820152815260200190600190039081612b245790505090506040518060400160405280600260ff16815260200183815250815f81518110612b7857612b786147c6565b60209081029190910101529196919550909350505050565b5f80612b9c8585610f1f565b90505f83515f14612bca57835f81518110612bb957612bb96147c6565b602002602001015160200151612bda565b60405180602001604052805f8152505b90505f80612be783613034565b91509150612bf884888a85856132ce565b98975050505050505050565b5f6060853b808303612c2957604080515f808252602082019092529250925050611e81565b5f805f8761ffff1667ffffffffffffffff811115612c4957612c49614890565b6040519080825280601f01601f191660200182016040528015612c73576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115612c92578792505b828152825f602083013e90999098509650505050505050565b5f60605f612cb885613486565b90505f612cc48661356c565b805160208201206060880151604089015192935090915f612ce58284610f1f565b90505f89515f14612d1357895f81518110612d0257612d026147c6565b602002602001015160200151612d23565b60405180602001604052805f8152505b90506060612d828d846040518060a001604052808963ffffffff1681526020018c81526020018a8152602001875f015167ffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681525085613589565b604051919b509150612d9a908990899060200161526e565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a0015183604051612de69392919061529c565b60405180910390a15050505050505050935093915050565b6060806002831015612e3e576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b5f612e4c60028286886152f8565b612e559161531f565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161301d57805f5b86831015612faa575f612e9e60018501858a8c6152f8565b612ea791615367565b60f81c90505f819003612ee8576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ad4565b8160ff165f03612efa57809150612f36565b8160ff168160ff1614612f3657365f612f1586868c8e6152f8565b91509150612f26898986858561385b565b9099509750859450919250829150505b60018401935f90612f4c90600301868b8d6152f8565b612f559161531f565b60f01c90505f819003612f97576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101869052602401610ad4565b8060020161ffff16850194505050612e86565b828714612fe6576040517f6592671c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b600287111561301657365f612ffd85858b8d6152f8565b9150915061300e888885858561385b565b909850965050505b505061302b565b6130288287876139ce565b93505b50509250929050565b60608082515f0361304457915091565b5f61304e84613c49565b90508060ff166001036130fe5760408051600180825281830190925290816020015b606081526020019060019003908161307057905050925083835f8151811061309a5761309a6147c6565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506130d2846003613d6b565b825f815181106130e4576130e46147c6565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561311a5761311a614890565b604051908082528060200260200182016040528015613143578160200160208202803683370190505b5091508060ff1667ffffffffffffffff81111561316257613162614890565b60405190808252806020026020018201604052801561319557816020015b60608152602001906001900390816131805790505b5092505f8060ff5b8651831015613245576001909201915f6131b78885613dea565b6002949094019390505f6131cb8986613d6b565b90508260ff1660ff036131e057809250613236565b8260ff168160ff1614613236577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f61321e8b8784613e69565b905061322c8a8a8784613fe2565b5093909301929150815b5061ffff16929092019161319d565b8183035f613254898584613e69565b905061326288888584613fe2565b5f5b8660ff168160ff1610156132c257878160ff1681518110613287576132876147c6565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613264565b50505050505050915091565b5f80866040015187602001516132e491906153ad565b90505f5b8160ff168160ff16101561347b575f886020015160ff168260ff161061333c5760a089015160208a015161331c9084615076565b60ff168151811061332f5761332f6147c6565b602002602001015161335e565b88608001518260ff1681518110613355576133556147c6565b60200260200101515b60408051602081019091525f808252919250905b86518110156133ca578360ff16878281518110613391576133916147c6565b602002602001015160ff16036133c2578781815181106133b3576133b36147c6565b602002602001015191506133ca565b600101613372565b5089516040517f30bb3aac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416916330bb3aac91613423918d918d9087906004016153c6565b602060405180830381865afa15801561343e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134629190615132565b61346c90866150d5565b945050508060010190506132e8565b505095945050505050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001613556929190615410565b5f60605f8061359785613034565b915091505f876040015188602001516135b091906153ad565b90508060ff1667ffffffffffffffff8111156135ce576135ce614890565b6040519080825280602002602001820160405280156135f7578160200160208202803683370190505b5093505f5b8160ff168160ff161015610f12575f896020015160ff168260ff16106136505760a08a015160208b01516136309084615076565b60ff1681518110613643576136436147c6565b6020026020010151613672565b89608001518260ff1681518110613669576136696147c6565b60200260200101515b60408051602081019091525f808252919250905b85518110156136de578360ff168682815181106136a5576136a56147c6565b602002602001015160ff16036136d6578681815181106136c7576136c76147c6565b602002602001015191506136de565b600101613686565b506040517f95d376d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906395d376d790613733908d908590600401615435565b6020604051808303815f875af115801561374f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137739190615132565b878460ff1681518110613788576137886147c6565b6020026020010181815250505f878460ff16815181106137aa576137aa6147c6565b6020026020010151111561385157868360ff16815181106137cd576137cd6147c6565b60200260200101518c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461381f91906150d5565b92505081905550868360ff168151811061383b5761383b6147c6565b60200260200101518861384e91906150d5565b97505b50506001016135fc565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8616016138f5578651156138b8578684846040516020016138a4939291906154b2565b6040516020818303038152906040526138ee565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b96506139c3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff86160161398c5785511561394f5785848460405160200161393b939291906154b2565b604051602081830303815290604052613985565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b95506139c3565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff86166004820152602401610ad4565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff851601613af35760228214613a35576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613a55613a476022600286886152f8565b613a50916154d8565b61410d565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b1660248201529091506034016040516020818303038152906040529150506113cd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff851601613c1157604282111580613b2e5750606282115b15613b65576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613b77613a476022600286886152f8565b90505f613b8b613a476042602287896152f8565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613bbe866042818a6152f8565b613bc7916154d8565b60405160086020938403029190911c9250613bf8916001916011918391889183916031916002918b918b9101615514565b60405160208183030381529060405293505050506113cd565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff85166004820152602401610ad4565b5f80805b8351821015613d27576001909101905f613c678584613dea565b905060028301925060028161ffff161015613cb1576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101849052602401610ad4565b5f613cbc8685613d6b565b90508060ff1660ff03613cfb576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b8316613d185760019485019460ff82161b831792505b5061ffff169190910190613c4d565b83518214613d64576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101839052602401610ad4565b5050919050565b5f613d778260016150d5565b83511015613de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e6473000000000000000000000000006044820152606401610ad4565b50016001015190565b5f613df68260026150d5565b83511015613e60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606401610ad4565b50016002015190565b606081613e7781601f6150d5565b1015613edf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ad4565b613ee982846150d5565b84511015613f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ad4565b606082158015613f715760405191505f825260208201604052613fd9565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613faa578051835260209283019201613f92565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff0361401f576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61402b8360016153ad565b90505f5b8451811015611d8b575f85828151811061404b5761404b6147c6565b602002602001015190508060ff168360ff16036140c057868281518110614074576140746147c6565b60200260200101518460405160200161408e92919061526e565b6040516020818303038152906040528783815181106140af576140af6147c6565b602002602001018190525050611d8b565b8060ff165f0361410457828683815181106140dd576140dd6147c6565b602002602001019060ff16908160ff1681525050838783815181106140af576140af6147c6565b5060010161402f565b5f6fffffffffffffffffffffffffffffffff821115614162576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526080600482015260248101839052604401610ad4565b5090565b828054828255905f5260205f209081019282156141de579160200282015b828111156141de57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614184565b506141629291505b80821115614162575f81556001016141e6565b5f60208284031215614209575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146113cd575f80fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611654575f80fd5b803561426481614238565b919050565b63ffffffff81168114611654575f80fd5b803561426481614269565b5f8060408385031215614296575f80fd5b82356142a181614238565b915060208301356142b181614269565b809150509250929050565b815163ffffffff16815260208083015173ffffffffffffffffffffffffffffffffffffffff16908201526040810161067d565b6020810160038310614328577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f805f60608486031215614340575f80fd5b833561434b81614238565b9250602084013561435b81614238565b929592945050506040919091013590565b5f8083601f84011261437c575f80fd5b50813567ffffffffffffffff811115614393575f80fd5b6020830191508360208260051b85010111156124f5575f80fd5b5f805f604084860312156143bf575f80fd5b83356143ca81614238565b9250602084013567ffffffffffffffff8111156143e5575f80fd5b6143f18682870161436c565b9497909650939450505050565b5f806020838503121561440f575f80fd5b823567ffffffffffffffff811115614425575f80fd5b6144318582860161436c565b90969095509350505050565b5f815180845260208085019450602084015f5b8381101561448257815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614450565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c060808501526144dc60c085018261443d565b905060a083015184820360a08601526144f5828261443d565b95945050505050565b602081525f6113cd602083018461448d565b80358015158114614264575f80fd5b5f805f8060608587031215614532575f80fd5b843567ffffffffffffffff80821115614549575f80fd5b9086019060e0828903121561455c575f80fd5b90945060208601359080821115614571575f80fd5b818701915087601f830112614584575f80fd5b813581811115614592575f80fd5b8860208285010111156145a3575f80fd5b6020830195508094505050506145bb60408601614510565b905092959194509250565b5f5b838110156145e05781810151838201526020016145c8565b50505f910152565b5f81518084526145ff8160208601602086016145c6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f61163b60608301846145e8565b5f60208284031215614664575f80fd5b81356113cd81614269565b5f805f60608486031215614681575f80fd5b833561468c81614269565b9250602084013561469c81614238565b915060408401356146ac81614269565b809150509250925092565b602081525f6113cd60208301846145e8565b5f80602083850312156146da575f80fd5b823567ffffffffffffffff808211156146f1575f80fd5b818501915085601f830112614704575f80fd5b813581811115614712575f80fd5b866020606083028501011115614726575f80fd5b60209290920196919550909350505050565b5f60208284031215614748575f80fd5b5035919050565b81518152602080830151908201526040810161067d565b5f60208284031215614776575f80fd5b81356113cd81614238565b5f8060408385031215614792575f80fd5b823561479d81614238565b946020939093013593505050565b5f602082840312156147bb575f80fd5b81516113cd81614238565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614825575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614862575f80fd5b83018035915067ffffffffffffffff82111561487c575f80fd5b6020019150368190038213156124f5575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156148e0576148e0614890565b60405290565b60405160e0810167ffffffffffffffff811182821017156148e0576148e0614890565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561495057614950614890565b604052919050565b5f60408284031215614968575f80fd5b6040516040810181811067ffffffffffffffff8211171561498b5761498b614890565b604052823561499981614269565b815260208301356149a981614238565b60208201529392505050565b803567ffffffffffffffff81168114614264575f80fd5b803560ff81168114614264575f80fd5b5f82601f8301126149eb575f80fd5b8135602067ffffffffffffffff821115614a0757614a07614890565b8160051b614a16828201614909565b9283528481018201928281019087851115614a2f575f80fd5b83870192505b84831015614a57578235614a4881614238565b82529183019190830190614a35565b979650505050505050565b5f60c08284031215614a72575f80fd5b614a7a6148bd565b9050614a85826149b5565b8152614a93602083016149cc565b6020820152614aa4604083016149cc565b6040820152614ab5606083016149cc565b6060820152608082013567ffffffffffffffff80821115614ad4575f80fd5b614ae0858386016149dc565b608084015260a0840135915080821115614af8575f80fd5b50614b05848285016149dc565b60a08301525092915050565b5f60208284031215614b21575f80fd5b813567ffffffffffffffff811115614b37575f80fd5b61163b84828501614a62565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614825575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614825575f80fd5b5f60208284031215614bb7575f80fd5b6113cd826149cc565b5f60208284031215614bd0575f80fd5b6113cd826149b5565b5f61067d3683614a62565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c17575f80fd5b830160208101925035905067ffffffffffffffff811115614c36575f80fd5b8060051b36038213156124f5575f80fd5b8183525f60208085019450825f5b85811015614482578135614c6881614238565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614c55565b60208082528181018390525f906040808401600586901b8501820187855b88811015614e1f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112614d0f575f80fd5b8b018035614d1c81614269565b63ffffffff16855280880135368290037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41018112614d58575f80fd5b8589018890520167ffffffffffffffff614d71826149b5565b1687860152614d818882016149cc565b606060ff80831682890152614d978a85016149cc565b92506080818416818a0152614dad8386016149cc565b935060a09250818416838a0152614dc681860186614be4565b60c08b81015294509150614de1905061010089018483614c47565b925050614df081840184614be4565b93509050838783030160e0880152614e09828483614c47565b978a019796505050928701925050600101614cae565b509098975050505050505050565b604081525f614e3f60408301866145e8565b8281036020840152838152838560208301375f6020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050949350505050565b8135614e9a81614269565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135614eda81614238565b77ffffffffffffffffffffffffffffffffffffffff000000008160201b16837fffffffffffffffff0000000000000000000000000000000000000000000000008416171784555050505050565b60208082528181018390525f90604080840186845b87811015614fa6578135614f4f81614269565b63ffffffff90811684528286013590614f6782614269565b168386015281840135614f7981614238565b73ffffffffffffffffffffffffffffffffffffffff16838501526060928301929190910190600101614f3c565b5090979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526080810161163b6040830184805163ffffffff16825260209081015173ffffffffffffffffffffffffffffffffffffffff16910152565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6144f5606083018461448d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561067d5761067d615049565b5f60ff8316806150c6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b8082018082111561067d5761067d615049565b63ffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201525f61512860808301846145e8565b9695505050505050565b5f60208284031215615142575f80fd5b5051919050565b5f82601f830112615158575f80fd5b813567ffffffffffffffff81111561517257615172614890565b6151a360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614909565b8181528460208386010111156151b7575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e082360312156151e3575f80fd5b6151eb6148e6565b6151f4836149b5565b81526152026020840161427a565b602082015261521360408401614259565b60408201526152246060840161427a565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff811115615256575f80fd5b61526236828601615149565b60c08301525092915050565b5f835161527f8184602088016145c6565b8351908301906152938183602088016145c6565b01949350505050565b606081525f6152ae606083018661443d565b602083820360208501526152c2828761443d565b8481036040860152855180825260208088019450909101905f5b81811015614e1f578451835293830193918301916001016152dc565b5f8085851115615306575f80fd5b83861115615312575f80fd5b5050820193919092039150565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561535f5780818660020360031b1b83161692505b505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561535f5760019490940360031b84901b1690921692915050565b60ff818116838216019081111561067d5761067d615049565b63ffffffff8516815267ffffffffffffffff8416602082015273ffffffffffffffffffffffffffffffffffffffff83166040820152608060608201525f61512860808301846145e8565b8281525f82516154278160208501602087016145c6565b919091016020019392505050565b6040815263ffffffff83511660408201525f602084015160a0606084015261546060e08401826145e8565b90506040850151608084015267ffffffffffffffff60608601511660a084015273ffffffffffffffffffffffffffffffffffffffff60808601511660c084015282810360208401526144f581856145e8565b5f84516154c38184602089016145c6565b8201838582375f930192835250909392505050565b8035602083101561067d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b166017840152506155f4601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea264697066735822122007106a9f1a4ad0c76a6c3862b682c6be555db12b22a4209a408302fac9b0046164736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002b7c38038062002b7c833981016040819052620000339162000139565b8080816001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000072573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000098919062000168565b3380620000be57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c981620000ea565b506001600160a01b0390911660805263ffffffff1660a052506200018d9050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156200014a575f80fd5b81516001600160a01b038116811462000161575f80fd5b9392505050565b5f6020828403121562000179575f80fd5b815163ffffffff8116811462000161575f80fd5b60805160a0516129c6620001b65f395f61036301525f818161048301526104e701526129c65ff3fe608060405234801561000f575f80fd5b5060043610610115575f3560e01c806343ea4fa9116100ad5780638da5cb5b1161007d578063c40ff83511610063578063c40ff835146102b6578063e084d952146102c9578063f2fde38b146102dc575f80fd5b80638da5cb5b1461026f5780639c33abf714610296575f80fd5b806343ea4fa91461022257806354fd4d50146102355780636750cd4c14610254578063715018a614610267575f80fd5b806320efd722116100e857806320efd7221461017857806329460b0b1461018b57806339e3f9381461019e5780633c782a52146101be575f80fd5b806301ffc9a7146101195780630223536e146101415780630894edf1146101565780631881d94d14610169575b5f80fd5b61012c610127366004611bf2565b6102ef565b60405190151581526020015b60405180910390f35b61015461014f366004611c92565b61034a565b005b610154610164366004611ceb565b61035c565b60016040516101389190611d33565b610154610186366004611dd6565b6104e5565b610154610199366004611e25565b610645565b6101b16101ac366004611e77565b610828565b6040516101389190611f69565b6102026101cc366004611f7b565b600260209081525f938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff909116602083015201610138565b6101b1610230366004611e77565b6109c3565b60408051600381525f6020820152600291810191909152606001610138565b61012c610262366004611fad565b610d74565b610154610d7e565b5f5460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610138565b6102a96102a4366004611fc6565b610d91565b6040516101389190611ffd565b6101546102c4366004612067565b610e31565b61012c6102d7366004612283565b610e41565b6101546102ea3660046122cd565b610e55565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0ab7be9f000000000000000000000000000000000000000000000000000000001480610344575061034482610eb8565b92915050565b61035684848484610f4e565b50505050565b61038783837f0000000000000000000000000000000000000000000000000000000000000000611060565b5f610392848461112e565b90505f61039f858561113f565b90505f6103ac83836109c3565b90506103d08187876040516103c29291906122e6565b604051809103902086611161565b5f60405180606001604052808463ffffffff1681526020016103f2898961130a565b81526020016104018989611322565b67ffffffffffffffff908116909152604080517fa825d747000000000000000000000000000000000000000000000000000000008152835163ffffffff1660048201526020840151602482015290830151909116604482015273ffffffffffffffffffffffffffffffffffffffff8681166064830152608482018890529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b1580156104c6575f80fd5b505af11580156104d8573d5f803e3d5ffd5b5050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610554576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156103565736838383818110610571576105716122f5565b90506020028101906105839190612322565b905061059a6105956020830183611fad565b611344565b60026105ac6040830160208401611fad565b63ffffffff16036105ec576105e76105c76020830183611fad565b866105d5604085018561235e565b8101906105e291906123bf565b61138b565b61063c565b6105fc6040820160208301611fad565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610556565b61064d6113e1565b5f5b818110156107ea573683838381811061066a5761066a6122f5565b905060200281019061067c91906123f1565b905060ff61068d6020830183612423565b61069e906040810190602001612455565b60ff16036106d8576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6106e76020830183612423565b6106f8906060810190604001612455565b60ff1603610732576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6107486020830183612423565b61075690602081019061246e565b67ffffffffffffffff1603610797576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b56107a76020830183612423565b6107b090612487565b611433565b6107e15f6107c66020840184611fad565b6107d36020850185612423565b6107dc90612487565b611484565b5060010161064f565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b560828260405161081c92919061253c565b60405180910390a15050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561094557602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161091a575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156109b257602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610987575b505050505081525050905092915050565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff1680610a7257825467ffffffffffffffff168452610a91565b67ffffffffffffffff81811614610a915767ffffffffffffffff811684525b815468010000000000000000900460ff16610b4557825468010000000000000000900460ff1615610b405782600101805480602002602001604051908101604052809291908181526020018280548015610b1f57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610af4575b50505050506080850152825468010000000000000000900460ff1660208501525b610be1565b815468010000000000000000900460ff90811614610be15781600101805480602002602001604051908101604052809291908181526020018280548015610bc057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b95575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610cae5782546901000000000000000000900460ff1615610ca95782600201805480602002602001604051908101604052809291908181526020018280548015610c7157602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c46575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d62565b81546901000000000000000000900460ff90811614610d625781600201805480602002602001604051908101604052809291908181526020018280548015610d2a57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610cff575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610d6b84611433565b50505092915050565b5f61034482611817565b610d866113e1565b610d8f5f61187d565b565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63ffffffff831601610df057610dca83856109c3565b604051602001610dda9190611f69565b6040516020818303038152906040529050610e2a565b6040517fba97c1fa00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610633565b9392505050565b610e3c838383611060565b505050565b5f610e4d8484846118f1565b949350505050565b610e5d6113e1565b73ffffffffffffffffffffffffffffffffffffffff8116610eac576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610633565b610eb58161187d565b50565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061034457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610344565b6040805180820182526001815267ffffffffffffffff8316602082015290516002905f90610f7f90889088906122e6565b604080519182900390912082526020808301939093529081015f9081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916110529187908790869088906126d6565b60405180910390a150505050565b6051821461109a576040517fc9bf37b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016110a684846119f1565b60ff16146110e0576040517f3a9ae7b900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff166110f18484611a12565b63ffffffff1614610e3c576040517f42d2c97e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e2a61113c8484611a21565b90565b5f61114e600d60098486612759565b61115791612780565b60e01c9392505050565b61116c8383836118f1565b6111a2576040517f4c3118d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611257575f5b836020015160ff168160ff161015611255575f83815260026020908152604080832085845290915281206080860151805191929160ff85169081106111f8576111f86122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001690556001016111b1565b505b604083015160ff1615610e3c575f5b836040015160ff168160ff161015610356575f838152600260209081526040808320858452909152812060a0860151805191929160ff85169081106112ad576112ad6122f5565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611266565b5f611319602d600d8486612759565b610e2a916127c8565b5f611331600960018486612759565b61133a91612804565b60c01c9392505050565b61134d81611817565b610eb5576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610633565b611396828483611484565b6113a082846109c3565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516113d49392919061284a565b60405180910390a1505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610d8f576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610633565b602081015160ff1615801561144d5750606081015160ff16155b15610eb5576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff908116148061149f5750602081015160ff16155b156114e657608081015151156114e1576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611565565b806020015160ff168160800151511415806115215750600261150a600160ff6128b1565b61151491906128ca565b60ff16816020015160ff16115b15611558576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115658160800151611a30565b604081015160ff90811614806115805750604081015160ff16155b156116065760a081015151156115c2576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611601576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd565b806040015160ff168160a00151511415806116415750600261162a600160ff6128b1565b61163491906128ca565b60ff16816040015160ff16115b15611678576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806116995750806040015160ff16816060015160ff16115b156116d0576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116dd8160a00151611a30565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a01000000000000000000009590911694909402939093178355608084015180518594936117f393908501920190611b56565b5060a0820151805161180f916002840191602090910190611b56565b505050505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff16151580610e2a5750546a0100000000000000000000900460ff16151592915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60208301515f9060ff161561196f575f5b846020015160ff168160ff1610156119585761194385608001518260ff1681518110611930576119306122f5565b60200260200101518585885f0151611ac8565b611950575f915050610e2a565b600101611902565b50836040015160ff165f0361196f57506001610e2a565b60608401515f5b856040015160ff168160ff1610156119e6576119b78660a001518260ff16815181106119a4576119a46122f5565b60200260200101518686895f0151611ac8565b156119de57816119c681612910565b9250508160ff165f036119de57600192505050610e2a565b600101611976565b505f95945050505050565b5f6119ff6001828486612759565b611a089161294a565b60f81c9392505050565b5f61114e6031602d8486612759565b5f611319605160318486612759565b5f805b8251811015610e3c575f838281518110611a4f57611a4f6122f5565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611611abe576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101611a33565b5f838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff16938301939093529091611b4c57508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b828054828255905f5260205f20908101928215611bce579160200282015b82811115611bce57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190611b74565b50611bda929150611bde565b5090565b5b80821115611bda575f8155600101611bdf565b5f60208284031215611c02575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e2a575f80fd5b5f8083601f840112611c41575f80fd5b50813567ffffffffffffffff811115611c58575f80fd5b602083019150836020828501011115611c6f575f80fd5b9250929050565b803567ffffffffffffffff81168114611c8d575f80fd5b919050565b5f805f8060608587031215611ca5575f80fd5b843567ffffffffffffffff811115611cbb575f80fd5b611cc787828801611c31565b90955093505060208501359150611ce060408601611c76565b905092959194509250565b5f805f60408486031215611cfd575f80fd5b833567ffffffffffffffff811115611d13575f80fd5b611d1f86828701611c31565b909790965060209590950135949350505050565b6020810160038310611d6c577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b803573ffffffffffffffffffffffffffffffffffffffff81168114611c8d575f80fd5b5f8083601f840112611da5575f80fd5b50813567ffffffffffffffff811115611dbc575f80fd5b6020830191508360208260051b8501011115611c6f575f80fd5b5f805f60408486031215611de8575f80fd5b611df184611d72565b9250602084013567ffffffffffffffff811115611e0c575f80fd5b611e1886828701611d95565b9497909650939450505050565b5f8060208385031215611e36575f80fd5b823567ffffffffffffffff811115611e4c575f80fd5b611e5885828601611d95565b90969095509350505050565b803563ffffffff81168114611c8d575f80fd5b5f8060408385031215611e88575f80fd5b611e9183611d72565b9150611e9f60208401611e64565b90509250929050565b5f815180845260208085019450602084015f5b83811015611eed57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101611ebb565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152611f4760c0850182611ea8565b905060a083015184820360a0860152611f608282611ea8565b95945050505050565b602081525f610e2a6020830184611ef8565b5f805f60608486031215611f8d575f80fd5b8335925060208401359150611fa460408501611d72565b90509250925092565b5f60208284031215611fbd575f80fd5b610e2a82611e64565b5f805f60608486031215611fd8575f80fd5b611fe184611e64565b9250611fef60208501611d72565b9150611fa460408501611e64565b5f602080835283518060208501525f5b818110156120295785810183015185820160400152820161200d565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f805f60408486031215612079575f80fd5b833567ffffffffffffffff81111561208f575f80fd5b61209b86828701611c31565b9094509250611fa4905060208501611e64565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff811182821017156120fe576120fe6120ae565b60405290565b803560ff81168114611c8d575f80fd5b5f82601f830112612123575f80fd5b8135602067ffffffffffffffff80831115612140576121406120ae565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715612183576121836120ae565b60405293845260208187018101949081019250878511156121a2575f80fd5b6020870191505b848210156121c9576121ba82611d72565b835291830191908301906121a9565b979650505050505050565b5f60c082840312156121e4575f80fd5b6121ec6120db565b90506121f782611c76565b815261220560208301612104565b602082015261221660408301612104565b604082015261222760608301612104565b6060820152608082013567ffffffffffffffff80821115612246575f80fd5b61225285838601612114565b608084015260a084013591508082111561226a575f80fd5b5061227784828501612114565b60a08301525092915050565b5f805f60608486031215612295575f80fd5b833567ffffffffffffffff8111156122ab575f80fd5b6122b7868287016121d4565b9660208601359650604090950135949350505050565b5f602082840312156122dd575f80fd5b610e2a82611d72565b818382375f9101908152919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112612354575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612391575f80fd5b83018035915067ffffffffffffffff8211156123ab575f80fd5b602001915036819003821315611c6f575f80fd5b5f602082840312156123cf575f80fd5b813567ffffffffffffffff8111156123e5575f80fd5b610e4d848285016121d4565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612354575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612354575f80fd5b5f60208284031215612465575f80fd5b610e2a82612104565b5f6020828403121561247e575f80fd5b610e2a82611c76565b5f61034436836121d4565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126124c5575f80fd5b830160208101925035905067ffffffffffffffff8111156124e4575f80fd5b8060051b3603821315611c6f575f80fd5b8183525f60208085019450825f5b85811015611eed5773ffffffffffffffffffffffffffffffffffffffff61252983611d72565b1687529582019590820190600101612503565b60208082528181018390525f906040808401600586901b8501820187855b888110156126c8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c36030181126125bb575f80fd5b8b0163ffffffff6125cb82611e64565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612601575f80fd5b8589018890520167ffffffffffffffff61261a82611c76565b168786015261262a888201612104565b606060ff808316828901526126408a8501612104565b92506080818416818a0152612656838601612104565b935060a09250818416838a015261266f81860186612492565b60c08b8101529450915061268a9050610100890184836124f5565b92505061269981840184612492565b93509050838783030160e08801526126b28284836124f5565b978a01979650505092870192505060010161255a565b509098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a08301375f60a085830101525f60a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b5f8085851115612767575f80fd5b83861115612773575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156127c05780818660040360031b1b83161692505b505092915050565b80356020831015610344577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156127c05760089490940360031b84901b1690921692915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f611f606060830184611ef8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff828116828216039081111561034457610344612884565b5f60ff831680612901577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b5f60ff82168061292257612922612884565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156127c05760019490940360031b84901b169092169291505056fea264697066735822122049ae6e8c1120ac3b04c6e78fb5426f5903144b4cb03d43aa8492006a0cbef95864736f6c6343000816003360e060405234801562000010575f80fd5b5060405162005cb238038062005cb2833981016040819052620000339162000170565b82836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000071573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000979190620001ba565b3380620000bd57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c88162000109565b506001600160a01b0391821660805263ffffffff1660a05260c092909252600655600280546001600160a01b031916939091169290921790915550620001e6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016d575f80fd5b50565b5f805f806080858703121562000184575f80fd5b8451620001918162000158565b6020860151909450620001a48162000158565b6040860151606090960151949790965092505050565b5f60208284031215620001cb575f80fd5b815163ffffffff81168114620001df575f80fd5b9392505050565b60805160a05160c051615a7e620002345f395f81816121c00152612ffa01525f610e0f01525f81816107510152818161089401528181610a0f01528181610ff80152611cee0152615a7e5ff3fe60806040526004361061019c575f3560e01c80637620fd01116100dc578063d15b0d4911610087578063f0f4426011610062578063f0f442601461055b578063f2fde38b1461057a578063faaebd2114610599578063fd9be522146105c4575f80fd5b8063d15b0d49146104f1578063d80e9bd914610510578063ea69d69d1461053c575f80fd5b80639c33abf7116100b75780639c33abf714610487578063ab750e75146104b3578063c85f4b4e146104d2575f80fd5b80637620fd01146103d65780638da5cb5b146104325780638eb0bf301461045b575f80fd5b806320efd7221161014757806354fd4d501161012257806354fd4d5014610359578063594924da146103845780636750cd4c146103a3578063715018a6146103c2575f80fd5b806320efd722146102d15780633c782a52146102f05780634389e58f1461032c575f80fd5b80631881d94d116101775780631881d94d1461024b5780631fb5122514610266578063200175f7146102b0575f80fd5b806301ffc9a7146101a7578063052368ca146101db5780630e97289b146101fa575f80fd5b366101a357005b5f80fd5b3480156101b2575f80fd5b506101c66101c1366004614622565b6105e3565b60405190151581526020015b60405180910390f35b3480156101e6575f80fd5b506101c66101f5366004614661565b6106c7565b348015610205575f80fd5b506002546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b348015610256575f80fd5b5060026040516101d291906146b5565b348015610271575f80fd5b506102a261028036600461474f565b600360209081525f938452604080852082529284528284209052825290205481565b6040519081526020016101d2565b3480156102bb575f80fd5b506102cf6102ca366004614791565b6106e7565b005b3480156102dc575f80fd5b506102cf6102eb366004614817565b610892565b3480156102fb575f80fd5b506102a261030a366004614868565b600460209081525f938452604080852082529284528284209052825290205481565b348015610337575f80fd5b5061034b6103463660046148dc565b6109f8565b6040516101d29291906149c9565b348015610364575f80fd5b5060408051600a81525f60208201526002918101919091526060016101d2565b34801561038f575f80fd5b506102cf61039e3660046149ec565b610d8d565b3480156103ae575f80fd5b506101c66103bd366004614a39565b61105c565b3480156103cd575f80fd5b506102cf611066565b3480156103e1575f80fd5b5061040660075460065473ffffffffffffffffffffffffffffffffffffffff90911691565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d2565b34801561043d575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610226565b348015610466575f80fd5b5061047a610475366004614a52565b611079565b6040516101d29190614b52565b348015610492575f80fd5b506104a66104a1366004614b64565b6114bd565b6040516101d29190614b9d565b3480156104be575f80fd5b506102cf6104cd3660046149ec565b61155d565b3480156104dd575f80fd5b506102cf6104ec366004614baf565b6115e6565b3480156104fc575f80fd5b506102cf61050b366004614bee565b6117cd565b34801561051b575f80fd5b5061052f61052a3660046148dc565b61185b565b6040516101d29190614c05565b348015610547575f80fd5b5061047a610556366004614a52565b6119c4565b348015610566575f80fd5b506102cf610575366004614c1c565b611b7e565b348015610585575f80fd5b506102cf610594366004614c1c565b611bf9565b3480156105a4575f80fd5b506102a26105b3366004614c1c565b60056020525f908152604090205481565b3480156105cf575f80fd5b506102cf6105de366004614c37565b611c5c565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061067557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb6e9ace300000000000000000000000000000000000000000000000000000000145b806106c157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f6106dc6106d486614e6e565b858585611dcc565b90505b949350505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610738576040517f96830d1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107dc9190614e79565b73ffffffffffffffffffffffffffffffffffffffff1603610829576040517fb77f504400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610834838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610901576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b818110156109f2573683838381811061091e5761091e614e94565b90506020028101906109309190614ec1565b90506109476109426020830183614a39565b611fac565b60016109596040830160208401614a39565b63ffffffff1603610999576109946109746020830183614a39565b866109826040850185614efd565b81019061098f9190614f5e565b611ff3565b6109e9565b6109a96040820160208301614a39565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b50600101610903565b50505050565b604080518082019091525f808252602082015260607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610a7c576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6080860135610aad610a946060890160408a01614c1c565b73ffffffffffffffffffffffffffffffffffffffff1690565b14610ae4576040517fa4884a5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80610af188888861203c565b90925090505f80610b22610b0b60608c0160408d01614c1c565b610b1b60808d0160608e01614a39565b858a6120c1565b9092509050610b318284614fbd565b9250610b4060c08b018b614efd565b604051610b4e929190614fd0565b604051809103902060035f8c6040016020810190610b6c9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f90812090610ba460808e0160608f01614a39565b63ffffffff1681526020808201929092526040015f90812091610bc9908e018e614fdf565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f20819055505f610ce36040518060e001604052808d5f016020810190610c0f9190614fdf565b67ffffffffffffffff1681526020018d6060016020810190610c319190614a39565b63ffffffff1681526020018d6040016020810190610c4f9190614c1c565b73ffffffffffffffffffffffffffffffffffffffff1681526020018d6020016020810190610c7d9190614a39565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610ca960c08f018f614efd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505091525061224b565b6002546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063faed6c5890610d3e9084908e908e9060040161503f565b5f604051808303815f87803b158015610d55575f80fd5b505af1158015610d67573d5f803e3d5ffd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610dc7576040517f864d08b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001610dd385856122b0565b60ff1614610e0d576040517f7952a82f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610e3e85856122d1565b63ffffffff1614610e7b576040517f3e96df1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610e8685856122f3565b90505f610e938686612304565b90505f610ea08787612313565b73ffffffffffffffffffffffffffffffffffffffff84165f90815260036020908152604080832063ffffffff87168452825280832067ffffffffffffffff851684529091529020549091508514610f23576040517f660e96ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610f2e8484611079565b9050610f53818989604051610f44929190614fd0565b60405180910390208888612335565b5f60405180606001604052808563ffffffff168152602001610f758b8b6124ca565b815267ffffffffffffffff858116602092830152604080517fa825d747000000000000000000000000000000000000000000000000000000008152845163ffffffff16600482015292840151602484015283015116604482015273ffffffffffffffffffffffffffffffffffffffff8781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a4015f604051808303815f87803b15801561103b575f80fd5b505af115801561104d573d5f803e3d5ffd5b50505050505050505050505050565b5f6106c1826124e2565b61106e612560565b6110775f6125b2565b565b6040805160c0810182525f808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88811685526001845286852092855291909252939091208054929391929091168061113057825473ffffffffffffffffffffffffffffffffffffffff16611132565b805b73ffffffffffffffffffffffffffffffffffffffff168452815474010000000000000000000000000000000000000000900460ff1661122257825474010000000000000000000000000000000000000000900460ff161561121d57826001018054806020026020016040519081016040528092919081815260200182805480156111f057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116111c5575b50505050506080850152825474010000000000000000000000000000000000000000900460ff1660208501525b6112d6565b815474010000000000000000000000000000000000000000900460ff908116146112d657816001018054806020026020016040519081016040528092919081815260200182805480156112a957602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161127e575b50505050506080850152815474010000000000000000000000000000000000000000900460ff1660208501525b81547501000000000000000000000000000000000000000000900460ff166113d35782547501000000000000000000000000000000000000000000900460ff16156113ce578260020180548060200260200160405190810160405280929190818152602001828054801561137e57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611353575b505050505060a0850152825460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114ab565b81547501000000000000000000000000000000000000000000900460ff908116146114ab578160020180548060200260200160405190810160405280929190818152602001828054801561145b57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611430575b505050505060a0850152815460ff75010000000000000000000000000000000000000000008204811660408701527601000000000000000000000000000000000000000000009091041660608501525b6114b484612626565b50505092915050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63ffffffff83160161151c576114f68385611079565b6040516020016115069190614b52565b6040516020818303038152906040529050611556565b6040517f0cb84e8200000000000000000000000000000000000000000000000000000000815263ffffffff831660048201526024016109e0565b9392505050565b8060045f8686604051611571929190614fd0565b604080519182900390912082526020808301939093529081015f90812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a95258916115d891879087908790879061506e565b60405180910390a150505050565b6115ee612560565b5f5b8181101561178f573683838381811061160b5761160b614e94565b905060200281019061161d91906150b1565b905060ff61162e60208301836150e3565b61163f906040810190602001615115565b60ff1603611679576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff61168860208301836150e3565b611699906060810190604001615115565b60ff16036116d3576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f16116e360208301836150e3565b6116ec90614e6e565b612626565b5f6116ff60208301836150e3565b61170d906020810190614c1c565b73ffffffffffffffffffffffffffffffffffffffff160361175a576040517f76df55a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117865f61176b6020840184614a39565b61177860208501856150e3565b61178190614e6e565b612677565b506001016115f0565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f3482826040516117c19291906151da565b60405180910390a15050565b6117d5612560565b60065481111561181f576006546040517fb79d12630000000000000000000000000000000000000000000000000000000081526109e0918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f8061187a8686612a25565b90925090505f6118906060890160408a01614c1c565b90505f6118a360808a0160608b01614a39565b90505f6118b08383611079565b90505f6118df82856118c96118c48f61540c565b612c5b565b8e8060c001906118d99190614efd565b8a612d2f565b82516040517fc8f8dcd100000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff169063c8f8dcd1906119379087908a906004016154a7565b602060405180830381865afa158015611952573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197691906154d5565b6119809082614fbd565b90505f806119908686858d612efb565b909250905061199f8284614fbd565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b6040805160c0810182525f808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8084165f90815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff7401000000000000000000000000000000000000000087048116828501527501000000000000000000000000000000000000000000870481168287015276010000000000000000000000000000000000000000000090960490951660608601529182018054845181840281018401909552808552929360808601939092830182828015611b0057602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611ad5575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015611b6d57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611b42575b505050505081525050905092915050565b611b86612560565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f90602001611850565b611c01612560565b73ffffffffffffffffffffffffffffffffffffffff8116611c50576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b611c59816125b2565b50565b335f9081526005602052604090205480821115611caf576040517fb79d126300000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016109e0565b335f908152600560209081526040808320858503905580517fe1758bd800000000000000000000000000000000000000000000000000000000815290517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169263e1758bd892600480820193918290030181865afa158015611d48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6c9190614e79565b9050611d7981858561303c565b6040805133815273ffffffffffffffffffffffffffffffffffffffff861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a6669883906060016115d8565b60208401515f9060ff1615611e80575f5b856020015160ff168160ff161015611e6957611e5486608001518260ff1681518110611e0b57611e0b614e94565b60200260200101518686865f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b611e61575f9150506106df565b600101611ddd565b50846040015160ff165f03611e80575060016106df565b60608501515f5b866040015160ff168160ff161015611f2d57611efe8760a001518260ff1681518110611eb557611eb5614e94565b60200260200101518787875f92835260046020908152604080852093855292815282842073ffffffffffffffffffffffffffffffffffffffff9095168452939093529020541490565b15611f255781611f0d816154ec565b9250508160ff165f03611f25576001925050506106df565b600101611e87565b505f9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611f86576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa773ffffffffffffffffffffffffffffffffffffffff8416838361306c565b505050565b611fb5816124e2565b611c59576040517f0ff03e5400000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526024016109e0565b611ffe828483612677565b6120088284611079565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e14282848360405161088593929190615526565b60605f805f61204b8686612a25565b90925090505f61207461206460608a0160408b01614c1c565b61047560808b0160608c01614a39565b80519091506120939061208d60608b0160408c01614c1c565b856130f9565b93505f806120a2838b86613227565b90925090506120b18287614fbd565b909a909950975050505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd51c5486000000000000000000000000000000000000000000000000000000001790526007549192505f9182916121e89173ffffffffffffffffffffffffffffffffffffffff16907f0000000000000000000000000000000000000000000000000000000000000000908490876132ed565b915091506121f887878484613398565b9095509350841561223f5760075473ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604081208054879290612239908490614fbd565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a01519551939861229a986001989197919673ffffffffffffffffffffffffffffffffffffffff169501615560565b6040516020818303038152906040529050919050565b5f6122be6001828486615625565b6122c79161564c565b60f81c9392505050565b5f6122e06031602d8486615625565b6122e991615694565b60e01c9392505050565b5f611556612301848461340f565b90565b5f6122e0600d60098486615625565b5f612322600960018486615625565b61232b916156da565b60c01c9392505050565b61234184848484611dcc565b612377576040517f28ca4b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084015160ff161561241e575f5b846020015160ff168160ff16101561241c575f84815260046020908152604080832086845290915281206080870151805191929160ff85169081106123cd576123cd614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9055806001019050612386565b505b604084015160ff16156109f2575f5b846040015160ff168160ff1610156124c3575f848152600460209081526040808320868452909152812060a0870151805191929160ff851690811061247457612474614e94565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f905580600101905061242d565b5050505050565b5f6124d9602d600d8486615625565b61155691615720565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805474010000000000000000000000000000000000000000900460ff16151580611556575054760100000000000000000000000000000000000000000000900460ff16151592915050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611077576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016109e0565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff161580156126405750606081015160ff16155b15611c59576040517f9b5f9f7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806126925750602081015160ff16155b156126d957608081015151156126d4576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758565b806020015160ff16816080015151141580612714575060026126fd600160ff61575c565b6127079190615775565b60ff16816020015160ff16115b1561274b576040517f55a01c0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612758816080015161341e565b604081015160ff90811614806127735750604081015160ff16155b156127f95760a081015151156127b5576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16156127f4576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d0565b806040015160ff168160a00151511415806128345750600261281d600160ff61575c565b6128279190615775565b60ff16816040015160ff16115b1561286b576040517fe35436c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff16158061288c5750806040015160ff16816060015160ff16115b156128c3576040517ff92940be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d08160a0015161341e565b73ffffffffffffffffffffffffffffffffffffffff8381165f90815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097167fffffffffffffffffffffff000000000000000000000000000000000000000000909116177401000000000000000000000000000000000000000060ff96871602177fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000968616969096027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16959095177601000000000000000000000000000000000000000000009490951693909302939093178255608084015180518594612a0193850192019061458f565b5060a08201518051612a1d91600284019160209091019061458f565b505050505050565b6060806002831015612a65576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b5f612a736002828688615625565b612a7c916157bb565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8201612c4457805f5b86831015612bd1575f612ac560018501858a8c615625565b612ace9161564c565b60f81c90505f819003612b0f576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016109e0565b8160ff165f03612b2157809150612b5d565b8160ff168160ff1614612b5d57365f612b3c86868c8e615625565b91509150612b4d89898685856134b6565b9099509750859450919250829150505b60018401935f90612b7390600301868b8d615625565b612b7c916157bb565b60f01c90505f819003612bbe576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016109e0565b8060020161ffff16850194505050612aad565b828714612c0d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b6002871115612c3d57365f612c2485858b8d615625565b91509150612c3588888585856134b6565b909850965050505b5050612c52565b612c4f828787613629565b93505b50509250929050565b8051602080830151604080850151606080870151608088015193517f01000000000000000000000000000000000000000000000000000000000000009681019690965260c09690961b7fffffffffffffffff00000000000000000000000000000000000000000000000016602186015260e093841b7fffffffff00000000000000000000000000000000000000000000000000000000908116602987015273ffffffffffffffffffffffffffffffffffffffff909216602d8601529490921b909116604d830152605182015260710161229a565b5f805f612d3b846138a4565b915091505f89604001518a60200151612d549190615801565b90505f5b8160ff168160ff161015612eed575f8b6020015160ff168260ff1610612dac5760a08c015160208d0151612d8c908461575c565b60ff1681518110612d9f57612d9f614e94565b6020026020010151612dce565b8b608001518260ff1681518110612dc557612dc5614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015612e3a578360ff16868281518110612e0157612e01614e94565b602002602001015160ff1603612e3257868181518110612e2357612e23614e94565b60200260200101519150612e3a565b600101612de2565b506040517ffdb9b0f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063fdb9b0f190612e95908f908f908f908f90889060040161581a565b602060405180830381865afa158015612eb0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ed491906154d5565b612ede9088614fbd565b96505050806001019050612d58565b505050509695505050505050565b6007545f90819073ffffffffffffffffffffffffffffffffffffffff1615610d845760405173ffffffffffffffffffffffffffffffffffffffff8716602482015263ffffffff861660448201526064810185905283151560848201525f9060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd4244221000000000000000000000000000000000000000000000000000000001790526007549192505f9182916130209173ffffffffffffffffffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000009086613b3e565b9150915061303087878484613398565b94509450505050610d84565b73ffffffffffffffffffffffffffffffffffffffff831661306157611fa78282613be5565b611fa7838383611f39565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611fa7908490613ce7565b6040517fc015bb7d0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff85169063c015bb7d9061314f90869086906004016154a7565b6020604051808303815f875af115801561316b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061318f91906154d5565b905080156131d15773ffffffffffffffffffffffffffffffffffffffff84165f90815260056020526040812080548392906131cb908490614fbd565b90915550505b6040805173ffffffffffffffffffffffffffffffffffffffff86168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b5f6060816132376118c48661540c565b90505f61324b6132468761540c565b613d86565b905060606132768861326289840160408b01614c1c565b8561327060c08c018c614efd565b8b613da3565b604051919650915061328e908490849060200161587b565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a00151836040516132da939291906158a9565b60405180910390a1505050935093915050565b5f6060863b80830361331257604080515f80825260208201909252925092505061338e565b5f805f8761ffff1667ffffffffffffffff81111561333257613332614c61565b6040519080825280601f01601f19166020018201604052801561335c576020820181803683370190505b5090505f80885160208a018c8f8ff191503d92508783111561337c578792505b828152825f602083013e909450925050505b9550959350505050565b5f808315806133a8575082516020115b156133b757505f905080610d84565b5f838060200190518101906133cc91906154d5565b905085156133dc57809150613405565b5f60065488116133ee576006546133f0565b875b90508082116133ff5781613401565b805b9350505b5094509492505050565b5f6124d9605160318486615625565b5f805b8251811015611fa7575f83828151811061343d5761343d614e94565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116134ac576040517fc0762a5d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101613421565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161355057865115613513578684846040516020016134ff93929190615905565b604051602081830303815290604052613549565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b965061361e565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016135e7578551156135aa5785848460405160200161359693929190615905565b6040516020818303038152906040526135e0565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b955061361e565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016109e0565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff85160161374e5760228214613690576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6136b06136a2602260028688615625565b6136ab91615720565b614072565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050611556565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff85160161386c576042821115806137895750606282115b156137c0576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6137d26136a2602260028688615625565b90505f6137e66136a2604260228789615625565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe8501613819866042818a615625565b61382291615720565b60405160086020938403029190911c9250613853916001916011918391889183916031916002918b918b910161592b565b6040516020818303038152906040529350505050611556565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016109e0565b60608082515f036138b457915091565b5f6138be846140cb565b90508060ff1660010361396e5760408051600180825281830190925290816020015b60608152602001906001900390816138e057905050925083835f8151811061390a5761390a614e94565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506139428460036141ed565b825f8151811061395457613954614e94565b602002602001019060ff16908160ff168152505050915091565b8060ff1667ffffffffffffffff81111561398a5761398a614c61565b6040519080825280602002602001820160405280156139b3578160200160208202803683370190505b5091508060ff1667ffffffffffffffff8111156139d2576139d2614c61565b604051908082528060200260200182016040528015613a0557816020015b60608152602001906001900390816139f05790505b5092505f8060ff5b8651831015613ab5576001909201915f613a27888561426c565b6002949094019390505f613a3b89866141ed565b90508260ff1660ff03613a5057809250613aa6565b8260ff168160ff1614613aa6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd848603015f613a8e8b87846142eb565b9050613a9c8a8a8784614464565b5093909301929150815b5061ffff169290920191613a0d565b8183035f613ac48985846142eb565b9050613ad288888584614464565b5f5b8660ff168160ff161015613b3257878160ff1681518110613af757613af7614e94565b6020908102919091010180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff169052600101613ad4565b50505050505050915091565b5f6060853b808303613b6357604080515f808252602082019092529250925050610d84565b5f805f8761ffff1667ffffffffffffffff811115613b8357613b83614c61565b6040519080825280601f01601f191660200182016040528015613bad576020820181803683370190505b5090505f80885160208a018d8dfa91503d925087831115613bcc578792505b828152825f602083013e90999098509650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216613c32576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114613c88576040519150601f19603f3d011682016040523d82523d5f602084013e613c8d565b606091505b5050905080611fa7576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016109e0565b5f8060205f8451602086015f885af180613d06576040513d5f823e3d81fd5b50505f513d91508115613d1d578060011415613d37565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f2576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016109e0565b60608160a001518260c0015160405160200161229a929190615a23565b5f60605f80613db1856138a4565b915091505f8a604001518b60200151613dca9190615801565b90508060ff1667ffffffffffffffff811115613de857613de8614c61565b604051908082528060200260200182016040528015613e11578160200160208202803683370190505b5093505f5b8160ff168160ff161015614063575f8c6020015160ff168260ff1610613e6a5760a08d015160208e0151613e4a908461575c565b60ff1681518110613e5d57613e5d614e94565b6020026020010151613e8c565b8c608001518260ff1681518110613e8357613e83614e94565b60200260200101515b60408051602081019091525f808252919250905b8551811015613ef8578360ff16868281518110613ebf57613ebf614e94565b602002602001015160ff1603613ef057868181518110613ee157613ee1614e94565b60200260200101519150613ef8565b600101613ea0565b508173ffffffffffffffffffffffffffffffffffffffff1663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b8152600401613f3a95949392919061581a565b6020604051808303815f875af1158015613f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7a91906154d5565b878460ff1681518110613f8f57613f8f614e94565b6020026020010181815250505f878460ff1681518110613fb157613fb1614e94565b6020026020010151111561405957868360ff1681518110613fd457613fd4614e94565b602002602001015160055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546140279190614fbd565b92505081905550868360ff168151811061404357614043614e94565b6020026020010151886140569190614fbd565b97505b5050600101613e16565b50505050965096945050505050565b5f6fffffffffffffffffffffffffffffffff8211156140c7576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016109e0565b5090565b5f80805b83518210156141a9576001909101905f6140e9858461426c565b905060028301925060028161ffff161015614133576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018490526024016109e0565b5f61413e86856141ed565b90508060ff1660ff0361417d576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ff82161b831661419a5760019485019460ff82161b831792505b5061ffff1691909101906140cf565b835182146141e6576040517f04eb6e0c000000000000000000000000000000000000000000000000000000008152600481018390526024016109e0565b5050919050565b5f6141f9826001614fbd565b83511015614263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f55696e74385f6f75744f66426f756e64730000000000000000000000000060448201526064016109e0565b50016001015190565b5f614278826002614fbd565b835110156142e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e647300000000000000000000000060448201526064016109e0565b50016002015190565b6060816142f981601f614fbd565b1015614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b61436b8284614fbd565b845110156143d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b6060821580156143f35760405191505f82526020820160405261445b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561442c578051835260209283019201614414565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b8160ff1660ff036144a1576040517fd3d3d9bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6144ad836001615801565b90505f5b8451811015612a1d575f8582815181106144cd576144cd614e94565b602002602001015190508060ff168360ff1603614542578682815181106144f6576144f6614e94565b60200260200101518460405160200161451092919061587b565b60405160208183030381529060405287838151811061453157614531614e94565b602002602001018190525050612a1d565b8060ff165f03614586578286838151811061455f5761455f614e94565b602002602001019060ff16908160ff16815250508387838151811061453157614531614e94565b506001016144b1565b828054828255905f5260205f20908101928215614607579160200282015b8281111561460757825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906145ad565b506140c79291505b808211156140c7575f815560010161460f565b5f60208284031215614632575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611556575f80fd5b5f805f8060808587031215614674575f80fd5b843567ffffffffffffffff81111561468a575f80fd5b850160c0818803121561469b575f80fd5b966020860135965060408601359560600135945092505050565b60208101600383106146ee577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b73ffffffffffffffffffffffffffffffffffffffff81168114611c59575f80fd5b8035614720816146f4565b919050565b803563ffffffff81168114614720575f80fd5b803567ffffffffffffffff81168114614720575f80fd5b5f805f60608486031215614761575f80fd5b833561476c816146f4565b925061477a60208501614725565b915061478860408501614738565b90509250925092565b5f805f606084860312156147a3575f80fd5b83356147ae816146f4565b925060208401356147be816146f4565b929592945050506040919091013590565b5f8083601f8401126147df575f80fd5b50813567ffffffffffffffff8111156147f6575f80fd5b6020830191508360208260051b8501011115614810575f80fd5b9250929050565b5f805f60408486031215614829575f80fd5b8335614834816146f4565b9250602084013567ffffffffffffffff81111561484f575f80fd5b61485b868287016147cf565b9497909650939450505050565b5f805f6060848603121561487a575f80fd5b83359250602084013591506040840135614893816146f4565b809150509250925092565b5f8083601f8401126148ae575f80fd5b50813567ffffffffffffffff8111156148c5575f80fd5b602083019150836020828501011115614810575f80fd5b5f805f80606085870312156148ef575f80fd5b843567ffffffffffffffff80821115614906575f80fd5b9086019060e08289031215614919575f80fd5b9094506020860135908082111561492e575f80fd5b5061493b8782880161489e565b90945092505060408501358015158114614953575f80fd5b939692955090935050565b5f5b83811015614978578181015183820152602001614960565b50505f910152565b5f815180845261499781602086016020860161495e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8251815260208084015190820152606060408201525f6106df6060830184614980565b5f805f80606085870312156149ff575f80fd5b843567ffffffffffffffff811115614a15575f80fd5b614a218782880161489e565b90989097506020870135966040013595509350505050565b5f60208284031215614a49575f80fd5b61155682614725565b5f8060408385031215614a63575f80fd5b8235614a6e816146f4565b9150614a7c60208401614725565b90509250929050565b5f815180845260208085019450602084015f5b83811015614aca57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614a98565b509495945050505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c06080850152614b3060c0850182614a85565b905060a083015184820360a0860152614b498282614a85565b95945050505050565b602081525f6115566020830184614ad5565b5f805f60608486031215614b76575f80fd5b614b7f84614725565b92506020840135614b8f816146f4565b915061478860408501614725565b602081525f6115566020830184614980565b5f8060208385031215614bc0575f80fd5b823567ffffffffffffffff811115614bd6575f80fd5b614be2858286016147cf565b90969095509350505050565b5f60208284031215614bfe575f80fd5b5035919050565b8151815260208083015190820152604081016106c1565b5f60208284031215614c2c575f80fd5b8135611556816146f4565b5f8060408385031215614c48575f80fd5b8235614c53816146f4565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b60405290565b60405160e0810167ffffffffffffffff81118282101715614cb157614cb1614c61565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614d2157614d21614c61565b604052919050565b803560ff81168114614720575f80fd5b5f82601f830112614d48575f80fd5b8135602067ffffffffffffffff821115614d6457614d64614c61565b8160051b614d73828201614cda565b9283528481018201928281019087851115614d8c575f80fd5b83870192505b84831015614db4578235614da5816146f4565b82529183019190830190614d92565b979650505050505050565b5f60c08284031215614dcf575f80fd5b614dd7614c8e565b9050614de282614715565b8152614df060208301614d29565b6020820152614e0160408301614d29565b6040820152614e1260608301614d29565b6060820152608082013567ffffffffffffffff80821115614e31575f80fd5b614e3d85838601614d39565b608084015260a0840135915080821115614e55575f80fd5b50614e6284828501614d39565b60a08301525092915050565b5f6106c13683614dbf565b5f60208284031215614e89575f80fd5b8151611556816146f4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614ef3575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f30575f80fd5b83018035915067ffffffffffffffff821115614f4a575f80fd5b602001915036819003821315614810575f80fd5b5f60208284031215614f6e575f80fd5b813567ffffffffffffffff811115614f84575f80fd5b6106df84828501614dbf565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156106c1576106c1614f90565b818382375f9101908152919050565b5f60208284031215614fef575f80fd5b61155682614738565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f6150516040830186614980565b8281036020840152615064818587614ff8565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f61509d608083018688614ff8565b604083019490945250606001529392505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614ef3575f80fd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112614ef3575f80fd5b5f60208284031215615125575f80fd5b61155682614d29565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615161575f80fd5b830160208101925035905067ffffffffffffffff811115615180575f80fd5b8060051b3603821315614810575f80fd5b8183525f60208085019450825f5b85811015614aca5781356151b2816146f4565b73ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161519f565b60208082528181018390525f906040808401600586901b8501820187855b88811015615374577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112615259575f80fd5b8b0163ffffffff61526982614725565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4182360301811261529f575f80fd5b8589018890520180356152b1816146f4565b73ffffffffffffffffffffffffffffffffffffffff16858801526152d6818901614d29565b606060ff808316828901526152ec8a8501614d29565b92506080818416818a0152615302838601614d29565b935060a09250818416838a015261531b8186018661512e565b60c08b81015294509150615336905061010089018483615191565b9250506153458184018461512e565b93509050838783030160e088015261535e828483615191565b978a0197965050509287019250506001016151f8565b509098975050505050505050565b5f82601f830112615391575f80fd5b813567ffffffffffffffff8111156153ab576153ab614c61565b6153dc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614cda565b8181528460208386010111156153f0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0823603121561541c575f80fd5b615424614cb7565b61542d83614738565b815261543b60208401614725565b602082015261544c60408401614715565b604082015261545d60608401614725565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff81111561548f575f80fd5b61549b36828601615382565b60c08301525092915050565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f6106df6040830184614980565b5f602082840312156154e5575f80fd5b5051919050565b5f60ff8216806154fe576154fe614f90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff83166020820152606060408201525f6106dc6060830184614ad5565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d84015250846031830152836051830152825161561181607185016020870161495e565b919091016071019998505050505050505050565b5f8085851115615633575f80fd5b8386111561563f575f80fd5b5050820193919092039150565b7fff00000000000000000000000000000000000000000000000000000000000000813581811691600185101561568c5780818660010360031b1b83161692505b505092915050565b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561568c5760049490940360031b84901b1690921692915050565b7fffffffffffffffff000000000000000000000000000000000000000000000000813581811691600885101561568c5760089490940360031b84901b1690921692915050565b803560208310156106c1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b60ff82811682821603908111156106c1576106c1614f90565b5f60ff8316806157ac577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff84160491505092915050565b7fffff000000000000000000000000000000000000000000000000000000000000813581811691600285101561568c5760029490940360031b84901b1690921692915050565b60ff81811683821601908111156106c1576106c1614f90565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201525f6158486080830187614980565b828103604084015261585b818688614ff8565b9050828103606084015261586f8185614980565b98975050505050505050565b5f835161588c81846020880161495e565b8351908301906158a081836020880161495e565b01949350505050565b606081525f6158bb6060830186614a85565b602083820360208501526158cf8287614a85565b8481036040860152855180825260208088019450909101905f5b81811015615374578451835293830193918301916001016158e9565b5f845161591681846020890161495e565b8201838582375f930192835250909392505050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff000000000000000000000000000000000000000000000000000000000000808c60f01b166001850152818b60f81b1660038501527fffffffffffffffffffffffffffffffff000000000000000000000000000000008a60801b166004850152818960f81b166014850152808860f01b16601585015250808660f81b16601784015250615a0b601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b50602881019190915260480198975050505050505050565b8281525f8251615a3a81602085016020870161495e565b91909101602001939250505056fea2646970667358221220bea5f362b07accaf075edb98d71a1b4a7df6e2ebc2aacf15c6426cab5ad7691964736f6c63430008160033608060405234801562000010575f80fd5b5060405162003af938038062003af983398101604081905262000033916200045e565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b038581169190911790915584908490612ee090859085908216156200008d576200008b5f8362000220565b505b5f5b8551811015620000f157620000e77f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d357620000d36200050c565b60200260200101516200022060201b60201c565b506001016200008f565b505f5b81518110156200014257620001387fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d357620000d36200050c565b50600101620000f4565b505060016004908155600680546001600160a01b0319166001600160a01b038d169081179091556040805163416ecebf60e01b8152905191965063416ecebf95508083019450602093509091908290030181865afa158015620001a7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001cd919062000520565b6006805463ffffffff92909216600160a01b0263ffffffff60a01b199092169190911790555050600780546001600160a01b039094166001600160a01b0319909416939093179092555062000586915050565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156200027157505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620002be57600180546015906200029990600160a81b90046001600160401b03166200054c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b620002ca8383620002d6565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1662000379575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003303390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620002d0565b505f620002d0565b80516001600160a01b038116811462000398575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620003c1575f80fd5b815160206001600160401b0380831115620003e057620003e06200039d565b8260051b604051601f19603f830116810181811084821117156200040857620004086200039d565b604052938452602081870181019490810192508785111562000428575f80fd5b6020870191505b848210156200045357620004438262000381565b835291830191908301906200042f565b979650505050505050565b5f805f805f8060c0878903121562000474575f80fd5b6200047f8762000381565b95506200048f6020880162000381565b60408801519095506001600160401b0380821115620004ac575f80fd5b620004ba8a838b01620003b1565b9550620004ca60608a0162000381565b9450620004da60808a0162000381565b935060a0890151915080821115620004f0575f80fd5b50620004ff89828a01620003b1565b9150509295509295509295565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121562000531575f80fd5b815163ffffffff8116811462000545575f80fd5b9392505050565b5f6001600160401b038281166002600160401b031981016200057c57634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b61356580620005945f395ff3fe608060405260043610610242575f3560e01c8063724e78da11610131578063c358de0a116100ac578063cd88b9031161007c578063d2ae210411610062578063d2ae2104146107ae578063d547741f14610800578063e395eb5c1461081f575f80fd5b8063cd88b9031461077c578063cfc325701461079b575f80fd5b8063c358de0a146106ee578063c416aa511461070d578063c7b2370b1461073e578063c8f8dcd11461075d575f80fd5b806391d1485411610101578063a217fddf116100e7578063a217fddf14610690578063c015bb7d146106a3578063c2803b2c146106c2575f80fd5b806391d14854146105675780639e944965146105b6575f80fd5b8063724e78da146104f6578063741bef1a146105155780637cd44734146105415780638624ba0714610554575f80fd5b80633146646a116101c1578063475b6d9e116101915780635e280f11116101775780635e280f1114610467578063709eb664146104b8578063717e8a42146104d7575f80fd5b8063475b6d9e1461043d5780635c975abb14610450575f80fd5b80633146646a146103cd57806336568abe146103ec5780633927c0751461040b5780633d85ac331461041e575f80fd5b806316c38b3c1161021657806326e67a37116101fc57806326e67a37146103635780632de113761461038f5780632f2ff15d146103ae575f80fd5b806316c38b3c14610308578063248a9ca314610327575f80fd5b8062bf2e801461024657806301e336671461029957806301ffc9a7146102ba5780631095b6d7146102e9575b5f80fd5b348015610251575f80fd5b50600154610281907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b3480156102a4575f80fd5b506102b86102b336600461267b565b610868565b005b3480156102c5575f80fd5b506102d96102d43660046126b4565b6108a3565b6040519015158152602001610290565b3480156102f4575f80fd5b506102b861030336600461267b565b61093b565b348015610313575f80fd5b506102b86103223660046126f3565b610ac4565b348015610332575f80fd5b50610355610341366004612712565b5f9081526020819052604090206001015490565b604051908152602001610290565b34801561036e575f80fd5b5061038261037d36600461273c565b610ae8565b6040516102909190612755565b34801561039a575f80fd5b506102d96103a936600461279b565b610b6b565b3480156103b9575f80fd5b506102b86103c83660046127b4565b610c4c565b3480156103d8575f80fd5b506102b86103e7366004612823565b610c70565b3480156103f7575f80fd5b506102b86104063660046127b4565b610d33565b6102b86104193660046128c2565b610d65565b348015610429575f80fd5b506102b8610438366004612a3b565b610e53565b6102b861044b366004612b50565b611035565b34801561045b575f80fd5b5060015460ff166102d9565b348015610472575f80fd5b506006546104939073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610290565b3480156104c3575f80fd5b506103556104d2366004612bca565b611089565b3480156104e2575f80fd5b506103556104f1366004612bca565b6111e5565b348015610501575f80fd5b506102b861051036600461279b565b611365565b348015610520575f80fd5b506002546104939073ffffffffffffffffffffffffffffffffffffffff1681565b6102b861054f366004612c34565b611402565b6102b8610562366004612cf0565b6114e1565b348015610572575f80fd5b506102d96105813660046127b4565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156105c1575f80fd5b506106436105d036600461273c565b60056020525f90815260409020805460019091015467ffffffffffffffff8083169261ffff68010000000000000000820416926fffffffffffffffffffffffffffffffff6a0100000000000000000000909204821692918116917001000000000000000000000000000000009091041685565b6040805167ffffffffffffffff968716815261ffff90951660208601526fffffffffffffffffffffffffffffffff938416908501529116606083015291909116608082015260a001610290565b34801561069b575f80fd5b506103555f81565b3480156106ae575f80fd5b506103556106bd366004612d5e565b611616565b3480156106cd575f80fd5b506007546104939073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106f9575f80fd5b506102b8610708366004612dad565b6117a3565b348015610718575f80fd5b5060015461049390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b348015610749575f80fd5b506102b861075836600461279b565b611851565b348015610768575f80fd5b50610355610777366004612d5e565b6118f5565b348015610787575f80fd5b506102b8610796366004612dc6565b611a56565b6102b86107a9366004612e45565b611a9f565b3480156107b9575f80fd5b506001546107e7907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610290565b34801561080b575f80fd5b506102b861081a3660046127b4565b611b7d565b34801561082a575f80fd5b506006546108539074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610290565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561089281611ba1565b61089d848484611bae565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061093557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561096581611ba1565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff166109e2576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610a4f575f80fd5b505af1158015610a61573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b5f610ace81611ba1565b8115610ae057610adc611be3565b5050565b610adc611c62565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610b5f57602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b305790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610bbe57505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610c33575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610c4057506001919050565b505f919050565b919050565b5f82815260208190526040902060010154610c6681611ba1565b61089d8383611cb9565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610c9a81611ba1565b610ca2611d89565b6007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610cfc90879087908790600401612ec6565b5f604051808303815f87803b158015610d13575f80fd5b505af1158015610d25573d5f803e3d5ffd5b5050505061089d6001600455565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610d8f81611ba1565b610d97611d89565b610db788610da58686611dcc565b610daf8787611dee565b8a8a8a611e06565b506007546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f890610e1290879087908790600401612ec6565b5f604051808303815f87803b158015610e29575f80fd5b505af1158015610e3b573d5f803e3d5ffd5b50505050610e496001600455565b5050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610e7d81611ba1565b5f5b8251811015610ff9575f838281518110610e9b57610e9b612ee9565b6020908102919091018101516040805160a080820183528385015167ffffffffffffffff908116835260608086015161ffff9081168589019081526080808901516fffffffffffffffffffffffffffffffff908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff165f9081526005909a5296909820945185549851945188166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff9590921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090991690841617979097179290921695909517825551600191820180549351909516700100000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931693169290921717909155919091019050610e7f565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc53826040516110299190612f16565b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561105f81611ba1565b611067611d89565b611075878787878787611e06565b506110806001600455565b50505050505050565b5f8461109481610b6b565b6110ca576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110d2611f73565b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a1660208084018290528a831684860152606084018a905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f434ee01600000000000000000000000000000000000000000000000000000000815292936101009091049091169163434ee0169161119a918591908a908a90600401612fbc565b602060405180830381865afa1580156111b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d99190613079565b98975050505050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61121081611ba1565b8561121a81610b6b565b611250576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8b1660208084018290528b831684860152606084018b905260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660808601525f92835260059091529084902093517f566ef76200000000000000000000000000000000000000000000000000000000815292936101009091049091169163566ef76291611318918591908b908b90600401612fbc565b6020604051808303815f875af1158015611334573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113589190613079565b9998505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561138f81611ba1565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561142c81611ba1565b611434611d89565b6006546040517f91d20fa100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906391d20fa1908490349061149c908f908f908f908f908f908f908f908f90600401613090565b5f604051808303818589803b1580156114b3575f80fd5b5088f11580156114c5573d5f803e3d5ffd5b5050505050506114d56001600455565b50505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561150b81611ba1565b611513611d89565b6006545f9061155190602085019074010000000000000000000000000000000000000000900463ffffffff16611549828761279b565b898989611e06565b90505f61155e8234613128565b60065490915073ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08601358360208801611593818a61279b565b60808a01356115a560a08c018c61313b565b6115b260c08e018e61313b565b6040518a63ffffffff1660e01b81526004016115d497969594939291906131d6565b5f604051808303818589803b1580156115eb575f80fd5b5088f11580156115fd573d5f803e3d5ffd5b505050505050505061160f6001600455565b5050505050565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61164181611ba1565b8461164b81610b6b565b611681576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528881166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f65003784000000000000000000000000000000000000000000000000000000008152929361010090910490911691636500378491611758918591908b908b90600401613239565b6020604051808303815f875af1158015611774573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117989190613079565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756117cd81611ba1565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611029565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561187b81611ba1565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611029565b5f8361190081610b6b565b611936576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160608101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528781166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff168486015260065474010000000000000000000000000000000000000000900463ffffffff165f90815260059092529084902093517f337c7a9e00000000000000000000000000000000000000000000000000000000815292936101009091049091169163337c7a9e91611a0d918591908a908a90600401613239565b602060405180830381865afa158015611a28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4c9190613079565b9695505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a8081611ba1565b63ffffffff84165f90815260036020526040902061160f9084846125a0565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611ac981611ba1565b611ad1611d89565b60065473ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08401353460208601611b03818861279b565b6080880135611b1560a08a018a61313b565b611b2260c08c018c61313b565b6040518a63ffffffff1660e01b8152600401611b4497969594939291906131d6565b5f604051808303818589803b158015611b5b575f80fd5b5088f1158015611b6d573d5f803e3d5ffd5b505050505050610adc6001600455565b5f82815260208190526040902060010154611b9781611ba1565b61089d8383611fb2565b611bab8133612077565b50565b73ffffffffffffffffffffffffffffffffffffffff8316611bd857611bd38282612101565b505050565b611bd3838383612203565b611beb611f73565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611c6a612271565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611c38565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015611d1657505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15611d755760018054601590611d4e907501000000000000000000000000000000000000000000900467ffffffffffffffff166132e9565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836122ad565b5060019392505050565b600260045403611dc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600455565b5f611ddb6031602d848661330f565b611de491613336565b60e01c9392505050565b5f611dff611dfc84846123a6565b90565b9392505050565b5f808367ffffffffffffffff811115611e2157611e2161294f565b604051908082528060200260200182016040528015611e4a578160200160208202803683370190505b5090505f5b84811015611f26575f868683818110611e6a57611e6a612ee9565b905060400201803603810190611e80919061337e565b90505f815f015173ffffffffffffffffffffffffffffffffffffffff16826020015187906040515f60405180830381858888f193505050503d805f8114611ee2576040519150601f19603f3d011682016040523d82523d5f602084013e611ee7565b606091505b5050905080848481518110611efe57611efe612ee9565b911515602092830291909101820152820151611f1a90866133d3565b94505050600101611e4f565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c3468888888888886604051611f6096959493929190613422565b60405180910390a1509695505050505050565b60015460ff1615611fb0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561200e57505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b1561206d5760018054601590612046907501000000000000000000000000000000000000000000900467ffffffffffffffff166134b2565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b611d7f83836123be565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610adc576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661214e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146121a4576040519150601f19603f3d011682016040523d82523d5f602084013e6121a9565b606091505b5050905080611bd3576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018390526044016120f8565b73ffffffffffffffffffffffffffffffffffffffff8216612250576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bd373ffffffffffffffffffffffffffffffffffffffff84168383612477565b60015460ff16611fb0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561233d3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610935565b505f610935565b5f6123b560516031848661330f565b611dff916134f3565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561239f575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610935565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251611bd393879390925f9283929183919082885af180612520576040513d5f823e3d81fd5b50505f513d91508115612537578060011415612551565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561089d576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016120f8565b828054828255905f5260205f2090601f01602090048101928215612634579160200282015f5b8382111561260657833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026125c6565b80156126325782816101000a81549060ff02191690556001016020815f01049283019260010302612606565b505b50612640929150612644565b5090565b5b80821115612640575f8155600101612645565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f805f6060848603121561268d575f80fd5b61269684612658565b92506126a460208501612658565b9150604084013590509250925092565b5f602082840312156126c4575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611dff575f80fd5b5f60208284031215612703575f80fd5b81358015158114611dff575f80fd5b5f60208284031215612722575f80fd5b5035919050565b803563ffffffff81168114610c47575f80fd5b5f6020828403121561274c575f80fd5b611dff82612729565b602080825282518282018190525f9190848201906040850190845b8181101561278f57835160ff1683529284019291840191600101612770565b50909695505050505050565b5f602082840312156127ab575f80fd5b611dff82612658565b5f80604083850312156127c5575f80fd5b823591506127d560208401612658565b90509250929050565b5f8083601f8401126127ee575f80fd5b50813567ffffffffffffffff811115612805575f80fd5b60208301915083602082850101111561281c575f80fd5b9250929050565b5f805f60408486031215612835575f80fd5b833567ffffffffffffffff81111561284b575f80fd5b612857868287016127de565b909790965060209590950135949350505050565b5f6060828403121561287b575f80fd5b50919050565b5f8083601f840112612891575f80fd5b50813567ffffffffffffffff8111156128a8575f80fd5b6020830191508360208260061b850101111561281c575f80fd5b5f805f805f805f60e0888a0312156128d8575f80fd5b6128e2898961286b565b9650606088013567ffffffffffffffff808211156128fe575f80fd5b61290a8b838c01612881565b909850965060808a0135955060a08a0135915080821115612929575f80fd5b506129368a828b016127de565b989b979a5095989497959660c090950135949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160c0810167ffffffffffffffff8111828210171561299f5761299f61294f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156129ec576129ec61294f565b604052919050565b803567ffffffffffffffff81168114610c47575f80fd5b803561ffff81168114610c47575f80fd5b80356fffffffffffffffffffffffffffffffff81168114610c47575f80fd5b5f6020808385031215612a4c575f80fd5b823567ffffffffffffffff80821115612a63575f80fd5b818501915085601f830112612a76575f80fd5b813581811115612a8857612a8861294f565b612a96848260051b016129a5565b818152848101925060c0918202840185019188831115612ab4575f80fd5b938501935b82851015612b445780858a031215612acf575f80fd5b612ad761297c565b612ae086612729565b8152612aed8787016129f4565b878201526040612afe8188016129f4565b908201526060612b0f878201612a0b565b908201526080612b20878201612a1c565b9082015260a0612b31878201612a1c565b9082015284529384019392850192612ab9565b50979650505050505050565b5f805f805f8060e08789031215612b65575f80fd5b612b6f888861286b565b9550612b7d60608801612729565b9450612b8b60808801612658565b935060a087013567ffffffffffffffff811115612ba6575f80fd5b612bb289828a01612881565b979a969950949794969560c090950135949350505050565b5f805f805f60808688031215612bde575f80fd5b612be786612729565b9450612bf560208701612658565b935060408601359250606086013567ffffffffffffffff811115612c17575f80fd5b612c23888289016127de565b969995985093965092949392505050565b5f805f805f805f805f60e08a8c031215612c4c575f80fd5b612c558a612658565b9850612c6360208b01612658565b975060408a01359650612c7860608b01612a0b565b955060808a013567ffffffffffffffff80821115612c94575f80fd5b612ca08d838e016127de565b909750955060a08c0135915080821115612cb8575f80fd5b50612cc58c828d016127de565b9a9d999c50979a9699959894979660c00135949350505050565b5f610100828403121561287b575f80fd5b5f805f8060608587031215612d03575f80fd5b843567ffffffffffffffff80821115612d1a575f80fd5b612d2688838901612881565b9096509450602087013593506040870135915080821115612d45575f80fd5b50612d5287828801612cdf565b91505092959194509250565b5f805f60408486031215612d70575f80fd5b612d7984612658565b9250602084013567ffffffffffffffff811115612d94575f80fd5b612da0868287016127de565b9497909650939450505050565b5f60208284031215612dbd575f80fd5b611dff82612a0b565b5f805f60408486031215612dd8575f80fd5b612de184612729565b9250602084013567ffffffffffffffff80821115612dfd575f80fd5b818601915086601f830112612e10575f80fd5b813581811115612e1e575f80fd5b8760208260051b8501011115612e32575f80fd5b6020830194508093505050509250925092565b5f60208284031215612e55575f80fd5b813567ffffffffffffffff811115612e6b575f80fd5b612e7784828501612cdf565b949350505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081525f612ed9604083018587612e7f565b9050826020830152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f919060409081850190868401855b82811015612faf578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c09093019290850190600101612f32565b5091979650505050505050565b845173ffffffffffffffffffffffffffffffffffffffff908116825260208087015163ffffffff1690830152604080870151909116818301526060808701519083015260808087015161ffff90811682850152865467ffffffffffffffff80821660a08701529381901c90911660c085015260501c6fffffffffffffffffffffffffffffffff90811660e08501526001870154908116610100850152901c166101208201525f610160806101408401526117988184018587612e7f565b5f60208284031215613089575f80fd5b5051919050565b5f73ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525087604083015261ffff8716606083015260c060808301526130d960c083018688612e7f565b82810360a08401526130ec818587612e7f565b9b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610935576109356130fb565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261316e575f80fd5b83018035915067ffffffffffffffff821115613188575f80fd5b60200191503681900382131561281c575f80fd5b63ffffffff6131aa82612729565b1682526020810135602083015267ffffffffffffffff6131cc604083016129f4565b1660408301525050565b6131e0818961319c565b73ffffffffffffffffffffffffffffffffffffffff8716606082015285608082015260e060a08201525f61321860e083018688612e7f565b82810360c084015261322b818587612e7f565b9a9950505050505050505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff8088511684528060208901511660208501525061ffff60408801511660408401526132d56060840187805467ffffffffffffffff808216845261ffff8260401c1660208501526fffffffffffffffffffffffffffffffff808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b806101008401526117988184018587612e7f565b5f67ffffffffffffffff808316818103613305576133056130fb565b6001019392505050565b5f808585111561331d575f80fd5b83861115613329575f80fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156133765780818660040360031b1b83161692505b505092915050565b5f6040828403121561338e575f80fd5b6040516040810181811067ffffffffffffffff821117156133b1576133b161294f565b6040526133bd83612658565b8152602083013560208201528091505092915050565b80820180821115610935576109356130fb565b5f815180845260208085019450602084015f5b838110156134175781511515875295820195908201906001016133f9565b509495945050505050565b5f60e08201613431838a61319c565b63ffffffff8816606084015273ffffffffffffffffffffffffffffffffffffffff878116608085015260e060a085015290859052859061010084015f5b8781101561349f578261348085612658565b168252602084810135908301526040938401939091019060010161346e565b5084810360c08601526130ec81876133e6565b5f67ffffffffffffffff8216806134cb576134cb6130fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b80356020831015610935577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b169291505056fea2646970667358221220bf4067662d56dc81125eda238718adb88046662d26b0b352f03d651c8af9702b64736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b5038038062001b508339810160408190526200003391620000cf565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000080565b5063ffffffff1660a052670de0b6b3a7640000608052620000fb565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215620000e0575f80fd5b815163ffffffff81168114620000f4575f80fd5b9392505050565b60805160a051611a2c620001245f395f818161023a01526102ee01525f61083d0152611a2c5ff3fe608060405260043610610096575f3560e01c8063566ef76211610066578063715018a61161004c578063715018a6146101715780638da5cb5b14610185578063f2fde38b146101b8575f80fd5b8063566ef762146101335780636500378414610152575f80fd5b806301e33667146100a1578063337c7a9e146100c2578063434ee016146100f457806354fd4d5014610113575f80fd5b3661009d57005b5f80fd5b3480156100ac575f80fd5b506100c06100bb366004611549565b6101d7565b005b3480156100cd575f80fd5b506100e16100dc3660046115dd565b6101ef565b6040519081526020015b60405180910390f35b3480156100ff575f80fd5b506100e161010e366004611644565b610408565b34801561011e575f80fd5b506040805160018082526020820152016100eb565b34801561013e575f80fd5b506100e161014d366004611644565b61060a565b34801561015d575f80fd5b506100e161016c3660046115dd565b610620565b34801561017c575f80fd5b506100c061062d565b348015610190575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100eb565b3480156101c3575f80fd5b506100c06101d236600461168d565b610640565b6101df6106a3565b6101ea8383836106f5565b505050565b5f6101fd60208501856116ad565b67ffffffffffffffff165f0361026c576040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024015b60405180910390fd5b5f80806102a960018261028260208b018b6116ad565b61029260a08c0160808d016116ad565b6102a260808d0160608e016116f1565b8b8b610725565b919450925090505f8080806102c160208d018d61168d565b6040517f88a4124c00000000000000000000000000000000000000000000000000000000815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152871660248201526044810188905273ffffffffffffffffffffffffffffffffffffffff91909116906388a4124c90606401608060405180830381865afa158015610360573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610384919061170c565b929650909450925090506103ce846103a260408e0160208f0161175e565b8e60400160208101906103b5919061175e565b8e60400160208101906103c891906116f1565b856107b5565b97506103ee8784848f60400160208101906103e9919061175e565b6108ab565b6103f890896117ac565b9c9b505050505050505050505050565b5f61041660208501856116ad565b67ffffffffffffffff165f036104715761043660408601602087016117c5565b6040517fc3baa0b700000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610263565b5f806104c38161048f61048a60408b0160208c016117c5565b505f90565b61049c60208a018a6116ad565b6104ac60a08b0160808c016116ad565b6104bc60808c0160608d016116f1565b8a8a610725565b5090925090505f8080806104da60208c018c61168d565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61050560408e0160208f016117c5565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff91909116600482015260608e0135602482015260448101889052606401608060405180830381865afa15801561056e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610592919061170c565b929650909450925090506105d6846105b060408d0160208e0161175e565b8d60800160208101906105c3919061175e565b8d60400160208101906103c891906116f1565b96506105f18684848e60800160208101906103e9919061175e565b6105fb90886117ac565b9b9a5050505050505050505050565b5f61061785858585610408565b95945050505050565b5f610617858585856101ef565b6106356106a3565b61063e5f610911565b565b6106486106a3565b73ffffffffffffffffffffffffffffffffffffffff8116610697576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610263565b6106a081610911565b50565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461063e576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610263565b73ffffffffffffffffffffffffffffffffffffffff831661071a576101ea8282610985565b6101ea838383610a87565b5f805f8061073686868d8d8b610af5565b805160608201516080830151919650935090915061075e9067ffffffffffffffff8a166117e8565b60208201516107779067ffffffffffffffff8c166117ac565b61078191906117ac565b92508060400151156107a757606461079a8460666117e8565b6107a491906117ff565b92505b509750975097945050505050565b5f8061ffff8616156107c757856107c9565b845b90505f6127106107dd61ffff84168a6117e8565b6107e791906117ff565b90506fffffffffffffffffffffffffffffffff8416158061081857506fffffffffffffffffffffffffffffffff8516155b156108265791506106179050565b5f88856fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000886fffffffffffffffffffffffffffffffff1661087991906117e8565b61088391906117ff565b61088d91906117ac565b905081811161089c578161089e565b805b9998505050505050505050565b5f8415610909576127108261ffff16846fffffffffffffffffffffffffffffffff16866fffffffffffffffffffffffffffffffff16886108eb91906117e8565b6108f591906117ff565b6108ff91906117e8565b61061791906117ff565b949350505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166109d2576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610a28576040519150601f19603f3d011682016040523d82523d5f602084013e610a2d565b606091505b50509050806101ea576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610263565b73ffffffffffffffffffffffffffffffffffffffff8216610ad4576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101ea73ffffffffffffffffffffffffffffffffffffffff8416838361110f565b610b2a6040518060a001604052805f81526020015f81526020015f151581526020015f63ffffffff1681526020015f81525090565b5f859003610b63576040517e575ea100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80805b87831015610fbc575f368180610b7e8d8d8961119c565b9950919550935091508690507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff851601610ca6578a15610bf1576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610bfd85856111f1565b915091508b8015610c1f57505f816fffffffffffffffffffffffffffffffff16115b15610c5b576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff87166004820152602401610263565b806fffffffffffffffffffffffffffffffff168a5f01818151610c7e91906117ac565b905250610c9d6fffffffffffffffffffffffffffffffff8316896117ac565b97505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff851601610d48578a15610d0d576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f610d18848461126c565b509050806fffffffffffffffffffffffffffffffff16895f01818151610d3e91906117ac565b905250610fb39050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff851601610e75578915610daf576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f80610dbb85856112c1565b9250925050816fffffffffffffffffffffffffffffffff165f03610e0b576040517fa169d0e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806fffffffffffffffffffffffffffffffff168a5f01818151610e2e91906117ac565b90525060208a0180516fffffffffffffffffffffffffffffffff84169190610e579083906117ac565b90525060808a01805190610e6a82611837565b815250505050610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60ff851601610eab5760016040890152610fb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60ff851601610f7c578a610f11576040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b5f805f610f1e868661134b565b925092509250806fffffffffffffffffffffffffffffffff168b5f01818151610f4791906117ac565b905250610f666fffffffffffffffffffffffffffffffff84168a6117ac565b9850610f72828961186e565b9750505050610fb3565b6040517f052e551500000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610263565b50505050610b67565b828814610ff8576040517f990776ea00000000000000000000000000000000000000000000000000000000815260048101849052602401610263565b83516fffffffffffffffffffffffffffffffff861610156110625783516040517e84ce0200000000000000000000000000000000000000000000000000000000815260048101919091526fffffffffffffffffffffffffffffffff86166024820152604401610263565b815f0361109b576040517fe5eb8f3000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8680156110ac575063ffffffff8116155b156110e3576040517f6cc33f0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81846020018181516110f591906117ac565b90525063ffffffff16606084015250909695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526101ea9084906113cc565b5f368160018401816111af888884611471565b6002929092019190506111c3888884611497565b94506001820161ffff821683016111dc81838b8d611892565b979b909a50969850505061ffff160193505050565b5f8060108314801590611205575060208314155b1561123c576040517f4796aee100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124784845f6114bb565b915060208314611257575f611263565b611263848460106114bb565b90509250929050565b5f80603083146112a8576040517fc3a1858e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112b384845f6114bb565b9150611263848460106114e1565b5f8080601284148015906112d6575060228414155b1561130d576040517f8b4aa70b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61131885855f611471565b9250611326858560026114bb565b915060228414611336575f611342565b611342858560126114bb565b90509250925092565b5f808060148414801590611360575060248414155b15611397576040517fdeb7fe4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113a285855f6114bb565b92506113b0858560106114fb565b9150602484146113c0575f611342565b611342858560146114bb565b5f8060205f8451602086015f885af1806113eb576040513d5f823e3d81fd5b50505f513d9150811561140257806001141561141c565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561146b576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610263565b50505050565b5f6002820161148281848688611892565b61148b916118b9565b60f01c95945050505050565b5f8383838181106114aa576114aa611901565b919091013560f81c95945050505050565b5f601082016114cc81848688611892565b6114d59161192e565b60801c95945050505050565b5f602082016114f281848688611892565b61061791611974565b5f6004820161150c81848688611892565b611515916119b0565b60e01c95945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611544575f80fd5b919050565b5f805f6060848603121561155b575f80fd5b61156484611521565b925061157260208501611521565b9150604084013590509250925092565b5f60a08284031215611592575f80fd5b50919050565b5f8083601f8401126115a8575f80fd5b50813567ffffffffffffffff8111156115bf575f80fd5b6020830191508360208285010111156115d6575f80fd5b9250929050565b5f805f808486036101208112156115f2575f80fd5b60608112156115ff575f80fd5b508493506116108660608701611582565b925061010085013567ffffffffffffffff81111561162c575f80fd5b61163887828801611598565b95989497509550505050565b5f805f806101608587031215611658575f80fd5b6116628686611582565b93506116718660a08701611582565b925061014085013567ffffffffffffffff81111561162c575f80fd5b5f6020828403121561169d575f80fd5b6116a682611521565b9392505050565b5f602082840312156116bd575f80fd5b813567ffffffffffffffff811681146116a6575f80fd5b6fffffffffffffffffffffffffffffffff811681146106a0575f80fd5b5f60208284031215611701575f80fd5b81356116a6816116d4565b5f805f806080858703121561171f575f80fd5b845193506020850151611731816116d4565b6040860151909350611742816116d4565b6060860151909250611753816116d4565b939692955090935050565b5f6020828403121561176e575f80fd5b813561ffff811681146116a6575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156117bf576117bf61177f565b92915050565b5f602082840312156117d5575f80fd5b813563ffffffff811681146116a6575f80fd5b80820281158282048414176117bf576117bf61177f565b5f82611832577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118675761186761177f565b5060010190565b63ffffffff81811683821601908082111561188b5761188b61177f565b5092915050565b5f80858511156118a0575f80fd5b838611156118ac575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156118f95780818660020360031b1b83161692505b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156118f95760109490940360031b84901b1690921692915050565b803560208310156117bf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156118f95760049490940360031b84901b169092169291505056fea2646970667358221220ca9d45c801b5ccbb302dcb12078bab5268980f6f82de99fc1d137bac6c0848e664736f6c6343000816003360c060405234801562000010575f80fd5b5060405162004aae38038062004aae8339810160408190526200003391620004ca565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b03861617905582828686612ee05f865f5b8551811015620000d357620000c97f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000b557620000b5620005a5565b60200260200101516200027860201b60201c565b5060010162000071565b505f5b815181101562000124576200011a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000b557620000b5620005a5565b50600101620000d6565b505050505050806001600160401b03165f036200015457604051635f86e17760e01b815260040160405180910390fd5b806001600160401b0316825110156200019a5781516040516378e2c15760e11b81526001600160401b039182166004820152908216602482015260440160405180910390fd5b5f805b835181101562000229575f848281518110620001bd57620001bd620005a5565b60200260200101519050826001600160a01b0316816001600160a01b031611620001fa576040516305fa937f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600460205260409020805460ff19166001908117909155909250016200019d565b50509051600580546001600160401b0393841668010000000000000000026001600160801b0319909116939092169290921717905550505063ffffffff92831660805250501660a052620005f3565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015620002c957505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620003165760018054601590620002f190600160a81b90046001600160401b0316620005b9565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200032283836200032e565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff16620003d1575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003883390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000328565b505f62000328565b805163ffffffff81168114620003ed575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b0381168114620003ed575f80fd5b5f82601f8301126200042d575f80fd5b815160206001600160401b03808311156200044c576200044c620003f2565b8260051b604051601f19603f83011681018181108482111715620004745762000474620003f2565b604052938452602081870181019490810192508785111562000494575f80fd5b6020870191505b84821015620004bf57620004af8262000406565b835291830191908301906200049b565b979650505050505050565b5f805f805f805f60e0888a031215620004e1575f80fd5b620004ec88620003d9565b9650620004fc60208901620003d9565b60408901519096506001600160401b038082111562000519575f80fd5b620005278b838c016200041d565b96506200053760608b0162000406565b955060808a01519150808211156200054d575f80fd5b6200055b8b838c016200041d565b945060a08a01519150808216821462000572575f80fd5b60c08a01519193508082111562000587575f80fd5b50620005968a828b016200041d565b91505092959891949750929550565b634e487b7160e01b5f52603260045260245ffd5b5f6001600160401b038281166002600160401b03198101620005e957634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b60805160a05161447d620006315f395f818161090e0152818161253401526126c301525f818161084f0152818161173901526122a4015261447d5ff3fe6080604052600436106102c0575f3560e01c806395d376d711610170578063cd88b903116100d1578063e395eb5c11610087578063f42ed2ed11610062578063f42ed2ed1461096e578063fd62e75014610981578063fdb9b0f1146109a1575f80fd5b8063e395eb5c146108fd578063f010cb2314610930578063f3b4ebd01461094f575f80fd5b8063d2ae2104116100b7578063d2ae210414610886578063d547741f146108bf578063dafe0ccc146108de575f80fd5b8063cd88b9031461081f578063cf34c7681461083e575f80fd5b8063c358de0a11610126578063c5e193cd1161010c578063c5e193cd146107b4578063c7a823e0146107d3578063c7b2370b14610800575f80fd5b8063c358de0a14610764578063c416aa5114610783575f80fd5b8063a217fddf11610156578063a217fddf14610704578063aef18bf714610717578063b143044b14610745575f80fd5b806395d376d71461064e5780639e94496514610661575f80fd5b806330bb3aac116102255780635c975abb116101db578063741bef1a116101b6578063741bef1a1461058f5780638585c945146105e057806391d14854146105ff575f80fd5b80635c975abb1461052b578063724e78da14610542578063736c0d5b14610561575f80fd5b806336568abe1161020b57806336568abe146104ce57806352d3b871146104ed5780635553fb8e1461050c575f80fd5b806330bb3aac1461049057806331cb6105146104af575f80fd5b80631703a0181161027a57806326e67a371161026057806326e67a37146104265780632de11376146104525780632f2ff15d14610471575f80fd5b80631703a018146103a5578063248a9ca3146103ea575f80fd5b806301ffc9a7116102aa57806301ffc9a7146103385780631095b6d71461036757806316c38b3c14610386575f80fd5b8062bf2e80146102c457806301e3366714610317575b5f80fd5b3480156102cf575f80fd5b506001546102ff907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b348015610322575f80fd5b50610336610331366004613597565b6109c0565b005b348015610343575f80fd5b506103576103523660046135d5565b6109fb565b604051901515815260200161030e565b348015610372575f80fd5b50610336610381366004613597565b610a93565b348015610391575f80fd5b506103366103a036600461362a565b610c1d565b3480156103b0575f80fd5b506005546103d19068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161030e565b3480156103f5575f80fd5b50610418610404366004613643565b5f9081526020819052604090206001015490565b60405190815260200161030e565b348015610431575f80fd5b5061044561044036600461366d565b610c41565b60405161030e9190613686565b34801561045d575f80fd5b5061035761046c3660046136cc565b610cc4565b34801561047c575f80fd5b5061033661048b3660046136e7565b610da5565b34801561049b575f80fd5b506104186104aa366004613771565b610ef4565b3480156104ba575f80fd5b506103366104c93660046137e4565b611067565b3480156104d9575f80fd5b506103366104e83660046136e7565b6110aa565b3480156104f8575f80fd5b50610336610507366004613817565b6110dc565b348015610517575f80fd5b50610418610526366004613897565b6112a5565b348015610536575f80fd5b5060015460ff16610357565b34801561054d575f80fd5b5061033661055c3660046136cc565b611418565b34801561056c575f80fd5b5061035761057b3660046136cc565b60046020525f908152604090205460ff1681565b34801561059a575f80fd5b506002546105bb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030e565b3480156105eb575f80fd5b506103366105fa3660046138ea565b6114bd565b34801561060a575f80fd5b506103576106193660046136e7565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61041861065c366004613919565b611502565b34801561066c575f80fd5b506106c961067b36600461366d565b60066020525f908152604090205467ffffffffffffffff81169068010000000000000000810461ffff16906a010000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff909416845261ffff90921660208401526fffffffffffffffffffffffffffffffff169082015260600161030e565b34801561070f575f80fd5b506104185f81565b348015610722575f80fd5b50610357610731366004613643565b60076020525f908152604090205460ff1681565b348015610750575f80fd5b5061033661075f3660046139be565b6116d7565b34801561076f575f80fd5b5061033661077e3660046139fd565b6119db565b34801561078e575f80fd5b506001546105bb90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156107bf575f80fd5b506104186107ce366004613897565b611a89565b3480156107de575f80fd5b506107f26107ed366004613a16565b611c62565b60405161030e929190613a7e565b34801561080b575f80fd5b5061033661081a3660046136cc565b611e65565b34801561082a575f80fd5b50610336610839366004613ac9565b611f09565b348015610849575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161030e565b348015610891575f80fd5b506001546103d1907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b3480156108ca575f80fd5b506103366108d93660046136e7565b611f59565b3480156108e9575f80fd5b506103366108f8366004613597565b61206e565b348015610908575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b34801561093b575f80fd5b5061041861094a366004613b0b565b61219e565b34801561095a575f80fd5b50610336610969366004613b71565b6121d9565b61041861097c366004613bab565b61244a565b34801561098c575f80fd5b506005546103d19067ffffffffffffffff1681565b3480156109ac575f80fd5b506104186109bb366004613bab565b612603565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109ea81612790565b6109f584848461279a565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610a8d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610abd81612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16610b3a576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610ba7575f80fd5b505af1158015610bb9573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b5f610c2781612790565b8115610c3957610c356127cf565b5050565b610c3561284e565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cb857602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610c895790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610d1757505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610d8c575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610d9957506001919050565b505f919050565b919050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480610df357507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610e1d57507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b15610e6057303314610e5b576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eea565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb057610e5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6040517f94fdc372000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b6109f583836128a5565b5f83610eff81610cc4565b610f35576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a16602080840182905267ffffffffffffffff808c16858701528a8416606086015260055468010000000000000000900416608085015260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660a08601525f92835260069091529084902093517f7bfa20a9000000000000000000000000000000000000000000000000000000008152929361010090910490911691637bfa20a99161101c918591908a908a90600401613c97565b602060405180830381865afa158015611037573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105b9190613d63565b98975050505050505050565b3033146110a0576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c358282612975565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561110681612790565b5f5b82811015611266573684848381811061112357611123613d7a565b9050608002019050604051806060016040528082602001602081019061114991906138ea565b67ffffffffffffffff16815260200161116860608401604085016139fd565b61ffff1681526020016111816080840160608501613dc6565b6fffffffffffffffffffffffffffffffff16905260065f6111a5602085018561366d565b63ffffffff16815260208082019290925260409081015f20835181549385015194909201516fffffffffffffffffffffffffffffffff166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff61ffff90951668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941667ffffffffffffffff90931692909217929092179290921691909117905550600101611108565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051611298929190613ddf565b60405180910390a1505050565b5f816112b081610cc4565b6112e6576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808a16602080850182905267ffffffffffffffff808b168688015289851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517f7bfa20a9000000000000000000000000000000000000000000000000000000008152939461010090920490921692637bfa20a9926113ce928692600401613edd565b602060405180830381865afa1580156113e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140d9190613d63565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561144281612790565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146114f6576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ff81612b73565b50565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61152d81612790565b61153d60a08601608087016136cc565b61154681610cc4565b61157c576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810190915260025473ffffffffffffffffffffffffffffffffffffffff1681525f906020808201906115b6908a018a61366d565b63ffffffff1681526020016115d160808a0160608b016138ea565b67ffffffffffffffff1681526020016115f060a08a0160808b016136cc565b73ffffffffffffffffffffffffffffffffffffffff908116825260055468010000000000000000900467ffffffffffffffff166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff16604090940193909352929350610100909104169063df2b057e9083906006905f90611681908d018d61366d565b63ffffffff1663ffffffff1681526020019081526020015f2089896040518563ffffffff1660e01b81526004016116bb9493929190613c97565b6020604051808303815f875af11580156113e9573d5f803e3d5ffd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561170181612790565b5f5b828110156109f5573684848381811061171e5761171e613d7a565b90506020028101906117309190613fb2565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611766602083018361366d565b63ffffffff161461177757506119d3565b4281606001351161178857506119d3565b5f6117c0611799602084018461366d565b6117a960408501602086016136cc565b6117b66040860186613fee565b866060013561219e565b90505f6117d4826107ed6080860186613fee565b50905080611817576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a15050506119d3565b5f6118366118286040860186613fee565b6118319161404f565b612c8a565b905080156118cd575f8381526007602052604090205460ff1615611896577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab9784846040516118859291906140f7565b60405180910390a1505050506119d3565b5f83815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b5f806118df60408701602088016136cc565b73ffffffffffffffffffffffffffffffffffffffff166119026040880188613fee565b6040516119109291906141bc565b5f604051808303815f865af19150503d805f8114611949576040519150601f19603f3d011682016040523d82523d5f602084013e61194e565b606091505b5091509150816119cc578215611992575f85815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516119c39291906141cb565b60405180910390a15b5050505050505b600101611703565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a0581612790565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d906020016114b1565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de611ab481612790565b82611abe81610cc4565b611af4576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808b16602080850182905267ffffffffffffffff808c16868801528a851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517fdf2b057e00000000000000000000000000000000000000000000000000000000815293946101009092049092169263df2b057e92611bdc928692600401613edd565b6020604051808303815f875af1158015611bf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c1c9190613d63565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef84604051611c4f91815260200190565b60405180910390a1505050949350505050565b6005545f908190611c8a9068010000000000000000900467ffffffffffffffff166041614210565b8314611c9b57505f90506001611e5d565b5f611cf2866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290525f90605c01604051602081830303815290604052805190602001209050919050565b90505f805b60055468010000000000000000900467ffffffffffffffff16811015611e5257365f8888611d26856041614210565b90611d32866001614227565b611d3d906041614210565b92611d4a9392919061423a565b915091505f80611d8f8785858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612d7292505050565b5090925090505f816003811115611da857611da8613a51565b14611dc0575f60019850985050505050505050611e5d565b8573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611611e06575f60029850985050505050505050611e5d565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205460ff16611e45575f60039850985050505050505050611e5d565b5093505050600101611cf7565b5060015f9350935050505b935093915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611e8f81612790565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e0906020016114b1565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611f3381612790565b63ffffffff84165f908152600360205260409020611f529084846134be565b5050505050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480611fa757507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80611fd157507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b156120145730331461200f576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612064565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb05761200f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6109f58383612dbb565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561209881612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16612115576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f07b18bde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906307b18bde906044015f604051808303815f87803b158015612182575f80fd5b505af1158015612194573d5f803e3d5ffd5b5050505050505050565b5f85858386866040516020016121b8959493929190614261565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511612216576040517f0bbaf26300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3061222760408301602084016136cc565b73ffffffffffffffffffffffffffffffffffffffff161461229d5761225260408201602083016136cc565b6040517f1ce0bfcd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610ee1565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166122d1602083018361366d565b63ffffffff1614612324576122e9602082018261366d565b6040517f2697e1c200000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610ee1565b5f612335611799602084018461366d565b90505f612349826107ed6080860186613fee565b50905080612383576040517f15ecadee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526007602052604090205460ff16156123ce576040517f9d6a45a600000000000000000000000000000000000000000000000000000000815260048101839052602401610ee1565b5f828152600760205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556109f5907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217759061243890860186613fee565b81019061244591906136cc565b6128a5565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61247581612790565b8861247f81610cc4565b6124b5576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528c811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fbbc5a33b00000000000000000000000000000000000000000000000000000000815292936101009091049091169163bbc5a33b916125b4918591908d908d908d908d906004016142d2565b6020604051808303815f875af11580156125d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f49190613d63565b9b9a5050505050505050505050565b5f8761260e81610cc4565b612644576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528b811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fd358b30000000000000000000000000000000000000000000000000000000000815292936101009091049091169163d358b30091612743918591908c908c908c908c906004016142d2565b602060405180830381865afa15801561275e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127829190613d63565b9a9950505050505050505050565b6114ff8133612e80565b73ffffffffffffffffffffffffffffffffffffffff83166127c4576127bf8282612f05565b505050565b6127bf838383613007565b6127d7613075565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6128566130b4565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612824565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561290257505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15612961576001805460159061293a907501000000000000000000000000000000000000000000900467ffffffffffffffff16614397565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836130f0565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205481151560ff9091161515036129fb576040517f58c8d2a000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201528115156024820152604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260046020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001683151517905581612a6c57600554612a679060019067ffffffffffffffff166143bd565b612a84565b600554612a849067ffffffffffffffff1660016143e5565b60055490915067ffffffffffffffff680100000000000000009091048116908216811115612af2576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808416600483015282166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff84161790556040805173ffffffffffffffffffffffffffffffffffffffff8616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610c0f565b8067ffffffffffffffff165f03612bb6576040517f5f86e17700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff908116908216811015612c15576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808316600483015283166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a23249906020016114b1565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0223536e0000000000000000000000000000000000000000000000000000000014801590612d1f57507fffffffff0000000000000000000000000000000000000000000000000000000082167fab750e750000000000000000000000000000000000000000000000000000000014155b8015610a8d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f704316e500000000000000000000000000000000000000000000000000000000141592915050565b5f805f8351604103612da9576020840151604085015160608601515f1a612d9b888285856131e9565b955095509550505050612db4565b505081515f91506002905b9250925092565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015612e1757505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b15612e765760018054601590612e4f907501000000000000000000000000000000000000000000900467ffffffffffffffff16614406565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836132dc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c35576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216612f52576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612fa8576040519150601f19603f3d011682016040523d82523d5f602084013e612fad565b606091505b50509050806127bf576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216613054576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127bf73ffffffffffffffffffffffffffffffffffffffff84168383613395565b60015460ff16156130b2576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60015460ff166130b2576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556131803390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610a8d565b505f610a8d565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561322257505f915060039050826132d2565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613273573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166132c957505f9250600191508290506132d2565b92505f91508190505b9450945094915050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610a8d565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017815282516127bf93879390925f9283929183919082885af18061343e576040513d5f823e3d81fd5b50505f513d9150811561345557806001141561346f565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ee1565b828054828255905f5260205f2090601f01602090048101928215613552579160200282015f5b8382111561352457833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026134e4565b80156135505782816101000a81549060ff02191690556001016020815f01049283019260010302613524565b505b5061355e929150613562565b5090565b5b8082111561355e575f8155600101613563565b73ffffffffffffffffffffffffffffffffffffffff811681146114ff575f80fd5b5f805f606084860312156135a9575f80fd5b83356135b481613576565b925060208401356135c481613576565b929592945050506040919091013590565b5f602082840312156135e5575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114613614575f80fd5b9392505050565b80358015158114610da0575f80fd5b5f6020828403121561363a575f80fd5b6136148261361b565b5f60208284031215613653575f80fd5b5035919050565b803563ffffffff81168114610da0575f80fd5b5f6020828403121561367d575f80fd5b6136148261365a565b602080825282518282018190525f9190848201906040850190845b818110156136c057835160ff16835292840192918401916001016136a1565b50909695505050505050565b5f602082840312156136dc575f80fd5b813561361481613576565b5f80604083850312156136f8575f80fd5b82359150602083013561370a81613576565b809150509250929050565b803567ffffffffffffffff81168114610da0575f80fd5b5f8083601f84011261373c575f80fd5b50813567ffffffffffffffff811115613753575f80fd5b60208301915083602082850101111561376a575f80fd5b9250929050565b5f805f805f60808688031215613785575f80fd5b61378e8661365a565b945061379c60208701613715565b935060408601356137ac81613576565b9250606086013567ffffffffffffffff8111156137c7575f80fd5b6137d38882890161372c565b969995985093965092949392505050565b5f80604083850312156137f5575f80fd5b823561380081613576565b915061380e6020840161361b565b90509250929050565b5f8060208385031215613828575f80fd5b823567ffffffffffffffff8082111561383f575f80fd5b818501915085601f830112613852575f80fd5b813581811115613860575f80fd5b8660208260071b8501011115613874575f80fd5b60209290920196919550909350505050565b803561ffff81168114610da0575f80fd5b5f805f80608085870312156138aa575f80fd5b6138b385613886565b93506138c160208601613886565b92506138cf60408601613715565b915060608501356138df81613576565b939692955090935050565b5f602082840312156138fa575f80fd5b61361482613715565b5f60a08284031215613913575f80fd5b50919050565b5f805f6040848603121561392b575f80fd5b833567ffffffffffffffff80821115613942575f80fd5b61394e87838801613903565b94506020860135915080821115613963575f80fd5b506139708682870161372c565b9497909650939450505050565b5f8083601f84011261398d575f80fd5b50813567ffffffffffffffff8111156139a4575f80fd5b6020830191508360208260051b850101111561376a575f80fd5b5f80602083850312156139cf575f80fd5b823567ffffffffffffffff8111156139e5575f80fd5b6139f18582860161397d565b90969095509350505050565b5f60208284031215613a0d575f80fd5b61361482613886565b5f805f60408486031215613a28575f80fd5b83359250602084013567ffffffffffffffff811115613a45575f80fd5b6139708682870161372c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b82151581526040810160048310613abc577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8260208301529392505050565b5f805f60408486031215613adb575f80fd5b613ae48461365a565b9250602084013567ffffffffffffffff811115613aff575f80fd5b6139708682870161397d565b5f805f805f60808688031215613b1f575f80fd5b613b288661365a565b94506020860135613b3881613576565b9350604086013567ffffffffffffffff811115613b53575f80fd5b613b5f8882890161372c565b96999598509660600135949350505050565b5f60208284031215613b81575f80fd5b813567ffffffffffffffff811115613b97575f80fd5b613ba384828501613903565b949350505050565b5f805f805f805f6080888a031215613bc1575f80fd5b8735613bcc81613576565b9650602088013567ffffffffffffffff80821115613be8575f80fd5b613bf48b838c0161372c565b909850965060408a0135915080821115613c0c575f80fd5b613c188b838c0161372c565b909650945060608a0135915080821115613c30575f80fd5b50613c3d8a828b0161372c565b989b979a50959850939692959293505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f610140613d0e838873ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613d4f60c08401875467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8061012084015261140d8184018587613c50565b5f60208284031215613d73575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80356fffffffffffffffffffffffffffffffff81168114610da0575f80fd5b5f60208284031215613dd6575f80fd5b61361482613da7565b60208082528181018390525f90604080840186845b87811015613e6f5763ffffffff613e0a8361365a565b16835267ffffffffffffffff613e21868401613715565b168584015261ffff613e34858401613886565b168484015260606fffffffffffffffffffffffffffffffff613e57828501613da7565b16908401526080928301929190910190600101613df4565b5090979650505050505050565b5f81518084525f5b81811015613ea057602081850181015186830182015201613e84565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f610140613f54838773ffffffffffffffffffffffffffffffffffffffff80825116835263ffffffff6020830151166020840152604082015167ffffffffffffffff808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b613f9560c08401865467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b80610120840152613fa881840185613e7c565b9695505050505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112613fe4575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614021575f80fd5b83018035915067ffffffffffffffff82111561403b575f80fd5b60200191503681900382131561376a575f80fd5b7fffffffff00000000000000000000000000000000000000000000000000000000813581811691600485101561408f5780818660040360031b1b83161692505b505092915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126140ca575f80fd5b830160208101925035905067ffffffffffffffff8111156140e9575f80fd5b80360382131561376a575f80fd5b6040815263ffffffff6141098461365a565b1660408201525f602084013561411e81613576565b73ffffffffffffffffffffffffffffffffffffffff1660608301526141466040850185614097565b60a0608085015261415b60e085018284613c50565b915050606085013560a08401526141756080860186614097565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08584030160c08601526141aa838284613c50565b93505050508260208301529392505050565b818382375f9101908152919050565b828152604060208201525f613ba36040830184613e7c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610a8d57610a8d6141e3565b80820180821115610a8d57610a8d6141e3565b5f8085851115614248575f80fd5b83861115614254575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008660e01b1681527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008560601b166004820152836018820152818360388301375f9101603801908152949350505050565b5f61012073ffffffffffffffffffffffffffffffffffffffff808a511684528060208b01511660208501525067ffffffffffffffff60408a015116604084015261ffff60608a015116606084015261436160808401895467ffffffffffffffff81168252604081811c61ffff16602084015260509190911c6fffffffffffffffffffffffffffffffff16910152565b8060e08401526143748184018789613c50565b905082810361010084015261438a818587613c50565b9998505050505050505050565b5f67ffffffffffffffff8083168181036143b3576143b36141e3565b6001019392505050565b67ffffffffffffffff8281168282160390808211156143de576143de6141e3565b5092915050565b67ffffffffffffffff8181168382160190808211156143de576143de6141e3565b5f67ffffffffffffffff82168061441f5761441f6141e3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019291505056fea26469706673582212208293bcc557e204de553c5250d4aeaa3a84335fc59a6c7b5a242fbc34745baa1464736f6c6343000816003360c060405234801562000010575f80fd5b5060405162002470380380620024708339810160408190526200003391620000c8565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000648162000079565b5063ffffffff90911660a052608052620000fe565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8060408385031215620000da575f80fd5b825163ffffffff81168114620000ee575f80fd5b6020939093015192949293505050565b60805160a0516123426200012e5f395f81816107ac015261082601525f81816109120152610cb901526123425ff3fe6080604052600436106100e7575f3560e01c80638da5cb5b11610087578063de0a93c311610057578063de0a93c314610322578063df2b057e14610396578063f2fde38b146103a9578063f5ff608f146103c8575f80fd5b80638da5cb5b1461029e5780639ac23d28146102d1578063bbc5a33b146102f0578063d358b30014610303575f80fd5b806339f26dfc116100c257806339f26dfc1461022c57806354fd4d501461024b578063715018a61461026b5780637bfa20a91461027f575f80fd5b806301e33667146100f257806310b65f76146101135780632565c24514610157575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5061011161010c366004611a78565b6103e7565b005b34801561011e575f80fd5b5061014461012d366004611ac2565b63ffffffff165f9081526001602052604090205490565b6040519081526020015b60405180910390f35b348015610162575f80fd5b506101ec610171366004611ac2565b60036020525f908152604090205463ffffffff8082169167ffffffffffffffff64010000000082048116926c0100000000000000000000000083049091169174010000000000000000000000000000000000000000810482169178010000000000000000000000000000000000000000000000009091041685565b6040805163ffffffff968716815267ffffffffffffffff95861660208201529390941693830193909352831660608201529116608082015260a00161014e565b348015610237575f80fd5b50610111610246366004611b13565b6103ff565b348015610256575f80fd5b5060408051600180825260208201520161014e565b348015610276575f80fd5b506101116104af565b34801561028a575f80fd5b50610144610299366004611bae565b6104c2565b3480156102a9575f80fd5b505f5460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b3480156102dc575f80fd5b506101116102eb366004611c15565b61068a565b6101446102fe366004611cd2565b610747565b34801561030e575f80fd5b5061014461031d366004611cd2565b610761565b34801561032d575f80fd5b50600254604080516effffffffffffffffffffffffffffff80841682526f0100000000000000000000000000000084041660208201527e0100000000000000000000000000000000000000000000000000000000000090920461ffff169082015260600161014e565b6101446103a4366004611bae565b61099c565b3480156103b4575f80fd5b506101116103c3366004611d67565b6109b2565b3480156103d3575f80fd5b506101116103e2366004611d80565b610a15565b6103ef610a8e565b6103fa838383610ae0565b505050565b610407610a8e565b6002805461ffff9092167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6effffffffffffffffffffffffffffff9485166f01000000000000000000000000000000027fffff00000000000000000000000000000000000000000000000000000000000090941694909516939093179190911792909216179055565b6104b7610a8e565b6104c05f610b10565b565b5f6104d06020850185611e04565b67ffffffffffffffff165f03610530576104f06040860160208701611ac2565b6040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff90911660048201526024015b60405180910390fd5b61053a8383610b84565b505f61055e61054f60a0880160808901611e04565b67ffffffffffffffff16610c25565b90505f8061056f6020890189611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c61059a60408b0160208c01611ac2565b856105a860208c018c611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa158015610617573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063b9190611e3c565b93505050915061067e828860200160208101906106589190611e8e565b61066860c08c0160a08d01611e8e565b61067860608c0160408d01611ea7565b85610c32565b98975050505050505050565b610692610a8e565b8281146106cb576040517fb54ecc3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b83811015610740578282828181106106e7576106e7611ec2565b905060a0020160035f87878581811061070257610702611ec2565b90506020020160208101906107179190611ac2565b63ffffffff16815260208101919091526040015f206107368282611efb565b50506001016106cd565b5050505050565b5f610756878787878787610761565b979650505050505050565b5f61076f6020870187611e04565b67ffffffffffffffff165f036107d9576040517fd009138a00000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152602401610527565b6107e38383610b84565b505f6107f861054f60608a0160408b01611e04565b90505f8061080960208b018b611d67565b73ffffffffffffffffffffffffffffffffffffffff166388a4124c7f00000000000000000000000000000000000000000000000000000000000000008561085360208e018e611e04565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815263ffffffff939093166004840152602483019190915267ffffffffffffffff166044820152606401608060405180830381865afa1580156108c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e69190611e3c565b9350505091505f6108f78989610d27565b90505f6fffffffffffffffffffffffffffffffff83166109377f0000000000000000000000000000000000000000000000000000000000000000846120c4565b6109419190612108565b905061098c610950828661211b565b61096060408e0160208f01611e8e565b8e60600160208101906109739190611e8e565b8e60400160208101906109869190611ea7565b87610c32565b9c9b505050505050505050505050565b5f6109a9858585856104c2565b95945050505050565b6109ba610a8e565b73ffffffffffffffffffffffffffffffffffffffff8116610a09576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610527565b610a1281610b10565b50565b610a1d610a8e565b5f5b818110156103fa57828282818110610a3957610a39611ec2565b9050604002016020013560015f015f858585818110610a5a57610a5a611ec2565b610a709260206040909202019081019150611ac2565b63ffffffff16815260208101919091526040015f2055600101610a1f565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146104c0576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610527565b73ffffffffffffffffffffffffffffffffffffffff8316610b05576103fa8282610e0f565b6103fa838383610f11565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f808215610bde575f80610b99868685610f7f565b6040517f7085244b00000000000000000000000000000000000000000000000000000000815260ff851660048201529096509294508593505060249091019050610527565b808314610c1a576040517f04eb6e0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610527565b5f9150505b92915050565b5f610c1f82610120610fd8565b5f8061ffff861615610c445785610c46565b845b90505f612710610c5a61ffff84168a6120c4565b610c649190612108565b90506fffffffffffffffffffffffffffffffff84161580610c9557506fffffffffffffffffffffffffffffffff8516155b15610ca35791506109a99050565b5f846fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000876fffffffffffffffffffffffffffffffff16610cf591906120c4565b610cff9190612108565b610d09908a61211b565b9050818111610d185781610d1a565b805b9998505050505050505050565b5f80610d36848461103c61124b565b6002548151919250610d5f916effffffffffffffffffffffffffffff9091169061ffff1661212e565b6effffffffffffffffffffffffffffff169150806020015115610dca5760025461271090610db3907e01000000000000000000000000000000000000000000000000000000000000900461ffff16846120c4565b610dbd9190612108565b610dc7908361211b565b91505b806040015115610e0857600254610e05906f0100000000000000000000000000000090046effffffffffffffffffffffffffffff168361211b565b91505b5092915050565b73ffffffffffffffffffffffffffffffffffffffff8216610e5c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114610eb2576040519150601f19603f3d011682016040523d82523d5f602084013e610eb7565b606091505b50509050806103fa576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610527565b73ffffffffffffffffffffffffffffffffffffffff8216610f5e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103fa73ffffffffffffffffffffffffffffffffffffffff8416838361185d565b5f36816001840181610f928888846118ea565b6002830192909150610faa9089908990600301611910565b94506002820161ffff82168301610fc381838b8d612161565b979b909a50969850505061ffff160193505050565b5f80610fe56041856120c4565b9050610ff2602082612188565b1561101a57611002602082612188565b61100c908261219b565b61101790602061211b565b90505b806110278461010461211b565b611031919061211b565b610e0590602061211b565b61104860018583611934565b6110556001856002611975565b156112455763ffffffff8085165f90815260036020908152604091829020825160a0810184529054808516825267ffffffffffffffff64010000000082048116938301939093526c01000000000000000000000000810490921692810192909252740100000000000000000000000000000000000000008104831660608301527801000000000000000000000000000000000000000000000000900490911660808201528284156111a957816020015167ffffffffffffffff168467ffffffffffffffff16111561116657815160208301516103e89163ffffffff169061113c90876121ae565b61114691906121cf565b61115091906121f3565b826040015161115f9190612219565b90506111a9565b6103e8825f015163ffffffff1685846020015161118391906121ae565b61118d91906121cf565b61119791906121f3565b82604001516111a691906121ae565b90505b42826060015163ffffffff16826111c09190612219565b67ffffffffffffffff1610806111f3575060808201516111e69063ffffffff164261211b565b8167ffffffffffffffff16115b15611242576040517f0c5a8d2300000000000000000000000000000000000000000000000000000000815263ffffffff8716600482015267ffffffffffffffff82166024820152604401610527565b50505b50505050565b604080516060810182525f80825260208201819052918101829052908085818661127682600261211b565b9261128393929190612161565b61128c9161223a565b60f01c905061129c60028361211b565b915061ffff81166001146112dc576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112e760028361211b565b91505f8683876112f882600261211b565b9261130593929190612161565b61130e9161223a565b60f01c905061131e60028461211b565b92508061ffff165f0361135d576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff168352505f5b825f015161ffff168161ffff1610156115c6575f86868481811061138c5761138c611ec2565b919091013560f81c91506113a3905060018461211b565b925060ff81166001146113e2576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113ed60028461211b565b92505f8784886113fe82600261211b565b9261140b93929190612161565b6114149161223a565b60f01c905061142460028561211b565b93507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff82160161158a575f88858961146082600261211b565b9261146d93929190612161565b6114769161223a565b60f01c905061148660028661211b565b9450845f8a828b61149882600461211b565b926114a593929190612161565b6114ae91612280565b60e01c90506114be60048361211b565b91505f8b8b848181106114d3576114d3611ec2565b600192013560f81c821492506114eb9190508461211b565b92505f8c848d6114fc82600861211b565b9261150993929190612161565b611512916122c6565b60c01c90506115278383835f8f63ffffffff16565b508a925061153c91505061ffff83168761211b565b1115611574576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158261ffff82168661211b565b9450506115bc565b6040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600101611366565b508381101561181c575f8585838181106115e2576115e2611ec2565b919091013560f81c91506115f9905060018361211b565b915060ff8116600114611638576040517fa9146eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86838761164782600261211b565b9261165493929190612161565b61165d9161223a565b60f01c905061166d60028461211b565b925061ffff81166001146116ad576040517fb968846100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787858181106116c0576116c0611ec2565b919091013560f81c91506116d7905060018561211b565b935060ff81166116ed576001602086015261175c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff821601611723576001604086015261175c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff82160161158a5760016020860181905260408601525b5f88858961176b82600461211b565b9261177893929190612161565b61178191612280565b60e01c905061179160048661211b565b94505f8989878181106117a6576117a6611ec2565b600192013560f81c821492506117be9190508761211b565b95505f8a878b6117cf82600861211b565b926117dc93929190612161565b6117e5916122c6565b60c01c90506117f560088861211b565b965061180883838360018d63ffffffff16565b61181360168861211b565b96505050505050505b808414611855576040517f87a7f37900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526103fa9084906119a2565b5f600282016118fb81848688612161565b6119049161223a565b60f01c95945050505050565b5f83838381811061192357611923611ec2565b919091013560f81c95945050505050565b61193f838383611975565b6103fa576040517f50fae9eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8083165f90815260208590526040812054909161199a91908490611a4116565b949350505050565b5f8060205f8451602086015f885af1806119c1576040513d5f823e3d81fd5b50505f513d915081156119d85780600114156119f2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611245576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610527565b600160ff919091161b16151590565b803573ffffffffffffffffffffffffffffffffffffffff81168114611a73575f80fd5b919050565b5f805f60608486031215611a8a575f80fd5b611a9384611a50565b9250611aa160208501611a50565b9150604084013590509250925092565b63ffffffff81168114610a12575f80fd5b5f60208284031215611ad2575f80fd5b8135611add81611ab1565b9392505050565b80356effffffffffffffffffffffffffffff81168114611a73575f80fd5b803561ffff81168114611a73575f80fd5b5f805f60608486031215611b25575f80fd5b611b2e84611ae4565b9250611b3c60208501611ae4565b9150611b4a60408501611b02565b90509250925092565b5f60608284031215611b63575f80fd5b50919050565b5f8083601f840112611b79575f80fd5b50813567ffffffffffffffff811115611b90575f80fd5b602083019150836020828501011115611ba7575f80fd5b9250929050565b5f805f80848603610140811215611bc3575f80fd5b60c0811215611bd0575f80fd5b50849350611be18660c08701611b53565b925061012085013567ffffffffffffffff811115611bfd575f80fd5b611c0987828801611b69565b95989497509550505050565b5f805f8060408587031215611c28575f80fd5b843567ffffffffffffffff80821115611c3f575f80fd5b818701915087601f830112611c52575f80fd5b813581811115611c60575f80fd5b8860208260051b8501011115611c74575f80fd5b602092830196509450908601359080821115611c8e575f80fd5b818701915087601f830112611ca1575f80fd5b813581811115611caf575f80fd5b88602060a083028501011115611cc3575f80fd5b95989497505060200194505050565b5f805f805f80868803610120811215611ce9575f80fd5b6080811215611cf6575f80fd5b50869550611d078860808901611b53565b945060e087013567ffffffffffffffff80821115611d23575f80fd5b611d2f8a838b01611b69565b9096509450610100890135915080821115611d48575f80fd5b50611d5589828a01611b69565b979a9699509497509295939492505050565b5f60208284031215611d77575f80fd5b611add82611a50565b5f8060208385031215611d91575f80fd5b823567ffffffffffffffff80821115611da8575f80fd5b818501915085601f830112611dbb575f80fd5b813581811115611dc9575f80fd5b8660208260061b8501011115611ddd575f80fd5b60209290920196919550909350505050565b67ffffffffffffffff81168114610a12575f80fd5b5f60208284031215611e14575f80fd5b8135611add81611def565b6fffffffffffffffffffffffffffffffff81168114610a12575f80fd5b5f805f8060808587031215611e4f575f80fd5b845193506020850151611e6181611e1f565b6040860151909350611e7281611e1f565b6060860151909250611e8381611e1f565b939692955090935050565b5f60208284031215611e9e575f80fd5b611add82611b02565b5f60208284031215611eb7575f80fd5b8135611add81611e1f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8135610c1f81611ab1565b8135611f0681611ab1565b63ffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082161783556020840135611f4681611def565b6bffffffffffffffff000000008160201b16905080837fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008416171784556040850135611f9181611def565b73ffffffffffffffff0000000000000000000000008160601b169050837fffffffffffffffffffffffff000000000000000000000000000000000000000084161793508084831717855560608601359250611feb83611ab1565b77ffffffff00000000000000000000000000000000000000008360a01b167fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff8516831782171785555050505061209361204660808401611eef565b82547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff1660c09190911b7bffffffff00000000000000000000000000000000000000000000000016178255565b5050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610c1f57610c1f612097565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612116576121166120db565b500490565b80820180821115610c1f57610c1f612097565b6effffffffffffffffffffffffffffff81811683821602808216919082811461215957612159612097565b505092915050565b5f808585111561216f575f80fd5b8386111561217b575f80fd5b5050820193919092039150565b5f82612196576121966120db565b500690565b81810381811115610c1f57610c1f612097565b67ffffffffffffffff828116828216039080821115610e0857610e08612097565b67ffffffffffffffff81811683821602808216919082811461215957612159612097565b5f67ffffffffffffffff8084168061220d5761220d6120db565b92169190910492915050565b67ffffffffffffffff818116838216019080821115610e0857610e08612097565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156121595760029490940360031b84901b1690921692915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156121595760049490940360031b84901b1690921692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156121595760089490940360031b84901b169092169291505056fea2646970667358221220cccc97c15d4a10960156cf1d97eac992ad00f3710384385711595e0370e0871a64736f6c6343000816003360e060405234801562000010575f80fd5b5060405162001e1538038062001e15833981016040819052620000339162000172565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b62000064816200010b565b50600180546001600160a01b0319166001600160a01b0384811691909117909155811660808190525f60a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620000ca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000f09190620001af565b63ffffffff1660c052505060636003556064600455620001db565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016f575f80fd5b50565b5f806040838503121562000184575f80fd5b825162000191816200015a565b6020840151909250620001a4816200015a565b809150509250929050565b5f60208284031215620001c0575f80fd5b815163ffffffff81168114620001d4575f80fd5b9392505050565b60805160a05160c051611bf3620002225f395f6103fc01525f61036f01525f818161033c015281816106e90152818161081201528181610a5c0152610cc30152611bf35ff3fe60806040526004361061018e575f3560e01c8063715018a6116100d5578063996f79c01161007e578063dabca06311610058578063dabca0631461051f578063f2fde38b1461053e578063fd9be5221461055d57610195565b8063996f79c0146104bf578063aec336e6146104d4578063d80e9bd9146104f357610195565b80638da5cb5b116100af5780638da5cb5b146104545780638f58aa7a1461047d578063909532381461049c57610195565b8063715018a6146103d757806372607537146103eb57806372d713221461043357610195565b80634389e58f1161013757806361d027b31161011157806361d027b31461035e5780636251b637146103915780636750cd4c146103b757610195565b80634389e58f146102d357806354fd4d50146103015780635e280f111461032b57610195565b80631881d94d116101685780631881d94d1461026d5780631c7c294e14610288578063334993ff146102b457610195565b806301ffc9a7146101c75780630e97289b146101fb57806312cc947f1461024c57610195565b3661019557005b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156101d2575f80fd5b506101e66101e136600461127f565b61057c565b60405190151581526020015b60405180910390f35b348015610206575f80fd5b506001546102279073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f2565b348015610257575f80fd5b5061026b6102663660046112fc565b610614565b005b348015610278575f80fd5b5060026040516101f2919061133b565b348015610293575f80fd5b506002546102279073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102bf575f80fd5b5061026b6102ce36600461137a565b6107e7565b3480156102de575f80fd5b506102f26102ed3660046114c1565b6107fa565b6040516101f29392919061159b565b34801561030c575f80fd5b50604080515f80825260208201526002918101919091526060016101f2565b348015610336575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b348015610369575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b34801561039c575f80fd5b506103a5600181565b60405160ff90911681526020016101f2565b3480156103c2575f80fd5b506101e66103d13660046115ed565b50600190565b3480156103e2575f80fd5b5061026b610965565b3480156103f6575f80fd5b5061041e7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101f2565b34801561043e575f80fd5b50610447610978565b6040516101f29190611606565b34801561045f575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610227565b348015610488575f80fd5b5061026b610497366004611644565b610a04565b3480156104a7575f80fd5b506104b160035481565b6040519081526020016101f2565b3480156104ca575f80fd5b506104b160045481565b3480156104df575f80fd5b5061026b6104ee36600461166e565b610b5c565b3480156104fe575f80fd5b5061051261050d366004611689565b610bab565b6040516101f291906116ff565b34801561052a575f80fd5b5061026b610539366004611716565b610beb565b348015610549575f80fd5b5061026b61055836600461166e565b610c03565b348015610568575f80fd5b5061026b610577366004611644565b610c6b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061060e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff1615801590610653575060025473ffffffffffffffffffffffffffffffffffffffff163314155b1561068a576040517f70b216ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60405180606001604052806106a08585610d5b565b63ffffffff1681526020016106b58585610d7d565b81526020016106c48585610d9c565b67ffffffffffffffff169052905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a825d747826107198686610dbe565b6107238787610dcf565b604051610731929190611750565b6040805191829003822060e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168352845163ffffffff1660048401526020850151602484015293015167ffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091166064820152608481019190915260a4015f604051808303815f87803b1580156107cc575f80fd5b505af11580156107de573d5f803e3d5ffd5b50505050505050565b6107ef610dea565b600491909155600355565b604080518082019091525f80825260208201526060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461087f576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61089061088b87611776565b610e3c565b915084515f146108a0578461092a565b600580546108ad90611811565b80601f01602080910402602001604051908101604052809291908181526020018280546108d990611811565b80156109245780601f106108fb57610100808354040283529160200191610924565b820191905f5260205f20905b81548152906001019060200180831161090757829003601f168201915b50505050505b90506109368282610ea1565b6040518060400160405280600454815260200185610954575f610958565b6003545b9052969195509350915050565b61096d610dea565b6109765f610f2a565b565b6005805461098590611811565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190611811565b80156109fc5780601f106109d3576101008083540402835291602001916109fc565b820191905f5260205f20905b8154815290600101906020018083116109df57829003601f168201915b505050505081565b610a0c610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610a59576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae7919061185c565b905073ffffffffffffffffffffffffffffffffffffffff8116610b36576040517f54c1781b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff82168484610f9e565b505050565b610b64610dea565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b604080518082019091525f80825260208201526040518060400160405280600454815260200183610bdc575f610be0565b6003545b905295945050505050565b610bf3610dea565b6005610bff82826118c2565b5050565b610c0b610dea565b73ffffffffffffffffffffffffffffffffffffffff8116610c5f576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610c6881610f2a565b50565b610c73610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610cc0576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4e919061185c565b9050610b5781848461102b565b5f610d6a600d600984866119da565b610d7391611a01565b60e01c9392505050565b5f610d8c602d600d84866119da565b610d9591611a49565b9392505050565b5f610dab6009600184866119da565b610db491611a85565b60c01c9392505050565b5f610d95610dcc848461105b565b90565b365f610dde83605181876119da565b915091505b9250929050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610976576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c56565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610e8b986001989197919673ffffffffffffffffffffffffffffffffffffffff169501611acb565b6040516020818303038152906040529050919050565b6001546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063faed6c5890610ef99085908590600401611b90565b5f604051808303815f87803b158015610f10575f80fd5b505af1158015610f22573d5f803e3d5ffd5b505050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b5790849061106a565b73ffffffffffffffffffffffffffffffffffffffff831661105057610b57828261110f565b610b57838383611211565b5f610d8c6051603184866119da565b5f8060205f8451602086015f885af180611089576040513d5f823e3d81fd5b50505f513d915081156110a05780600114156110ba565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611109576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c56565b50505050565b73ffffffffffffffffffffffffffffffffffffffff821661115c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146111b2576040519150601f19603f3d011682016040523d82523d5f602084013e6111b7565b606091505b5050905080610b57576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c56565b73ffffffffffffffffffffffffffffffffffffffff821661125e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff84168383610f9e565b5f6020828403121561128f575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d95575f80fd5b5f8083601f8401126112ce575f80fd5b50813567ffffffffffffffff8111156112e5575f80fd5b602083019150836020828501011115610de3575f80fd5b5f806020838503121561130d575f80fd5b823567ffffffffffffffff811115611323575f80fd5b61132f858286016112be565b90969095509350505050565b6020810160038310611374577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f806040838503121561138b575f80fd5b50508035926020909101359150565b5f60e082840312156113aa575f80fd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff81118282101715611400576114006113b0565b60405290565b5f82601f830112611415575f80fd5b813567ffffffffffffffff80821115611430576114306113b0565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611476576114766113b0565b8160405283815286602085880101111561148e575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803580151581146114bc575f80fd5b919050565b5f805f606084860312156114d3575f80fd5b833567ffffffffffffffff808211156114ea575f80fd5b6114f68783880161139a565b9450602086013591508082111561150b575f80fd5b5061151886828701611406565b925050611527604085016114ad565b90509250925092565b5f5b8381101561154a578181015183820152602001611532565b50505f910152565b5f8151808452611569816020860160208601611530565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8351815260208085015190820152608060408201525f6115be6080830185611552565b82810360608401526115d08185611552565b9695505050505050565b803563ffffffff811681146114bc575f80fd5b5f602082840312156115fd575f80fd5b610d95826115da565b602081525f610d956020830184611552565b73ffffffffffffffffffffffffffffffffffffffff81168114610c68575f80fd5b80356114bc81611618565b5f8060408385031215611655575f80fd5b823561166081611618565b946020939093013593505050565b5f6020828403121561167e575f80fd5b8135610d9581611618565b5f805f806060858703121561169c575f80fd5b843567ffffffffffffffff808211156116b3575f80fd5b6116bf8883890161139a565b955060208701359150808211156116d4575f80fd5b506116e1878288016112be565b90945092506116f49050604086016114ad565b905092959194509250565b81518152602080830151908201526040810161060e565b5f60208284031215611726575f80fd5b813567ffffffffffffffff81111561173c575f80fd5b61174884828501611406565b949350505050565b818382375f9101908152919050565b803567ffffffffffffffff811681146114bc575f80fd5b5f60e08236031215611786575f80fd5b61178e6113dd565b6117978361175f565b81526117a5602084016115da565b60208201526117b660408401611639565b60408201526117c7606084016115da565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156117f9575f80fd5b61180536828601611406565b60c08301525092915050565b600181811c9082168061182557607f821691505b6020821081036113aa577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6020828403121561186c575f80fd5b8151610d9581611618565b601f821115610b5757805f5260205f20601f840160051c8101602085101561189c5750805b601f840160051c820191505b818110156118bb575f81556001016118a8565b5050505050565b815167ffffffffffffffff8111156118dc576118dc6113b0565b6118f0816118ea8454611811565b84611877565b602080601f831160018114611942575f841561190c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610f22565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561198e5788860151825594840194600190910190840161196f565b50858210156119ca57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b5f80858511156119e8575f80fd5b838611156119f4575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611a415780818660040360031b1b83161692505b505092915050565b8035602083101561060e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015611a415760089490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611b7c816071850160208701611530565b919091016071019998505050505050505050565b604081525f611ba26040830185611552565b8281036020840152611bb48185611552565b9594505050505056fea2646970667358221220153f6a8e912d5720c2f1c4bf884b915b03d8f933123bf4fbba154ab615acb52564736f6c6343000816003360c060405234801562000010575f80fd5b5060405162003f7b38038062003f7b8339810160408190526200003391620002c2565b83838383838360128484818181818d6001600160a01b0381166200007057604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200007b8162000191565b506001600160a01b038083166080528116620000aa57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b158015620000ef575f80fd5b505af115801562000102573d5f803e3d5ffd5b50505050505050506200011a620001e060201b60201c565b60ff168360ff16101562000141576040516301e9714b60e41b815260040160405180910390fd5b6200014e60068462000360565b6200015b90600a6200047b565b60a052506008915062000171905083826200051c565b5060096200018082826200051c565b5050505050505050505050620005e8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000209575f80fd5b81516001600160401b0380821115620002265762000226620001e5565b604051601f8301601f19908116603f01168101908282118183101715620002515762000251620001e5565b81604052838152602092508660208588010111156200026e575f80fd5b5f91505b8382101562000291578582018301518183018401529082019062000272565b5f602085830101528094505050505092915050565b80516001600160a01b0381168114620002bd575f80fd5b919050565b5f805f8060808587031215620002d6575f80fd5b84516001600160401b0380821115620002ed575f80fd5b620002fb88838901620001f9565b9550602087015191508082111562000311575f80fd5b506200032087828801620001f9565b9350506200033160408601620002a6565b91506200034160608601620002a6565b905092959194509250565b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156200037c576200037c6200034c565b92915050565b600181815b80851115620003c257815f1904821115620003a657620003a66200034c565b80851615620003b457918102915b93841c939080029062000387565b509250929050565b5f82620003da575060016200037c565b81620003e857505f6200037c565b81600181146200040157600281146200040c576200042c565b60019150506200037c565b60ff8411156200042057620004206200034c565b50506001821b6200037c565b5060208310610133831016604e8410600b841016171562000451575081810a6200037c565b6200045d838362000382565b805f19048211156200047357620004736200034c565b029392505050565b5f6200048b60ff841683620003ca565b9392505050565b600181811c90821680620004a757607f821691505b602082108103620004c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200051757805f5260205f20601f840160051c81016020851015620004f35750805b601f840160051c820191505b8181101562000514575f8155600101620004ff565b50505b505050565b81516001600160401b03811115620005385762000538620001e5565b620005508162000549845462000492565b84620004cc565b602080601f83116001811462000586575f84156200056e5750858301515b5f19600386901b1c1916600185901b178555620005e0565b5f85815260208120601f198616915b82811015620005b65788860151825594840194600190910190840162000595565b5085821015620005d457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60805160a05161392b620006505f395f81816106f301528181611f9b0152818161200d015261229a01525f81816105a301528181610b5901528181611296015281816115bc01528181611a17015281816123ee0152818161251301526125fb015261392b5ff3fe6080604052600436106102d7575f3560e01c80637d25a05e1161017b578063bb0b6a53116100d1578063d045a0dc11610087578063f2fde38b11610062578063f2fde38b146108d0578063fc0c546a1461052c578063ff7bd03d146108ef575f80fd5b8063d045a0dc1461084d578063d424388514610860578063dd62ed3e1461087f575f80fd5b8063bd815db0116100b7578063bd815db0146107fa578063c7c7f5b31461080d578063ca5eb5e11461082e575f80fd5b8063bb0b6a53146107b0578063bc70b354146107db575f80fd5b8063963efcaa11610131578063a9059cbb1161010c578063a9059cbb14610746578063b731ea0a14610765578063b98bd07014610791575f80fd5b8063963efcaa146106e25780639dc29fac146107155780639f68b96414610734575f80fd5b8063857749b011610161578063857749b0146106925780638da5cb5b146106a557806395d89b41146106ce575f80fd5b80637d25a05e1461063957806382413eac14610673575f80fd5b8063313ce567116102305780635535d461116101e65780636fc1b31e116101c15780636fc1b31e146105c557806370a08231146105e4578063715018a614610625575f80fd5b80635535d4611461053e5780635a0dfe4d1461055d5780635e280f1114610592575f80fd5b80633b6f743b116102165780633b6f743b146104e157806340c10f191461050d57806352ae28791461052c575f80fd5b8063313ce567146104a15780633400288b146104c2575f80fd5b8063134d4f251161029057806318160ddd1161026b57806318160ddd146104505780631f5e13341461046e57806323b872dd14610482575f80fd5b8063134d4f25146103c8578063156a0d0f146103ef57806317442b701461042f575f80fd5b80630d35b415116102c05780630d35b41514610334578063111ecdad1461036257806313137d65146103b3575f80fd5b806306fdde03146102db578063095ea7b314610305575b5f80fd5b3480156102e6575f80fd5b506102ef61090e565b6040516102fc91906127f6565b60405180910390f35b348015610310575f80fd5b5061032461031f366004612829565b61099e565b60405190151581526020016102fc565b34801561033f575f80fd5b5061035361034e366004612869565b6109b7565b6040516102fc9392919061289b565b34801561036d575f80fd5b5060045461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102fc565b6103c66103c13660046129a5565b610b57565b005b3480156103d3575f80fd5b506103dc600281565b60405161ffff90911681526020016102fc565b3480156103fa575f80fd5b50604080517f02e49c2c00000000000000000000000000000000000000000000000000000000815260016020820152016102fc565b34801561043a575f80fd5b50604080516001815260026020820152016102fc565b34801561045b575f80fd5b506007545b6040519081526020016102fc565b348015610479575f80fd5b506103dc600181565b34801561048d575f80fd5b5061032461049c366004612a3e565b610c56565b3480156104ac575f80fd5b5060125b60405160ff90911681526020016102fc565b3480156104cd575f80fd5b506103c66104dc366004612a94565b610c7b565b3480156104ec575f80fd5b506105006104fb366004612abb565b610c91565b6040516102fc9190612b0a565b348015610518575f80fd5b506103c6610527366004612829565b610cf5565b348015610537575f80fd5b503061038e565b348015610549575f80fd5b506102ef610558366004612b32565b610cff565b348015610568575f80fd5b50610324610577366004612a94565b63ffffffff919091165f908152600160205260409020541490565b34801561059d575f80fd5b5061038e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d0575f80fd5b506103c66105df366004612b63565b610da1565b3480156105ef575f80fd5b506104606105fe366004612b63565b73ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604090205490565b348015610630575f80fd5b506103c6610e23565b348015610644575f80fd5b5061065a610653366004612a94565b5f92915050565b60405167ffffffffffffffff90911681526020016102fc565b34801561067e575f80fd5b5061032461068d366004612b7e565b610e36565b34801561069d575f80fd5b5060066104b0565b3480156106b0575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661038e565b3480156106d9575f80fd5b506102ef610e58565b3480156106ed575f80fd5b506104607f000000000000000000000000000000000000000000000000000000000000000081565b348015610720575f80fd5b506103c661072f366004612829565b610e67565b34801561073f575f80fd5b505f610324565b348015610751575f80fd5b50610324610760366004612829565b610e71565b348015610770575f80fd5b5060025461038e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561079c575f80fd5b506103c66107ab366004612c22565b610e7e565b3480156107bb575f80fd5b506104606107ca366004612c61565b60016020525f908152604090205481565b3480156107e6575f80fd5b506102ef6107f5366004612c7a565b610e98565b6103c6610808366004612c22565b611052565b61082061081b366004612cd7565b611216565b6040516102fc929190612d5e565b348015610839575f80fd5b506103c6610848366004612b63565b611249565b6103c661085b3660046129a5565b6112f0565b34801561086b575f80fd5b506103c661087a366004612b63565b611338565b34801561088a575f80fd5b50610460610899366004612db0565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260066020908152604080832093909416825291909152205490565b3480156108db575f80fd5b506103c66108ea366004612b63565b6113b3565b3480156108fa575f80fd5b50610324610909366004612ddc565b611416565b60606008805461091d90612df6565b80601f016020809104026020016040519081016040528092919081815260200182805461094990612df6565b80156109945780601f1061096b57610100808354040283529160200191610994565b820191905f5260205f20905b81548152906001019060200180831161097757829003601f168201915b5050505050905090565b5f336109ab81858561144a565b60019150505b92915050565b604080518082019091525f808252602082015260606109e760405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a569190612e41565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac29190612e5c565b604080518082018252848152602080820184905282515f80825291810190935290975091925090610b15565b604080518082019091525f815260606020820152815260200190600190039081610aee5790505b5093505f80610b39604089013560608a0135610b3460208c018c612c61565b61145c565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610bcd576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b60208701803590610be790610be2908a612c61565b6114b0565b14610c3e57610bf96020880188612c61565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610bc4565b610c4d87878787878787611504565b50505050505050565b5f33610c63858285611695565b610c6e858585611762565b60019150505b9392505050565b610c8361180b565b610c8d828261185d565b5050565b604080518082019091525f80825260208201525f610cbf60408501356060860135610b346020880188612c61565b9150505f80610cce86846118b1565b9092509050610ceb610ce36020880188612c61565b838388611a02565b9695505050505050565b610c8d8282611aed565b600360209081525f928352604080842090915290825290208054610d2290612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4e90612df6565b8015610d995780601f10610d7057610100808354040283529160200191610d99565b820191905f5260205f20905b815481529060010190602001808311610d7c57829003601f168201915b505050505081565b610da961180b565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610e2b61180b565b610e345f611b47565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b60606009805461091d90612df6565b610c8d8282611bbb565b5f336109ab818585611762565b610e8661180b565b610c8d610e938284612f80565b611c15565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ecb90612df6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef790612df6565b8015610f425780601f10610f1957610100808354040283529160200191610f42565b820191905f5260205f20905b815481529060010190602001808311610f2557829003601f168201915b5050505050905080515f03610f905783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610e509350505050565b5f839003610f9f579050610e50565b6002831061101c57610fe584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611d1692505050565b80610ff38460028188613089565b604051602001611005939291906130b0565b604051602081830303815290604052915050610e50565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc492919061311d565b5f5b81811015611155573683838381811061106f5761106f613130565b9050602002810190611081919061315d565b90506110b36110936020830183612c61565b602083013563ffffffff919091165f908152600160205260409020541490565b6110bd575061114d565b3063d045a0dc60c08301358360a08101356110dc610100830183613199565b6110ed610100890160e08a01612b63565b6110fb6101208a018a613199565b6040518963ffffffff1660e01b815260040161111d979695949392919061320f565b5f604051808303818588803b158015611134575f80fd5b505af1158015611146573d5f803e3d5ffd5b5050505050505b600101611054565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa15801561119e573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111e391908101906132a2565b6040517f8351eea7000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b61121e612747565b604080518082019091525f808252602082015261123c858585611d5b565b915091505b935093915050565b61125161180b565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b1580156112d7575f80fd5b505af11580156112e9573d5f803e3d5ffd5b5050505050565b333014611329576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c4d87878787878787610c3e565b61134061180b565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610e18565b6113bb61180b565b73ffffffffffffffffffffffffffffffffffffffff811661140a576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b61141381611b47565b50565b5f60208201803590600190839061142d9086612c61565b63ffffffff16815260208101919091526040015f20541492915050565b6114578383836001611e53565b505050565b5f8061146785611f98565b915081905083811015611241576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610bc4565b63ffffffff81165f90815260016020526040812054806109b1576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610bc4565b5f6115156115128787611fce565b90565b90505f6115408261152e6115298a8a611fe5565b612007565b61153b60208d018d612c61565b61203c565b90506028861115611626575f61157c61155f60608c0160408d0161330b565b61156c60208d018d612c61565b846115778c8c612070565b6120ba565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906115f79086908d905f908790600401613326565b5f604051808303815f87803b15801561160e575f80fd5b505af1158015611620573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61166c60208d018d612c61565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600660209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461175c578181101561174e576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610bc4565b61175c84848484035f611e53565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166117b1576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8216611800576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b6114578383836120ec565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610e34576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610bc4565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61190c85602001356118c686612293565b6118d360a0890189613199565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061230692505050565b90935090505f8161191e576001611921565b60025b90506119416119336020880188612c61565b826107f560808a018a613199565b60045490935073ffffffffffffffffffffffffffffffffffffffff1680156119f8576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906119b79088908890600401613364565b602060405180830381865afa1580156119d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f69190613388565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff168152602001611a71896114b0565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611aa69291906133a3565b6040805180830381865afa158015611ac0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae49190613474565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611b3c576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d5f83836120ec565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611c0a576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b610c8d825f836120ec565b5f5b8151811015611ce657611c46828281518110611c3557611c35613130565b602002602001015160400151611d16565b818181518110611c5857611c58613130565b60200260200101516040015160035f848481518110611c7957611c79613130565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611cb057611cb0613130565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611cdd91906134d2565b50600101611c17565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610e1891906135ee565b600281015161ffff8116600314610c8d57816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610bc491906127f6565b611d63612747565b604080518082019091525f80825260208201525f80611d9833604089013560608a0135611d9360208c018c612c61565b612398565b915091505f80611da889846118b1565b9092509050611dd4611dbd60208b018b612c61565b8383611dce368d90038d018d613695565b8b6123bd565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611e22908d018d612c61565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff8416611ea2576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8316611ef1576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610bc4565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600660209081526040808320938716835292905220829055801561175c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611f8a91815260200190565b60405180910390a350505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000611fc481846136f2565b6109b1919061372a565b5f611fdc6020828486613089565b610c7491613741565b5f611ff4602860208486613089565b611ffd9161377d565b60c01c9392505050565b5f6109b17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff841661372a565b5f73ffffffffffffffffffffffffffffffffffffffff841661205e5761dead93505b6120688484611aed565b509092915050565b606061207f8260288186613089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b6060848484846040516020016120d394939291906137c5565b6040516020818303038152906040529050949350505050565b73ffffffffffffffffffffffffffffffffffffffff8316612123578060075f8282546121189190613842565b909155506121d39050565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260056020526040902054818110156121a8576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610bc4565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526005602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166121fc57600780548290039055612227565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526005602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161228691815260200190565b60405180910390a3505050565b5f806122bf7f0000000000000000000000000000000000000000000000000000000000000000846136f2565b905067ffffffffffffffff8111156109b1576040517fe2ce941300000000000000000000000000000000000000000000000000000000815260048101829052602401610bc4565b805160609015158061236757848460405160200161235392919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b60405160208183030381529060405261238e565b8484338560405160200161237e9493929190613855565b6040516020818303038152906040525b9150935093915050565b5f806123a585858561145c565b90925090506123b48683611bbb565b94509492505050565b6123c5612747565b5f6123d2845f01516124d0565b6020850151909150156123ec576123ec8460200151612510565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff1681526020016124498c6114b0565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b81526004016124849291906133a3565b60806040518083038185885af11580156124a0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906124c591906138ad565b979650505050505050565b5f81341461250c576040517f9f704120000000000000000000000000000000000000000000000000000000008152346004820152602401610bc4565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259e9190612e41565b905073ffffffffffffffffffffffffffffffffffffffff81166125ed576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805133602482018190527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff81811660448501526064808501889052855180860390910181526084909401909452602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001781528451610c8d96881695899361175c9388935f9283929091839182885af1806126c7576040513d5f823e3d81fd5b50505f513d915081156126de5780600114156126f8565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561175c576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610bc4565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161278660405180604001604052805f81526020015f81525090565b905290565b5f5b838110156127a557818101518382015260200161278d565b50505f910152565b5f81518084526127c481602086016020860161278b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610c7460208301846127ad565b73ffffffffffffffffffffffffffffffffffffffff81168114611413575f80fd5b5f806040838503121561283a575f80fd5b823561284581612808565b946020939093013593505050565b5f60e08284031215612863575f80fd5b50919050565b5f60208284031215612879575f80fd5b813567ffffffffffffffff81111561288f575f80fd5b610e5084828501612853565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612932578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261291f878901826127ad565b97505093820193908201906001016128d5565b50508751606088015250505060208501516080850152509050610e50565b5f60608284031215612863575f80fd5b5f8083601f840112612970575f80fd5b50813567ffffffffffffffff811115612987575f80fd5b60208301915083602082850101111561299e575f80fd5b9250929050565b5f805f805f805f60e0888a0312156129bb575f80fd5b6129c58989612950565b965060608801359550608088013567ffffffffffffffff808211156129e8575f80fd5b6129f48b838c01612960565b909750955060a08a01359150612a0982612808565b90935060c08901359080821115612a1e575f80fd5b50612a2b8a828b01612960565b989b979a50959850939692959293505050565b5f805f60608486031215612a50575f80fd5b8335612a5b81612808565b92506020840135612a6b81612808565b929592945050506040919091013590565b803563ffffffff81168114612a8f575f80fd5b919050565b5f8060408385031215612aa5575f80fd5b61284583612a7c565b8015158114611413575f80fd5b5f8060408385031215612acc575f80fd5b823567ffffffffffffffff811115612ae2575f80fd5b612aee85828601612853565b9250506020830135612aff81612aae565b809150509250929050565b8151815260208083015190820152604081016109b1565b803561ffff81168114612a8f575f80fd5b5f8060408385031215612b43575f80fd5b612b4c83612a7c565b9150612b5a60208401612b21565b90509250929050565b5f60208284031215612b73575f80fd5b8135610c7481612808565b5f805f8060a08587031215612b91575f80fd5b612b9b8686612950565b9350606085013567ffffffffffffffff811115612bb6575f80fd5b612bc287828801612960565b9094509250506080850135612bd681612808565b939692955090935050565b5f8083601f840112612bf1575f80fd5b50813567ffffffffffffffff811115612c08575f80fd5b6020830191508360208260051b850101111561299e575f80fd5b5f8060208385031215612c33575f80fd5b823567ffffffffffffffff811115612c49575f80fd5b612c5585828601612be1565b90969095509350505050565b5f60208284031215612c71575f80fd5b610c7482612a7c565b5f805f8060608587031215612c8d575f80fd5b612c9685612a7c565b9350612ca460208601612b21565b9250604085013567ffffffffffffffff811115612cbf575f80fd5b612ccb87828801612960565b95989497509550505050565b5f805f8385036080811215612cea575f80fd5b843567ffffffffffffffff811115612d00575f80fd5b612d0c87828801612853565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612d3e575f80fd5b506020840191506060840135612d5381612808565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff60208501511660208301526040840151612d99604084018280518252602090810151910152565b5082516080830152602083015160a0830152610c74565b5f8060408385031215612dc1575f80fd5b8235612dcc81612808565b91506020830135612aff81612808565b5f60608284031215612dec575f80fd5b610c748383612950565b600181811c90821680612e0a57607f821691505b602082108103612863577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60208284031215612e51575f80fd5b8151610c7481612808565b5f60208284031215612e6c575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715612ec357612ec3612e73565b60405290565b6040805190810167ffffffffffffffff81118282101715612ec357612ec3612e73565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612f3357612f33612e73565b604052919050565b5f67ffffffffffffffff821115612f5457612f54612e73565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612f9a57612f9a612e73565b8360051b6020612fab818301612eec565b868152918501918181019036841115612fc2575f80fd5b865b8481101561307d57803586811115612fda575f80fd5b88016060368290031215612fec575f80fd5b612ff4612ea0565b612ffd82612a7c565b815261300a868301612b21565b8682015260408083013589811115613020575f80fd5b929092019136601f840112613033575f80fd5b823561304661304182612f3b565b612eec565b8181523689838701011115613059575f80fd5b818986018a8301375f91810189019190915290820152845250918301918301612fc4565b50979650505050505050565b5f8085851115613097575f80fd5b838611156130a3575f80fd5b5050820193919092039150565b5f84516130c181846020890161278b565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610e506020830184866130d6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261318f575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126131cc575f80fd5b83018035915067ffffffffffffffff8211156131e6575f80fd5b60200191503681900382131561299e575f80fd5b67ffffffffffffffff81168114611413575f80fd5b63ffffffff61321d89612a7c565b168152602088013560208201525f6040890135613239816131fa565b67ffffffffffffffff811660408401525087606083015260e0608083015261326560e0830187896130d6565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c08401526132948185876130d6565b9a9950505050505050505050565b5f602082840312156132b2575f80fd5b815167ffffffffffffffff8111156132c8575f80fd5b8201601f810184136132d8575f80fd5b80516132e661304182612f3b565b8181528560208385010111156132fa575f80fd5b611ae482602083016020860161278b565b5f6020828403121561331b575f80fd5b8135610c74816131fa565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f610ceb60808301846127ad565b604081525f61337660408301856127ad565b8281036020840152611ae481856127ad565b5f60208284031215613398575f80fd5b8151610c7481612aae565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a060808401526133d860e08401826127ad565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a085015261341382826127ad565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215613456575f80fd5b61345e612ec9565b9050815181526020820151602082015292915050565b5f60408284031215613484575f80fd5b610c748383613446565b601f82111561145757805f5260205f20601f840160051c810160208510156134b35750805b601f840160051c820191505b818110156112e9575f81556001016134bf565b815167ffffffffffffffff8111156134ec576134ec612e73565b613500816134fa8454612df6565b8461348e565b602080601f831160018114613552575f841561351c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556135e6565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561359e5788860151825594840194600190910190840161357f565b50858210156135da57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015613687578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052613673818601836127ad565b968901969450505090860190600101613615565b509098975050505050505050565b5f604082840312156136a5575f80fd5b6136ad612ec9565b82358152602083013560208201528091505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f82613725577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109b1576109b16136c5565b803560208310156109b1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156137bd5780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161383281602c85016020870161278b565b91909101602c0195945050505050565b808201808211156109b1576109b16136c5565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f825161389d81604885016020870161278b565b9190910160480195945050505050565b5f608082840312156138bd575f80fd5b6138c5612ea0565b8251815260208301516138d7816131fa565b60208201526138e98460408501613446565b6040820152939250505056fea2646970667358221220a7e78c28d4976391911497373c3bfff426de060fa72d1fbc537e431a0fece95964736f6c6343000816003360c060405234801562000010575f80fd5b5060405162001b1c38038062001b1c833981016040819052620000339162000240565b808383600362000044838262000351565b50600462000053828262000351565b5050505f8062000069836200009b60201b60201c565b91509150816200007b5760126200007d565b805b60ff1660a05250506001600160a01b03166080525062000452915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691620000e3916200041d565b5f60405180830381855afa9150503d805f81146200011d576040519150601f19603f3d011682016040523d82523d5f602084013e62000122565b606091505b50915091508180156200013757506020815110155b156200016e575f818060200190518101906200015491906200043a565b905060ff81116200016c576001969095509350505050565b505b505f9485945092505050565b634e487b7160e01b5f52604160045260245ffd5b5f5b83811015620001aa57818101518382015260200162000190565b50505f910152565b5f82601f830112620001c2575f80fd5b81516001600160401b0380821115620001df57620001df6200017a565b604051601f8301601f19908116603f011681019082821181831017156200020a576200020a6200017a565b8160405283815286602085880101111562000223575f80fd5b620002368460208301602089016200018e565b9695505050505050565b5f805f6060848603121562000253575f80fd5b83516001600160401b03808211156200026a575f80fd5b6200027887838801620001b2565b945060208601519150808211156200028e575f80fd5b506200029d86828701620001b2565b604086015190935090506001600160a01b0381168114620002bc575f80fd5b809150509250925092565b600181811c90821680620002dc57607f821691505b602082108103620002fb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200034c57805f5260205f20601f840160051c81016020851015620003285750805b601f840160051c820191505b8181101562000349575f815560010162000334565b50505b505050565b81516001600160401b038111156200036d576200036d6200017a565b62000385816200037e8454620002c7565b8462000301565b602080601f831160018114620003bb575f8415620003a35750858301515b5f19600386901b1c1916600185901b17855562000415565b5f85815260208120601f198616915b82811015620003eb57888601518255948401946001909101908401620003ca565b50858210156200040957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251620004308184602087016200018e565b9190910192915050565b5f602082840312156200044b575f80fd5b5051919050565b60805160a051611693620004895f395f6105d301525f818161027c0152818161043101528181610a880152610bd601526116935ff3fe608060405234801561000f575f80fd5b50600436106101b0575f3560e01c806370a08231116100f3578063ba08765211610093578063ce96cb771161006e578063ce96cb77146103c3578063d905777e146103d6578063dd62ed3e146103e9578063ef8b30f7146103b0575f80fd5b8063ba0876521461039d578063c63d75b6146102a6578063c6e6f592146103b0575f80fd5b80639dc29fac116100ce5780639dc29fac14610351578063a9059cbb14610364578063b3d7f6b914610377578063b460af941461038a575f80fd5b806370a082311461030157806394bf804d1461033657806395d89b4114610349575f80fd5b806323b872dd1161015e578063402d267d11610139578063402d267d146102a657806340c10f19146102d95780634cdad506146101e45780636e553f65146102ee575f80fd5b806323b872dd14610235578063313ce5671461024857806338d52e0f14610262575f80fd5b8063095ea7b31161018e578063095ea7b3146101f75780630a28a4771461021a57806318160ddd1461022d575f80fd5b806301e1d114146101b457806306fdde03146101cf57806307a2d13a146101e4575b5f80fd5b6101bc61042e565b6040519081526020015b60405180910390f35b6101d76104e3565b6040516101c69190611222565b6101bc6101f236600461128c565b610573565b61020a6102053660046112cb565b610584565b60405190151581526020016101c6565b6101bc61022836600461128c565b61059b565b6002546101bc565b61020a6102433660046112f3565b6105a7565b6102506105cc565b60405160ff90911681526020016101c6565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101c6565b6101bc6102b436600461132c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b6102ec6102e73660046112cb565b6105f7565b005b6101bc6102fc366004611345565b610605565b6101bc61030f36600461132c565b73ffffffffffffffffffffffffffffffffffffffff165f9081526020819052604090205490565b6101bc610344366004611345565b610655565b6101d761068f565b6102ec61035f3660046112cb565b61069e565b61020a6103723660046112cb565b6106a8565b6101bc61038536600461128c565b6106b5565b6101bc61039836600461136f565b6106c1565b6101bc6103ab36600461136f565b610750565b6101bc6103be36600461128c565b6107d6565b6101bc6103d136600461132c565b6107e1565b6101bc6103e436600461132c565b610810565b6101bc6103f73660046113a8565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260016020908152604080832093909416825291909152205490565b5f7f00000000000000000000000000000000000000000000000000000000000000006040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff91909116906370a0823190602401602060405180830381865afa1580156104ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104de91906113d0565b905090565b6060600380546104f2906113e7565b80601f016020809104026020016040519081016040528092919081815260200182805461051e906113e7565b80156105695780601f1061054057610100808354040283529160200191610569565b820191905f5260205f20905b81548152906001019060200180831161054c57829003601f168201915b5050505050905090565b5f61057e825f61083a565b92915050565b5f33610591818585610872565b5060019392505050565b5f61057e826001610884565b5f336105b48582856108b3565b6105bf858585610980565b60019150505b9392505050565b5f6104de817f0000000000000000000000000000000000000000000000000000000000000000611465565b6106018282610a29565b5050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610635565b60405180910390fd5b5f61063f856107d6565b905061064d33858784610a83565b949350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f610681856106b5565b905061064d33858388610a83565b6060600480546104f2906113e7565b6106018282610b2f565b5f33610591818585610980565b5f61057e82600161083a565b5f806106cc836107e1565b90508085111561072e576040517ffe9cceec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107388661059b565b90506107473386868985610b89565b95945050505050565b5f8061075b83610810565b9050808511156107bd576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018690526044810182905260640161062c565b5f6107c786610573565b9050610747338686848a610b89565b5f61057e825f610884565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e905f61083a565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205461057e565b5f6105c561084661042e565b61085190600161147e565b61085c5f600a6115af565b600254610869919061147e565b85919085610c8a565b61087f8383836001610ccc565b505050565b5f6105c561089382600a6115af565b6002546108a0919061147e565b6108a861042e565b61086990600161147e565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461097a578181101561096c576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018290526044810183905260640161062c565b61097a84848484035f610ccc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109cf576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8216610a1e576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b61087f838383610e03565b73ffffffffffffffffffffffffffffffffffffffff8216610a78576040517fec442f050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b6106015f8383610e03565b610aaf7f0000000000000000000000000000000000000000000000000000000000000000853085610faa565b610ab98382610a29565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051610b21929190918252602082015260400190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b7e576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b610601825f83610e03565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610bc757610bc78386836108b3565b610bd18382610b2f565b610bfc7f00000000000000000000000000000000000000000000000000000000000000008584611033565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051610c7b929190918252602082015260400190565b60405180910390a45050505050565b5f610cb7610c9783611071565b8015610cb257505f8480610cad57610cad6115bd565b868809115b151590565b610cc286868661109d565b610747919061147e565b73ffffffffffffffffffffffffffffffffffffffff8416610d1b576040517fe602df050000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8316610d6a576040517f94280d620000000000000000000000000000000000000000000000000000000081525f600482015260240161062c565b73ffffffffffffffffffffffffffffffffffffffff8085165f908152600160209081526040808320938716835292905220829055801561097a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b2191815260200190565b73ffffffffffffffffffffffffffffffffffffffff8316610e3a578060025f828254610e2f919061147e565b90915550610eea9050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020819052604090205481811015610ebf576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602481018290526044810183905260640161062c565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610f1357600280548290039055610f3e565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f9d91815260200190565b60405180910390a3505050565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283811660448301526064820183905261097a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611172565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261087f91859182169063a9059cbb90606401610fec565b5f6002826003811115611086576110866115ea565b6110909190611617565b60ff166001149050919050565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f036110f0578382816110e6576110e66115bd565b04925050506105c5565b808411611107576111076003851502601118611211565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f8060205f8451602086015f885af180611191576040513d5f823e3d81fd5b50505f513d915081156111a85780600114156111c2565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561097a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161062c565b634e487b715f52806020526024601cfd5b5f602080835283518060208501525f5b8181101561124e57858101830151858201604001528201611232565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b5f6020828403121561129c575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146112c6575f80fd5b919050565b5f80604083850312156112dc575f80fd5b6112e5836112a3565b946020939093013593505050565b5f805f60608486031215611305575f80fd5b61130e846112a3565b925061131c602085016112a3565b9150604084013590509250925092565b5f6020828403121561133c575f80fd5b6105c5826112a3565b5f8060408385031215611356575f80fd5b82359150611366602084016112a3565b90509250929050565b5f805f60608486031215611381575f80fd5b83359250611391602085016112a3565b915061139f604085016112a3565b90509250925092565b5f80604083850312156113b9575f80fd5b6113c2836112a3565b9150611366602084016112a3565b5f602082840312156113e0575f80fd5b5051919050565b600181811c908216806113fb57607f821691505b602082108103611432577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff818116838216019081111561057e5761057e611438565b8082018082111561057e5761057e611438565b600181815b808511156114ea57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156114d0576114d0611438565b808516156114dd57918102915b93841c9390800290611496565b509250929050565b5f826115005750600161057e565b8161150c57505f61057e565b8160018114611522576002811461152c57611548565b600191505061057e565b60ff84111561153d5761153d611438565b50506001821b61057e565b5060208310610133831016604e8410600b841016171561156b575081810a61057e565b6115758383611491565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156115a7576115a7611438565b029392505050565b5f6105c560ff8416836114f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff83168061164e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff8416069150509291505056fea2646970667358221220e4c7204716e83cc6436d4c089c98eaebf1301b2ac725b313f068e28e347d110264736f6c6343000816003360e060405234801562000010575f80fd5b506040516200355f3803806200355f833981016040819052620000339162000240565b828282826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000099919062000287565b8282818181813380620000c557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000d081620001d0565b506001600160a01b038083166080528116620000ff57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b15801562000144575f80fd5b505af115801562000157573d5f803e3d5ffd5b50505050505050506200016f6200021f60201b60201c565b60ff168360ff16101562000196576040516301e9714b60e41b815260040160405180910390fd5b620001a3600684620002c4565b620001b090600a620003df565b60a0525050506001600160a01b0390921660c05250620003ef9350505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b80516001600160a01b03811681146200023b575f80fd5b919050565b5f805f6060848603121562000253575f80fd5b6200025e8462000224565b92506200026e6020850162000224565b91506200027e6040850162000224565b90509250925092565b5f6020828403121562000298575f80fd5b815160ff81168114620002a9575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b60ff8281168282160390811115620002e057620002e0620002b0565b92915050565b600181815b808511156200032657815f19048211156200030a576200030a620002b0565b808516156200031857918102915b93841c9390800290620002eb565b509250929050565b5f826200033e57506001620002e0565b816200034c57505f620002e0565b8160018114620003655760028114620003705762000390565b6001915050620002e0565b60ff841115620003845762000384620002b0565b50506001821b620002e0565b5060208310610133831016604e8410600b8410161715620003b5575081810a620002e0565b620003c18383620002e6565b805f1904821115620003d757620003d7620002b0565b029392505050565b5f620002a960ff8416836200032e565b60805160a05160c0516130f16200046e5f395f818161069e015281816119b40152611b9001525f8181610514015281816118f10152818161196a0152611a6601525f81816104110152818161088301528181610f6d015281816112810152818161156601528181611bf201528181611de90152611ee001526130f15ff3fe6080604052600436106101f5575f3560e01c806382413eac11610117578063bc70b354116100ac578063d045a0dc1161007c578063f2fde38b11610062578063f2fde38b14610671578063fc0c546a14610690578063ff7bd03d146106c2575f80fd5b8063d045a0dc1461063f578063d424388514610652575f80fd5b8063bc70b354146105cd578063bd815db0146105ec578063c7c7f5b3146105ff578063ca5eb5e114610620575f80fd5b80639f68b964116100e75780639f68b96414610544578063b731ea0a14610557578063b98bd07014610583578063bb0b6a53146105a2575f80fd5b806382413eac146104a0578063857749b0146104bf5780638da5cb5b146104da578063963efcaa14610503575f80fd5b80633b6f743b1161018d5780635e280f111161015d5780635e280f11146104005780636fc1b31e14610433578063715018a6146104525780637d25a05e14610466575f80fd5b80633b6f743b1461035157806352ae28791461037d5780635535d4611461038f5780635a0dfe4d146103bb575f80fd5b8063156a0d0f116101c8578063156a0d0f146102bd57806317442b70146102fd5780631f5e13341461031e5780633400288b14610332575f80fd5b80630d35b415146101f9578063111ecdad1461023057806313137d6514610281578063134d4f2514610296575b5f80fd5b348015610204575f80fd5b50610218610213366004611ffe565b6106e1565b6040516102279392919061209b565b60405180910390f35b34801561023b575f80fd5b5060045461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610227565b61029461028f3660046121c6565b610881565b005b3480156102a1575f80fd5b506102aa600281565b60405161ffff9091168152602001610227565b3480156102c8575f80fd5b50604080517f02e49c2c0000000000000000000000000000000000000000000000000000000081526001602082015201610227565b348015610308575f80fd5b5060408051600181526002602082015201610227565b348015610329575f80fd5b506102aa600181565b34801561033d575f80fd5b5061029461034c366004612277565b610980565b34801561035c575f80fd5b5061037061036b3660046122ac565b610996565b60405161022791906122fb565b348015610388575f80fd5b503061025c565b34801561039a575f80fd5b506103ae6103a9366004612323565b6109fc565b6040516102279190612354565b3480156103c6575f80fd5b506103f06103d5366004612277565b63ffffffff919091165f908152600160205260409020541490565b6040519015158152602001610227565b34801561040b575f80fd5b5061025c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043e575f80fd5b5061029461044d366004612366565b610a9e565b34801561045d575f80fd5b50610294610b20565b348015610471575f80fd5b50610487610480366004612277565b5f92915050565b60405167ffffffffffffffff9091168152602001610227565b3480156104ab575f80fd5b506103f06104ba366004612381565b610b33565b3480156104ca575f80fd5b5060405160068152602001610227565b3480156104e5575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661025c565b34801561050e575f80fd5b506105367f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610227565b34801561054f575f80fd5b5060016103f0565b348015610562575f80fd5b5060025461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561058e575f80fd5b5061029461059d366004612425565b610b55565b3480156105ad575f80fd5b506105366105bc366004612464565b60016020525f908152604090205481565b3480156105d8575f80fd5b506103ae6105e736600461247d565b610b6f565b6102946105fa366004612425565b610d29565b61061261060d3660046124da565b610eed565b604051610227929190612561565b34801561062b575f80fd5b5061029461063a366004612366565b610f20565b61029461064d3660046121c6565b610fc7565b34801561065d575f80fd5b5061029461066c366004612366565b61100f565b34801561067c575f80fd5b5061029461068b366004612366565b61108a565b34801561069b575f80fd5b507f000000000000000000000000000000000000000000000000000000000000000061025c565b3480156106cd575f80fd5b506103f06106dc3660046125b3565b6110ed565b604080518082019091525f8082526020820152606061071160405180604001604052805f81526020015f81525090565b5f803073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078091906125cd565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ec91906125e8565b604080518082018252848152602080820184905282515f8082529181019093529097509192509061083f565b604080518082019091525f8152606060208201528152602001906001900390816108185790505b5093505f80610863604089013560608a013561085e60208c018c612464565b611121565b60408051808201909152918252602082015296989597505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146108f7576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b602087018035906109119061090c908a612464565b611175565b14610968576109236020880188612464565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602088013560248201526044016108ee565b610977878787878787876111c9565b50505050505050565b61098861135a565b61099282826113ac565b5050565b604080518082019091525f80825260208201525f6109c46040850135606086013561085e6020880188612464565b9150505f806109d38684611400565b90925090506109f06109e86020880188612464565b838388611551565b93505050505b92915050565b600360209081525f928352604080842090915290825290208054610a1f9061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4b9061262c565b8015610a965780601f10610a6d57610100808354040283529160200191610a96565b820191905f5260205f20905b815481529060010190602001808311610a7957829003601f168201915b505050505081565b610aa661135a565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610b2861135a565b610b315f61163c565b565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b610b5d61135a565b610992610b6a8284612757565b6116b0565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610ba29061262c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bce9061262c565b8015610c195780601f10610bf057610100808354040283529160200191610c19565b820191905f5260205f20905b815481529060010190602001808311610bfc57829003601f168201915b5050505050905080515f03610c675783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610b4d9350505050565b5f839003610c76579050610b4d565b60028310610cf357610cbc84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506117b192505050565b80610cca8460028188612860565b604051602001610cdc93929190612887565b604051602081830303815290604052915050610b4d565b83836040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9291906128f4565b5f5b81811015610e2c5736838383818110610d4657610d46612907565b9050602002810190610d589190612934565b9050610d8a610d6a6020830183612464565b602083013563ffffffff919091165f908152600160205260409020541490565b610d945750610e24565b3063d045a0dc60c08301358360a0810135610db3610100830183612970565b610dc4610100890160e08a01612366565b610dd26101208a018a612970565b6040518963ffffffff1660e01b8152600401610df497969594939291906129e6565b5f604051808303818588803b158015610e0b575f80fd5b505af1158015610e1d573d5f803e3d5ffd5b5050505050505b600101610d2b565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015610e75573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610eba9190810190612a79565b6040517f8351eea70000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b610ef5611fa4565b604080518082019091525f8082526020820152610f138585856117f6565b915091505b935093915050565b610f2861135a565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b158015610fae575f80fd5b505af1158015610fc0573d5f803e3d5ffd5b5050505050565b333014611000576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097787878787878787610968565b61101761135a565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610b15565b61109261135a565b73ffffffffffffffffffffffffffffffffffffffff81166110e1576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024016108ee565b6110ea8161163c565b50565b5f6020820180359060019083906111049086612464565b63ffffffff16815260208101919091526040015f20541492915050565b5f8061112c856118ee565b915081905083811015610f18576040517f71c4efed00000000000000000000000000000000000000000000000000000000815260048101829052602481018590526044016108ee565b63ffffffff81165f90815260016020526040812054806109f6576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff841660048201526024016108ee565b5f6111da6111d78787611924565b90565b90505f611205826111f36111ee8a8a611942565b611964565b61120060208d018d612464565b611999565b905060288611156112eb575f61124161122460608c0160408d01612ae2565b61123160208d018d612464565b8461123c8c8c6119e3565b611a2d565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112bc9086908d905f908790600401612afd565b5f604051808303815f87803b1580156112d3575f80fd5b505af11580156112e5573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61133160208d018d612464565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b31576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016108ee565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6060805f61145b856020013561141586611a5f565b61142260a0890189612970565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611ad292505050565b90935090505f8161146d576001611470565b60025b90506114906114826020880188612464565b826105e760808a018a612970565b60045490935073ffffffffffffffffffffffffffffffffffffffff168015611547576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb906115069088908890600401612b45565b602060405180830381865afa158015611521573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115459190612b69565b505b5050509250929050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff1681526020016115c089611175565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016115f5929190612b84565b6040805180830381865afa15801561160f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116339190612c55565b95945050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b8151811015611781576116e18282815181106116d0576116d0612907565b6020026020010151604001516117b1565b8181815181106116f3576116f3612907565b60200260200101516040015160035f84848151811061171457611714612907565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f84848151811061174b5761174b612907565b60200260200101516020015161ffff1661ffff1681526020019081526020015f2090816117789190612cb3565b506001016116b2565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610b159190612dcf565b600281015161ffff811660031461099257816040517f9a6d49cd0000000000000000000000000000000000000000000000000000000081526004016108ee9190612354565b6117fe611fa4565b604080518082019091525f80825260208201525f8061183333604089013560608a013561182e60208c018c612464565b611b64565b915091505f806118438984611400565b909250905061186f61185860208b018b612464565b8383611869368d90038d018d612e76565b8b611bc1565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118bd908d018d612464565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b5f7f000000000000000000000000000000000000000000000000000000000000000061191a8184612ea6565b6109f69190612ede565b5f6119326020828486612860565b61193b91612f1a565b9392505050565b5f611951602860208486612860565b61195a91612f56565b60c01c9392505050565b5f6109f67f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff8416612ede565b5f6119db73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585611cd4565b509092915050565b60606119f28260288186612860565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606084848484604051602001611a469493929190612f9e565b6040516020818303038152906040529050949350505050565b5f80611a8b7f000000000000000000000000000000000000000000000000000000000000000084612ea6565b905067ffffffffffffffff8111156109f6576040517fe2ce9413000000000000000000000000000000000000000000000000000000008152600481018290526024016108ee565b8051606090151580611b33578484604051602001611b1f92919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b604051602081830303815290604052611b5a565b84843385604051602001611b4a949392919061301b565b6040516020818303038152906040525b9150935093915050565b5f80611b71858585611121565b9092509050611bb873ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016873085611d5a565b94509492505050565b611bc9611fa4565b5f611bd6845f0151611da6565b602085015190915015611bf057611bf08460200151611de6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff168152602001611c4d8c611175565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b8152600401611c88929190612b84565b60806040518083038185885af1158015611ca4573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611cc99190613073565b979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052611d5591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611f05565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052611da09186918216906323b872dd90608401611d0e565b50505050565b5f813414611de2576040517f9f7041200000000000000000000000000000000000000000000000000000000081523460048201526024016108ee565b5090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7491906125cd565b905073ffffffffffffffffffffffffffffffffffffffff8116611ec3576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61099273ffffffffffffffffffffffffffffffffffffffff8216337f000000000000000000000000000000000000000000000000000000000000000085611d5a565b5f8060205f8451602086015f885af180611f24576040513d5f823e3d81fd5b50505f513d91508115611f3b578060011415611f55565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611da0576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016108ee565b60405180606001604052805f80191681526020015f67ffffffffffffffff168152602001611fe360405180604001604052805f81526020015f81525090565b905290565b5f60e08284031215611ff8575f80fd5b50919050565b5f6020828403121561200e575f80fd5b813567ffffffffffffffff811115612024575f80fd5b610b4d84828501611fe8565b5f5b8381101561204a578181015183820152602001612032565b50505f910152565b5f8151808452612069816020860160208601612030565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612132578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4001855281518051885283015183880187905261211f87890182612052565b97505093820193908201906001016120d5565b50508751606088015250505060208501516080850152509050610b4d565b5f60608284031215611ff8575f80fd5b5f8083601f840112612170575f80fd5b50813567ffffffffffffffff811115612187575f80fd5b60208301915083602082850101111561219e575f80fd5b9250929050565b73ffffffffffffffffffffffffffffffffffffffff811681146110ea575f80fd5b5f805f805f805f60e0888a0312156121dc575f80fd5b6121e68989612150565b965060608801359550608088013567ffffffffffffffff80821115612209575f80fd5b6122158b838c01612160565b909750955060a08a0135915061222a826121a5565b90935060c0890135908082111561223f575f80fd5b5061224c8a828b01612160565b989b979a50959850939692959293505050565b803563ffffffff81168114612272575f80fd5b919050565b5f8060408385031215612288575f80fd5b6122918361225f565b946020939093013593505050565b80151581146110ea575f80fd5b5f80604083850312156122bd575f80fd5b823567ffffffffffffffff8111156122d3575f80fd5b6122df85828601611fe8565b92505060208301356122f08161229f565b809150509250929050565b8151815260208083015190820152604081016109f6565b803561ffff81168114612272575f80fd5b5f8060408385031215612334575f80fd5b61233d8361225f565b915061234b60208401612312565b90509250929050565b602081525f61193b6020830184612052565b5f60208284031215612376575f80fd5b813561193b816121a5565b5f805f8060a08587031215612394575f80fd5b61239e8686612150565b9350606085013567ffffffffffffffff8111156123b9575f80fd5b6123c587828801612160565b90945092505060808501356123d9816121a5565b939692955090935050565b5f8083601f8401126123f4575f80fd5b50813567ffffffffffffffff81111561240b575f80fd5b6020830191508360208260051b850101111561219e575f80fd5b5f8060208385031215612436575f80fd5b823567ffffffffffffffff81111561244c575f80fd5b612458858286016123e4565b90969095509350505050565b5f60208284031215612474575f80fd5b61193b8261225f565b5f805f8060608587031215612490575f80fd5b6124998561225f565b93506124a760208601612312565b9250604085013567ffffffffffffffff8111156124c2575f80fd5b6124ce87828801612160565b95989497509550505050565b5f805f83850360808112156124ed575f80fd5b843567ffffffffffffffff811115612503575f80fd5b61250f87828801611fe8565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612541575f80fd5b506020840191506060840135612556816121a5565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff6020850151166020830152604084015161259c604084018280518252602090810151910152565b5082516080830152602083015160a083015261193b565b5f606082840312156125c3575f80fd5b61193b8383612150565b5f602082840312156125dd575f80fd5b815161193b816121a5565b5f602082840312156125f8575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b600181811c9082168061264057607f821691505b602082108103611ff8577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b6040516060810167ffffffffffffffff8111828210171561269a5761269a6125ff565b60405290565b6040805190810167ffffffffffffffff8111828210171561269a5761269a6125ff565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561270a5761270a6125ff565b604052919050565b5f67ffffffffffffffff82111561272b5761272b6125ff565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f67ffffffffffffffff80841115612771576127716125ff565b8360051b60206127828183016126c3565b868152918501918181019036841115612799575f80fd5b865b84811015612854578035868111156127b1575f80fd5b880160603682900312156127c3575f80fd5b6127cb612677565b6127d48261225f565b81526127e1868301612312565b86820152604080830135898111156127f7575f80fd5b929092019136601f84011261280a575f80fd5b823561281d61281882612712565b6126c3565b8181523689838701011115612830575f80fd5b818986018a8301375f9181018901919091529082015284525091830191830161279b565b50979650505050505050565b5f808585111561286e575f80fd5b8386111561287a575f80fd5b5050820193919092039150565b5f8451612898818460208901612030565b8201838582375f930192835250909392505050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f610b4d6020830184866128ad565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112612966575f80fd5b9190910192915050565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126129a3575f80fd5b83018035915067ffffffffffffffff8211156129bd575f80fd5b60200191503681900382131561219e575f80fd5b67ffffffffffffffff811681146110ea575f80fd5b63ffffffff6129f48961225f565b168152602088013560208201525f6040890135612a10816129d1565b67ffffffffffffffff811660408401525087606083015260e06080830152612a3c60e0830187896128ad565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c0840152612a6b8185876128ad565b9a9950505050505050505050565b5f60208284031215612a89575f80fd5b815167ffffffffffffffff811115612a9f575f80fd5b8201601f81018413612aaf575f80fd5b8051612abd61281882612712565b818152856020838501011115612ad1575f80fd5b611633826020830160208601612030565b5f60208284031215612af2575f80fd5b813561193b816129d1565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015261ffff83166040820152608060608201525f612b3b6080830184612052565b9695505050505050565b604081525f612b576040830185612052565b82810360208401526116338185612052565b5f60208284031215612b79575f80fd5b815161193b8161229f565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a06080840152612bb960e0840182612052565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a0850152612bf48282612052565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b5f60408284031215612c37575f80fd5b612c3f6126a0565b9050815181526020820151602082015292915050565b5f60408284031215612c65575f80fd5b61193b8383612c27565b601f821115611d5557805f5260205f20601f840160051c81016020851015612c945750805b601f840160051c820191505b81811015610fc0575f8155600101612ca0565b815167ffffffffffffffff811115612ccd57612ccd6125ff565b612ce181612cdb845461262c565b84612c6f565b602080601f831160018114612d33575f8415612cfd5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612dc7565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612d7f57888601518255948401946001909101908401612d60565b5085821015612dbb57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208083018184528085518083526040925060408601915060408160051b8701018488015f5b83811015612e68578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612e5481860183612052565b968901969450505090860190600101612df6565b509098975050505050505050565b5f60408284031215612e86575f80fd5b612e8e6126a0565b82358152602083013560208201528091505092915050565b5f82612ed9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b80820281158282048414176109f6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b803560208310156109f6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015612f965780818660080360031b1b83161692505b505092915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1681527fffffffff000000000000000000000000000000000000000000000000000000008460e01b16600882015282600c8201525f825161300b81602c850160208701612030565b91909101602c0195945050505050565b8481527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b1660208201528260288201525f8251613063816048850160208701612030565b9190910160480195945050505050565b5f60808284031215613083575f80fd5b61308b612677565b82518152602083015161309d816129d1565b60208201526130af8460408501612c27565b6040820152939250505056fea26469706673582212201d2eeb249efab86d32800173e736d788fc450154b978b7660829bc5ead288d1364736f6c6343000816003361016060405234801562000011575f80fd5b50604051620024be380380620024be833981016040819052620000349162000608565b60015f556001600160a01b03808416608052821660a081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa15801562000087573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000ad919062000659565b6001600160a01b0390811660c052811660e081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa158015620000fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000122919062000659565b6001600160a01b0316610100816001600160a01b03168152505060a0516001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001a1919062000659565b6001600160a01b03166101208190526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620001ea573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200021091906200067e565b63ffffffff1661014052608051610100516001600160a01b039081169116146200026c576101005160805160405163070bc55b60e11b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b6080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d1919062000659565b6001600160a01b031660c0516001600160a01b031614620003815760c0516080516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200032e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000354919062000659565b60405163ba9d665f60e01b81526001600160a01b0392831660048201529116602482015260440162000263565b60e0516001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e69190620006a3565b620004145760e051604051637e0a8a5760e11b81526001600160a01b03909116600482015260240162000263565b60c05160405163095ea7b360e01b81526001600160a01b0385811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af115801562000465573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200048b9190620006a3565b506101005160405163095ea7b360e01b81526001600160a01b0383811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620004de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005049190620006a3565b50816001600160a01b0316639f68b9646040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000542573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005689190620006a3565b15620005e75760c05160405163095ea7b360e01b81526001600160a01b0384811660048301525f1960248301529091169063095ea7b3906044016020604051808303815f875af1158015620005bf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620005e59190620006a3565b505b505050620006c4565b6001600160a01b038116811462000605575f80fd5b50565b5f805f606084860312156200061b575f80fd5b83516200062881620005f0565b60208501519093506200063b81620005f0565b60408501519092506200064e81620005f0565b809150509250925092565b5f602082840312156200066a575f80fd5b81516200067781620005f0565b9392505050565b5f602082840312156200068f575f80fd5b815163ffffffff8116811462000677575f80fd5b5f60208284031215620006b4575f80fd5b8151801515811462000677575f80fd5b60805160a05160c05160e051610100516101205161014051611d246200079a5f395f81816102a5015261111301525f8181610200015261096b01525f818161027201528181610375015261119101525f818161018701528181610a1d0152610d4d01525f81816101540152818161031101526111b701525f818160e2015281816103be015281816108dd015281816109c601528181610da7015261113e01525f81816101ba015281816104560152818161055701528181610627015281816107230152818161104201526113290152611d245ff3fe6080604052600436106100c6575f3560e01c80636fad06f511610071578063a99ecc541161004c578063a99ecc5414610261578063aa72fe3f14610294578063d0a10260146102dc575f80fd5b80636fad06f5146101ef5780637e6e1e10146102225780639a6b198c1461024e575f80fd5b8063369caf83116100a1578063369caf8314610176578063411557d1146101a957806353174fa4146101dc575f80fd5b80630bfec755146100d157806319197ec61461012e5780631df34fa314610143575f80fd5b366100cd57005b5f80fd5b3480156100dc575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c36600461160e565b6102ef565b005b34801561014e575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b348015610181575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b4575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b6101416101ea36600461160e565b610353565b3480156101fa575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561022d575f80fd5b5061024161023c366004611661565b6103a9565b60405161012591906116c5565b61014161025c3660046116dc565b610843565b34801561026c575f80fd5b506101047f000000000000000000000000000000000000000000000000000000000000000081565b34801561029f575f80fd5b506102c77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610125565b6101416102ea36600461177c565b610953565b6102f7610c50565b61033973ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d20565b61034e60015f55565b505050565b61035b610c50565b61039d73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333086610c91565b61034533848484610d7a565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036105e0576040517fd905777e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063d905777e90602401602060405180830381865afa15801561049d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104c19190611813565b905080841115610528576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716600482015260248101859052604481018290526064015b60405180910390fd5b6040517f4cdad506000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634cdad50690602401602060405180830381865afa1580156105b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d59190611813565b6040840152506107a8565b6040517f402d267d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063402d267d90602401602060405180830381865afa15801561066e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106929190611813565b9050808411156106f4576040517f79012fb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602481018590526044810182905260640161051f565b6040517fef8b30f7000000000000000000000000000000000000000000000000000000008152600481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef8b30f790602401602060405180830381865afa15801561077d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a19190611813565b6040840152505b6040517f3b6f743b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690633b6f743b906107fc9085905f9060040161190a565b6040805180830381865afa158015610816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a919061197a565b95945050505050565b33301461087e576040517fa19dbf0000000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b5f808380602001905181019061089491906119e9565b91509150803410156108db576040517f7cb769dc0000000000000000000000000000000000000000000000000000000081526004810182905234602482015260440161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361093f5761093a85848432610d20565b61094b565b61094b85848432610d7a565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146109c4576040517f91ac5e4f00000000000000000000000000000000000000000000000000000000815233600482015260240161051f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015610a6c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b15610abb576040517f84fb3f0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816600482015260240161051f565b5f610ac68686610dcd565b90505f610ad38787610dee565b90505f610ae08888610dfd565b6040517f9a6b198c0000000000000000000000000000000000000000000000000000000081529091503090639a6b198c903490610b27908e90889087908990600401611ad0565b5f604051808303818588803b158015610b3e575f80fd5b505af193505050508015610b50575060015b610c19573d808015610b7d576040519150601f19603f3d011682016040523d82523d5f602084013e610b82565b606091505b507f7cb769dc00000000000000000000000000000000000000000000000000000000610bad82611b15565b7fffffffff000000000000000000000000000000000000000000000000000000001603610bdc57805181602001fd5b610be98b8a8a8632610e47565b6040518a907ffe509803c09416b28ff3d8f690c8b0c61462a892c46d5430c8fb20abe472daf0905f90a250610c44565b60405189907f27b5aea9f5736c02241d8a0272e9ec988ea44cf85c4b4760329431aa19678394905f90a25b50505050505050505050565b60025f5403610c8b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b60405173ffffffffffffffffffffffffffffffffffffffff8481166024830152838116604483015260648201839052610d1a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610f6c565b50505050565b5f610d2b858561100b565b9050610d3b8184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5050505050565b5f610d8585856112eb565b9050610d958184606001516110c2565b604083018190525f6060840152610d737f0000000000000000000000000000000000000000000000000000000000000000848461110a565b5f610ddc604c602c8486611b64565b610de591611b8b565b90505b92915050565b5f610ddc602c600c8486611b64565b6060610e0c82604c8186611b64565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b610e8c6040518060e001604052805f63ffffffff1681526020015f80191681526020015f81526020015f81526020016060815260200160608152602001606081525090565b610e96858561136d565b63ffffffff168152610ea88585610dcd565b602080830191909152604080830185905280518082018252348082525f9382019390935290517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89169263c7c7f5b3929091610f219186918890600401611bc7565b60c06040518083038185885af1158015610f3d573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f629190611c16565b5050505050505050565b5f8060205f8451602086015f885af180610f8b576040513d5f823e3d81fd5b50505f513d91508115610fa2578060011415610fbc565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610d1a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161051f565b6040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018290523060248201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636e553f65906044015b6020604051808303815f875af115801561109e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de59190611813565b80821015611106576040517f71c4efed000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161051f565b5050565b815163ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116911603611242575f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146111b5577f00000000000000000000000000000000000000000000000000000000000000006111d7565b7f00000000000000000000000000000000000000000000000000000000000000005b90503415611211576040517f7578d2bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1a61121f846020015190565b604085015173ffffffffffffffffffffffffffffffffffffffff8416919061138f565b604080518082018252348082525f602083015291517fc7c7f5b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169263c7c7f5b39290916112aa9187918790600401611bc7565b60c06040518083038185885af11580156112c6573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d739190611c16565b6040517fba08765200000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ba08765290606401611082565b5f61137c600c60088486611b64565b61138591611ca6565b60e01c9392505050565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261034e91859182169063a9059cbb90606401610cd3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff8111828210171561141d5761141d6113cd565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561146a5761146a6113cd565b604052919050565b63ffffffff81168114611483575f80fd5b50565b803561149181611472565b919050565b5f67ffffffffffffffff8211156114af576114af6113cd565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f8301126114ea575f80fd5b81356114fd6114f882611496565b611423565b818152846020838601011115611511575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60e0828403121561153d575f80fd5b6115456113fa565b905061155082611486565b8152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff8082111561158a575f80fd5b611596858386016114db565b608084015260a08401359150808211156115ae575f80fd5b6115ba858386016114db565b60a084015260c08401359150808211156115d2575f80fd5b506115df848285016114db565b60c08301525092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611491575f80fd5b5f805f60608486031215611620575f80fd5b83359250602084013567ffffffffffffffff81111561163d575f80fd5b6116498682870161152d565b925050611658604085016115eb565b90509250925092565b5f805f8060808587031215611674575f80fd5b61167d856115eb565b935061168b602086016115eb565b925060408501359150606085013567ffffffffffffffff8111156116ad575f80fd5b6116b98782880161152d565b91505092959194509250565b815181526020808301519082015260408101610de8565b5f805f80608085870312156116ef575f80fd5b6116f8856115eb565b935060208501359250604085013567ffffffffffffffff81111561171a575f80fd5b611726878288016114db565b949793965093946060013593505050565b5f8083601f840112611747575f80fd5b50813567ffffffffffffffff81111561175e575f80fd5b602083019150836020828501011115611775575f80fd5b9250929050565b5f805f805f805f60a0888a031215611792575f80fd5b61179b886115eb565b965060208801359550604088013567ffffffffffffffff808211156117be575f80fd5b6117ca8b838c01611737565b90975095508591506117de60608b016115eb565b945060808a01359150808211156117f3575f80fd5b506118008a828b01611737565b989b979a50959850939692959293505050565b5f60208284031215611823575f80fd5b5051919050565b5f5b8381101561184457818101518382015260200161182c565b50505f910152565b5f815180845261186381602086016020860161182a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301525f608082015160e060808501526118d760e085018261184c565b905060a083015184820360a08601526118f0828261184c565b91505060c083015184820360c086015261083a828261184c565b604081525f61191c6040830185611895565b905082151560208301529392505050565b5f6040828403121561193d575f80fd5b6040516040810181811067ffffffffffffffff82111715611960576119606113cd565b604052825181526020928301519281019290925250919050565b5f6040828403121561198a575f80fd5b610de5838361192d565b805161149181611472565b5f82601f8301126119ae575f80fd5b81516119bc6114f882611496565b8181528460208386010111156119d0575f80fd5b6119e182602083016020870161182a565b949350505050565b5f80604083850312156119fa575f80fd5b825167ffffffffffffffff80821115611a11575f80fd5b9084019060e08287031215611a24575f80fd5b611a2c6113fa565b611a3583611994565b8152602083015160208201526040830151604082015260608301516060820152608083015182811115611a66575f80fd5b611a728882860161199f565b60808301525060a083015182811115611a89575f80fd5b611a958882860161199f565b60a08301525060c083015182811115611aac575f80fd5b611ab88882860161199f565b60c08301525060209590950151949694955050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f611b04608083018561184c565b905082606083015295945050505050565b5f815160208301517fffffffff0000000000000000000000000000000000000000000000000000000080821693506004831015611b5c5780818460040360031b1b83161693505b505050919050565b5f8085851115611b72575f80fd5b83861115611b7e575f80fd5b5050820193919092039150565b80356020831015610de8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b608081525f611bd96080830186611895565b9050611bf2602083018580518252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff83166060830152949350505050565b5f8082840360c0811215611c28575f80fd5b6080811215611c35575f80fd5b506040516060810167ffffffffffffffff8282108183111715611c5a57611c5a6113cd565b8160405285518352602086015191508082168214611c76575f80fd5b506020820152611c89856040860161192d565b60408201529150611c9d846080850161192d565b90509250929050565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611ce65780818660040360031b1b83161692505b50509291505056fea26469706673582212203c210af0c85b10469f135dd49d1274fa8e04b8bee0c2069213c4acfe2a3036b564736f6c63430008160033608060405234801561000f575f80fd5b50610a8c8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e5c5e9a31461002d575b5f80fd5b61004061003b3660046106f8565b610057565b60405161004e9291906107cf565b60405180910390f35b606080610064848461006f565b915091509250929050565b60608060028310156100b4576040517f6592671c0000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b5f6100c260028286886107fc565b6100cb91610823565b60f01c905060027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd820161029357805f5b86831015610220575f61011460018501858a8c6107fc565b61011d9161086b565b60f81c90505f81900361015e576040517f6780cfaf0000000000000000000000000000000000000000000000000000000081525f60048201526024016100ab565b8160ff165f03610170578091506101ac565b8160ff168160ff16146101ac57365f61018b86868c8e6107fc565b9150915061019c89898685856102aa565b9099509750859450919250829150505b60018401935f906101c290600301868b8d6107fc565b6101cb91610823565b60f01c90505f81900361020d576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018690526024016100ab565b8060020161ffff168501945050506100fc565b82871461025c576040517f6592671c000000000000000000000000000000000000000000000000000000008152600481018490526024016100ab565b600287111561028c57365f61027385858b8d6107fc565b9150915061028488888585856102aa565b909850965050505b50506102a1565b61029e82878761041d565b93505b50509250929050565b6060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff86160161034457865115610307578684846040516020016102f3939291906108b1565b60405160208183030381529060405261033d565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650610412565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8616016103db5785511561039e5785848460405160200161038a939291906108b1565b6040516020818303038152906040526103d4565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550610412565b6040517f6780cfaf00000000000000000000000000000000000000000000000000000000815260ff861660048201526024016100ab565b509495939450505050565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61ffff8516016105425760228214610484576040517f0dc652a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6104a46104966022600286886107fc565b61049f916108d7565b61069f565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608083901b166024820152909150603401604051602081830303815290604052915050610698565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61ffff8516016106605760428211158061057d5750606282115b156105b4576040517fc0927c5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6105c66104966022600286886107fc565b90505f6105da6104966042602287896107fc565b90505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe850161060d866042818a6107fc565b610616916108d7565b60405160086020938403029190911c9250610647916001916011918391889183916031916002918b918b9101610914565b6040516020818303038152906040529350505050610698565b6040517f4170513000000000000000000000000000000000000000000000000000000000815261ffff851660048201526024016100ab565b9392505050565b5f6fffffffffffffffffffffffffffffffff8211156106f4576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016100ab565b5090565b5f8060208385031215610709575f80fd5b823567ffffffffffffffff80821115610720575f80fd5b818501915085601f830112610733575f80fd5b813581811115610741575f80fd5b866020828501011115610752575f80fd5b60209290920196919550909350505050565b5f5b8381101561077e578181015183820152602001610766565b50505f910152565b5f815180845261079d816020860160208601610764565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f6107e16040830185610786565b82810360208401526107f38185610786565b95945050505050565b5f808585111561080a575f80fd5b83861115610816575f80fd5b5050820193919092039150565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156108635780818660020360031b1b83161692505b505092915050565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156108635760019490940360031b84901b1690921692915050565b5f84516108c2818460208901610764565b8201838582375f930192835250909392505050565b8035602083101561090e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b165b92915050565b5f7fff00000000000000000000000000000000000000000000000000000000000000808c60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008b60f01b166001840152808a60f81b1660038401527fffffffffffffffffffffffffffffffff000000000000000000000000000000008960801b166004840152808860f81b166014840152506109dc601583018760f01b7fffff000000000000000000000000000000000000000000000000000000000000169052565b610a0d601783018660f81b7fff00000000000000000000000000000000000000000000000000000000000000169052565b610a3e601883018560801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b5060288101919091526048019897505050505050505056fea26469706673582212204c5336eb5e4cfed89d8f0ececad030c194802d04a3053cab299816b06066820764736f6c6343000816003375736572412073686f756c64206861766520726563656976656420726566756e64206f6e20457468657265756d4e6f207368617265732073686f756c64206265206d696e7465642064756520746f20726566756e64a2646970667358221220c095692ed8490b927e8d9378756294312aceddfc70e44a28fe131092593298c364736f6c63430008160033",
+ "sourceMap": "941:9637:138:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1652:372;;;;;;;;;;-1:-1:-1;1652:372:138;;;;;:::i;:::-;;:::i;:::-;;3666:1717;;;;;;;;;;;;;:::i;21149:174:74:-;;;;;;;;;;-1:-1:-1;21149:174:74;;;;;:::i;:::-;;:::i;1563:26:135:-;;;;;;;;;;-1:-1:-1;1563:26:135;;;;-1:-1:-1;;;;;1563:26:135;;;;;;-1:-1:-1;;;;;1106:55:139;;;1088:74;;1076:2;1061:18;1563:26:135;;;;;;;;23482:633:74;;;;;;:::i;:::-;;:::i;1048:71:138:-;;;;;;;;;;;;;:::i;4416:50:74:-;;;;;;;;;;;;4461:5;4416:50;;;;;4034:6:139;4022:19;;;4004:38;;3992:2;3977:18;4416:50:74;3860:188:139;1178:27:135;;;;;;;;;;-1:-1:-1;1178:27:135;;;;;;;-1:-1:-1;;;;;1178:27:135;;;1135:36;;;;;;;;;;;;1168:3;1135:36;;;;;4475:10:139;4463:23;;;4445:42;;4433:2;4418:18;1135:36:135;4301:192:139;1125:273:138;;;;;;;;;;;;;:::i;1764:51:135:-;;;;;;;;;;;;1806:9;1764:51;;;;;4644:25:139;;;4632:2;4617:18;1764:51:135;4498:177:139;4297:50:74;;;;;;;;;;;;4343:4;4297:50;;;;;4856:32:139;4844:45;;;4826:64;;4814:2;4799:18;4297:50:74;4680:216:139;1653:104:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5226:166:74:-;;;;;;;;;;-1:-1:-1;5226:166:74;;;;;:::i;:::-;;:::i;2907:134:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1095:34:135:-;;;;;;;;;;;;1128:1;1095:34;;4586:43:74;;;;;;;;;;-1:-1:-1;4586:43:74;;;;;;;;;;;7271:34:139;7259:47;;;7241:66;;7229:2;7214:18;4586:43:74;7095:218:139;1015:34:135;;;;;;;;;;;;1048:1;1015:34;;16845:490:74;;;;;;;;;;-1:-1:-1;16845:490:74;;;;;:::i;:::-;;:::i;3823:151:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1211:34:135:-;;;;;;;;;;-1:-1:-1;1211:34:135;;;;-1:-1:-1;;;;;1211:34:135;;;25280:469:74;;;;;;:::i;:::-;;:::i;1352:27:135:-;;;;;;;;;;-1:-1:-1;1352:27:135;;;;-1:-1:-1;;;;;1352:27:135;;;3684:133:94;;;;;;;;;;;;;:::i;3385:141::-;;;;;;;;;;;;;:::i;9153:694:138:-;;;;;;;;;;;;;:::i;5976:204:73:-;;;;;;;;;;-1:-1:-1;5976:204:73;;;;;:::i;:::-;;:::i;:::-;;;;11754:6:139;11742:19;;;11724:38;;11781:34;11851:15;;;11846:2;11831:18;;11824:43;11903:15;;11883:18;;;11876:43;11712:2;11697:18;5976:204:73;11524:401:139;4530:49:74;;;;;;;;;;;;4574:5;4530:49;;1252:27:135;;;;;;;;;;-1:-1:-1;1252:27:135;;;;-1:-1:-1;;;;;1252:27:135;;;1876:52;;;;;;;;;;;;1917:11;1876:52;;1055:34;;;;;;;;;;;;1088:1;1055:34;;30440:228:74;;;;;;;;;;-1:-1:-1;30440:228:74;;;;;:::i;:::-;;:::i;:::-;;;12535:14:139;;12528:22;12510:41;;12498:2;12483:18;30440:228:74;12370:187:139;6670:942:138;;;;;;;;;;;;;:::i;7618:1529::-;;;;;;;;;;;;;:::i;26061:4058:74:-;;;;;;;;;;-1:-1:-1;26061:4058:74;;;;;:::i;:::-;;:::i;18447:360::-;;;;;;;;;;-1:-1:-1;18447:360:74;;;;;:::i;:::-;;:::i;3193:186:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1595:52:135:-;;;;;;;;;;-1:-1:-1;1595:52:135;;;;-1:-1:-1;;;;;1595:52:135;;;1319:27;;;;;;;;;;-1:-1:-1;1319:27:135;;;;-1:-1:-1;;;;;1319:27:135;;;4229:53:74;;;;;;;;;;;;4278:4;4229:53;;5349:249:73;;;;;;;;;;-1:-1:-1;5349:249:73;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;17605:528:74:-;;;;;;;;;;-1:-1:-1;17605:528:74;;;;;:::i;:::-;;:::i;30674:338::-;;;;;;;;;;-1:-1:-1;30674:338:74;;;;;:::i;:::-;;:::i;1386:26:135:-;;;;;;;;;;-1:-1:-1;1386:26:135;;;;-1:-1:-1;;;;;1386:26:135;;;1285:27;;;;;;;;;;-1:-1:-1;1285:27:135;;;;-1:-1:-1;;;;;1285:27:135;;;21518:1958:74;;;;;;;;;;-1:-1:-1;21518:1958:74;;;;;:::i;:::-;;:::i;3047:140:94:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1821:48:135:-;;;;;;;;;;;;1862:7;1821:48;;1418:45;;;;;;;;;;-1:-1:-1;1418:45:135;;;;-1:-1:-1;;;;;1418:45:135;;;3532:146:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6186:197:73:-;;;;;;;;;;-1:-1:-1;6186:197:73;;;;;:::i;:::-;;:::i;:::-;;;;21584:34:139;21645:15;;;21627:34;;21709:10;21697:23;;;21692:2;21677:18;;21670:51;21757:15;;21737:18;;;21730:43;;;;21562:2;21547:18;6186:197:73;21374:405:139;30125:187:74;;;;;;;;;;-1:-1:-1;30125:187:74;;;;;:::i;:::-;;:::i;9853:723:138:-;;;;;;;;;;;;;:::i;5389:1275::-;;;;;;;;;;;;;:::i;2030:1630::-;;;;;;;;;;;;;:::i;24702:376:74:-;;;;;;:::i;:::-;;:::i;30318:116::-;;;;;;;;;;-1:-1:-1;30318:116:74;;;;;:::i;:::-;;:::i;2754:147:94:-;;;;;;;;;;;;;:::i;2459:141::-;;;;;;;;;;;;;:::i;20814:147:74:-;;;;;;;;;;-1:-1:-1;20814:147:74;;;;;:::i;:::-;;:::i;4472:52::-;;;;;;;;;;;;4523:1;4472:52;;5786:184:73;;;;;;;;;;-1:-1:-1;5786:184:73;;;;;:::i;:::-;;:::i;:::-;;;;23901:34:139;23889:47;;;23871:66;;23968:2;23953:18;;23946:34;;;;23844:18;5786:184:73;23697:289:139;1243:204:89;;;;;;;;;;;;;:::i;4104:56:74:-;;;;;;;;;;;;4147:13;4104:56;;1516:40:135;;;;;;;;;;-1:-1:-1;1516:40:135;;;;-1:-1:-1;;;;;1516:40:135;;;5621:10886:74;;;;;;;;;;-1:-1:-1;5621:10886:74;;;;;:::i;:::-;;:::i;1470:40:135:-;;;;;;;;;;-1:-1:-1;1470:40:135;;;;-1:-1:-1;;;;;1470:40:135;;;5120:100:74;;;;;;;;;;-1:-1:-1;5120:100:74;;;;;:::i;:::-;5185:16;:28;;;;;;;;;;;;;;;5120:100;2606:142:94;;;;;;;;;;;;;:::i;24121:575:74:-;;;;;;:::i;:::-;;:::i;1404:242:138:-;;;;;;;;;;;;;:::i;1934:56:135:-;;;;;;;;;;;;1975:15;1934:56;;5604:176:73;;;;;;;;;;-1:-1:-1;5604:176:73;;;;;:::i;:::-;;:::i;:::-;;;;25162:34:139;25223:15;;;25205:34;;25275:15;;;;25270:2;25255:18;;25248:43;25125:18;5604:176:73;24978:319:139;1065:26:101;;;;;;;;;;-1:-1:-1;1065:26:101;;;;;;;;19989:464:74;;;;;;;;;;-1:-1:-1;19989:464:74;;;;;:::i;:::-;;:::i;1652:372:138:-;1731:12;;336:42:88;;1705:9:138;;-1:-1:-1;;;;;1715:29:138;;;1731:12;;;;;1715:29;;;;:62;;-1:-1:-1;1764:12:138;;-1:-1:-1;;;;;1748:29:138;;;1764:12;;1748:29;;1715:62;1705:73;;;;;;;;;;;;;12535:14:139;12528:22;12510:41;;12498:2;12483:18;;12370:187;1705:73:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1805:80:138;;;-1:-1:-1;;;;;1106:55:139;;1805:80:138;;;;1088:74:139;;;;1805:80:138;;;;;;;;;;1061:18:139;;;;1805:80:138;;;;;;;;;1828:50;1805:80;;;1789:97;;;;;336:42:88;;-1:-1:-1;1789:15:138;;-1:-1:-1;1789:97:138;;1805:80;1789:97;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1905:11:138;;1896:21;;;;;-1:-1:-1;;;;;1905:11:138;;;1896:21;;;1088:74:139;336:42:88;;-1:-1:-1;1896:8:138;;-1:-1:-1;1061:18:139;;1896:21:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1927:20:138;;-1:-1:-1;;;;;1927:20:138;;-1:-1:-1;1927:30:138;;-1:-1:-1;1966:7:138;1976:4;1982:13;:11;:13::i;:::-;2001:11;;1927:90;;;;;;;;;;-1:-1:-1;;;;;26470:15:139;;;1927:90:138;;;26452:34:139;26502:18;;;26495:34;;;;26565:3;26545:18;;;26538:31;-1:-1:-1;26585:19:139;;;26578:30;;;2001:11:138;;26624:18:139;;;26617:43;26697:3;26676:19;;;26669:32;26717:19;;;26710:30;;;;26757:19;;1927:90:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1652:372;:::o;3666:1717::-;3725:12;3740:13;:11;:13::i;:::-;3763:12;;3789:20;;3763:64;;;;;-1:-1:-1;;;;;3789:20:138;;;3763:64;;;26961:74:139;1862:7:135;27051:18:139;;;27044:34;3725:28:138;;-1:-1:-1;3763:12:138;;;;;;:17;;26934:18:139;;3763:64:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3875:193:138;;;;;;;;;3898:20;;:32;;;;;;3838:34;;-1:-1:-1;3875:193:138;;-1:-1:-1;3875:193:138;;-1:-1:-1;;;;;3898:20:138;;:30;;:32;;;;;;;;;;;;:20;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3875:193;;;;3961:5;;3875:193;;;;;-1:-1:-1;;;;;3961:5:138;3875:193;;1862:7:135;3875:193:138;;;;;;;-1:-1:-1;3875:193:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4174:5;;3838:230;;-1:-1:-1;;;4105:75:138;;1048:1:135;;3838:230:138;;-1:-1:-1;;;;;;;4174:5:138;4105:21;:75::i;:::-;4237:12;;4191:60;;;;;4205:4;4191:60;;;27578:41:139;;;27635:18;;;27628:50;;;27694:18;;;27687:50;;;27753:18;;;27746:50;4237:12:138;;;;-1:-1:-1;;;;;4237:12:138;27812:19:139;;;27805:84;4079:101:138;;-1:-1:-1;336:42:88;;4191:13:138;;27550:19:139;;4191:60:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4321:9:138;;4290:20;;4266:82;;1862:7:135;4644:25:139;;-1:-1:-1;;;;;4321:9:138;;;;-1:-1:-1;4290:20:138;;;-1:-1:-1;4266:82:138;;4632:2:139;4617:18;4266:82:138;;;;;;;4405:9;;4359:57;;;;;4373:4;4359:57;;;27578:41:139;;;27635:18;;;27628:50;;;27694:18;;;27687:50;;;27753:18;;;27746:50;-1:-1:-1;;;;;4405:9:138;;;27812:19:139;;;27805:84;336:42:88;;4359:13:138;;27550:19:139;;4359:57:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4467:20:138;;4431:74;;1862:7:135;4644:25:139;;-1:-1:-1;;;;;4467:20:138;;;;-1:-1:-1;4467:20:138;;-1:-1:-1;4431:74:138;;4632:2:139;4617:18;4431:74:138;;;;;;;4562:9;;4516:57;;;;;4530:4;4516:57;;;27578:41:139;;;27635:18;;;27628:50;;;27694:18;;;27687:50;;;27753:18;;;27746:50;-1:-1:-1;;;;;4562:9:138;;;27812:19:139;;;27805:84;336:42:88;;4516:13:138;;27550:19:139;;4516:57:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4669:20:138;;4588:168;;;1862:7:135;28074:25:139;;;28130:2;28115:18;;28108:34;-1:-1:-1;;;;;4669:20:138;;;;-1:-1:-1;4669:20:138;;-1:-1:-1;4588:168:138;;28047:18:139;4588:168:138;;;;;;;4813:20;;4767:68;;;;;4781:4;4767:68;;;27578:41:139;;;27635:18;;;27628:50;;;27694:18;;;27687:50;;;27753:18;;;27746:50;-1:-1:-1;;;;;4813:20:138;;;27812:19:139;;;27805:84;336:42:88;;4767:13:138;;27550:19:139;;4767:68:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4850:29:138;;4874:4;;-1:-1:-1;4850:29:138;;-1:-1:-1;4850:29:138;;;4890:107;4899:12;;;;;;;;;-1:-1:-1;;;;;4899:12:138;-1:-1:-1;;;;;4899:24:138;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4927:12;;4958:20;;4927:53;;;;;-1:-1:-1;;;;;4958:20:138;;;4927:53;;;1088:74:139;4927:12:138;;;;;;:22;;1061:18:139;;4927:53:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1862:7:135;4890:8:138;:107::i;:::-;5016:9;;:23;;;;;;;;5007:36;;-1:-1:-1;;;;;5016:9:138;;:21;;:23;;;;;;;;;;;;;;:9;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5041:1;5007:8;:36::i;:::-;5063:11;;5054:21;;;;;-1:-1:-1;;;;;5063:11:138;;;5054:21;;;1088:74:139;336:42:88;;5054:8:138;;1061:18:139;;5054:21:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5085:20:138;;5124:12;;5157:11;;5085:88;;;;;-1:-1:-1;;;;;5085:20:138;;;;-1:-1:-1;5085:30:138;;-1:-1:-1;5085:88:138;;:20;5124:12;;;;;;5139:4;;5145:10;;5157:11;;;5085:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5184:96;5193:12;;;;;;;;;-1:-1:-1;;;;;5193:12:138;-1:-1:-1;;;;;5193:24:138;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5221:12;;5252:9;;5221:42;;;;;-1:-1:-1;;;;;5252:9:138;;;5221:42;;;1088:74:139;5221:12:138;;;;;;:22;;1061:18:139;;5221:42:138;942:226:139;5184:96:138;5299:9;;:23;;;;;;;;5290:86;;-1:-1:-1;;;;;5299:9:138;;:21;;:23;;;;;;;;;;;;;;:9;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5324:9;;5352:5;;5324:35;;;;;-1:-1:-1;;;;;5352:5:138;;;5324:35;;;1088:74:139;5324:9:138;;;:19;;1061:18:139;;5324:35:138;942:226:139;5290:86:138;3715:1668;;;3666:1717::o;21149:174:74:-;21226:90;21240:7;21273:11;-1:-1:-1;;;;;21257:29:74;21249:38;;21289:1;21300:3;21306:9;;;;;;;;;;;;21226:13;:90::i;:::-;21149:174;;:::o;23482:633::-;23645:19;23678:9;:32;23688:21;:12;;:19;:21::i;:::-;23678:32;;;;;;;;;;;;;-1:-1:-1;23678:32:74;;;;-1:-1:-1;;;;;23678:32:74;;-1:-1:-1;;23754:36:74;23781:8;23754:26;:36::i;:::-;23721:69;;;;;23801:20;23824:74;;;;;;;;23831:21;:12;;:19;:21::i;:::-;23824:74;;;;;;23854:21;:12;;:19;:21::i;:::-;23824:74;;;;23877:20;:12;;:18;:20::i;:::-;23824:74;;;;23801:97;-1:-1:-1;;;;;;23908:18:74;;;:200;;;;;;;23801:97;23986:26;:12;;:24;:26::i;:::-;24026:19;:12;;:17;:19::i;:::-;24089:9;;;;;;;;-1:-1:-1;24089:9:74;;23908:200;;;;;;;;;;;;;;;24059:16;;23908:200;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23635:480;;;;23482:633;;;;:::o;1048:71:138:-;1099:13;:11;:13::i;:::-;1048:71::o;1125:273::-;1191:20;;:28;;;;;;;;1174:67;;-1:-1:-1;;;;;1191:20:138;;:26;;:28;;;;;;;;;;;;;;:20;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1230:9;;-1:-1:-1;;;;;1230:9:138;1174:8;:67::i;:::-;1260:20;;:32;;;;;;;;1251:65;;-1:-1:-1;;;;;1260:20:138;;:30;;:32;;;;;;;;;;;;;;:20;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1302:12;;-1:-1:-1;;;;;1302:12:138;1251:8;:65::i;:::-;1335:20;;:32;;;;;;;;1326:65;;-1:-1:-1;;;;;1335:20:138;;:30;;:32;;;;;;;;;;;;;;:20;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1377:12;;;;;-1:-1:-1;;;;;1377:12:138;1326:8;:65::i;1653:104:135:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5226:166:74:-;5313:72;5329:12;5343;5371;5357:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5357:27:74;;5313:15;:72::i;2907:134:94:-;2954:33;3018:16;2999:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2999:35:94;;;;;;;;;;;;;;;;;;;;;;;2907:134;:::o;16845:490:74:-;16976:22;17032:8;17018:23;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17018:23:74;-1:-1:-1;17010:31:74;-1:-1:-1;17068:9:74;17051:234;17085:20;17097:8;17085:9;:20;:::i;:::-;17079:26;;:3;:26;;;17051:234;;;17193:14;;;17128:12;17193:14;;;:9;:14;;;;;;;;;17174:56;;-1:-1:-1;;;;;17193:14:74;;;17174:56;;;31868:34:139;;;;17218:4:74;31918:18:139;;;31911:43;17193:14:74;31970:18:139;;;31963:50;17143:88:74;;17155:17;;31780:18:139;;17174:56:74;;;;;;;;;;;;17143:11;:88::i;:::-;17128:103;-1:-1:-1;17128:103:74;17245:5;17251:15;17257:9;17251:3;:15;:::i;:::-;17245:22;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17245:29:74;;;:22;;;;;;;;;;;:29;-1:-1:-1;17107:5:74;;17051:234;;;;17312:16;17322:5;17312:9;:16::i;:::-;16845:490;;;;;:::o;3823:151:94:-;3872:42;3948:19;3926:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3926:41:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3823:151;:::o;25280:469:74:-;25524:18;;;25491:19;25524:18;;;:9;:18;;;;;;-1:-1:-1;;;;;25524:18:74;;25491:19;;25598:39;25628:8;25598:29;:39::i;:::-;25553:84;;;;;;25647:8;-1:-1:-1;;;;;25647:18:74;;25674:5;25686:3;25647:95;25692:5;25699:3;25704:5;25711;25718:12;;25732:9;;;;;;;;;;;;25647:95;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25481:268;;;;25280:469;;;;;;;:::o;3684:133:94:-;3730:33;3794:16;3775:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3775:35:94;;;;;;;;;;;;;;;;;;;;;;3684:133;:::o;3385:141::-;3433:35;3501:18;3480:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3480:39:94;;;;;;;;;;;;;;;;;;;;;;3385:141;:::o;9153:694:138:-;9231:12;9246:13;:11;:13::i;:::-;9269:12;;9295:20;;9269:64;;;;;-1:-1:-1;;;;;9295:20:138;;;9269:64;;;26961:74:139;1862:7:135;27051:18:139;;;27044:34;9231:28:138;;-1:-1:-1;9269:12:138;;;;;;:17;;26934:18:139;;9269:64:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9381:74:138;;;;;;;;1128:1:135;9381:74:138;;9417:5;;-1:-1:-1;;;;;9417:5:138;;;9381:74;;;;;;;;1862:7:135;9381:74:138;;;;-1:-1:-1;9381:74:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9567:5;;9381:74;;-1:-1:-1;;;;9491:82:138;;1048:1:135;;9381:74:138;;9541:8;;1917:11:135;;9567:5:138;9491:21;:82::i;:::-;9600:91;;;9673:8;9600:91;;;33418:34:139;9683:7:138;33468:18:139;;;;33461:43;;;;9600:91:138;;;;;;;;;;33354:18:139;;;;9600:91:138;;;;;;;;;9623:48;9600:91;;;9584:108;;;;;9465;;-1:-1:-1;336:42:88;;9584:15:138;;:108;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9712:11:138;;9703:21;;;;;-1:-1:-1;;;;;9712:11:138;;;9703:21;;;1088:74:139;336:42:88;;-1:-1:-1;9703:8:138;;-1:-1:-1;1061:18:139;;9703:21:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9734:20:138;;9791:12;;9824:11;;9734:106;;;;;-1:-1:-1;;;;;9734:20:138;;;;-1:-1:-1;9734:30:138;;-1:-1:-1;9773:7:138;;9734:106;;:20;9791:12;;;;;9806:4;;9812:10;;9824:11;;;;9734:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9221:626;;;9153:694::o;5976:204:73:-;6068:12;6082:11;6095:13;6127:46;6165:7;;6127:37;:46::i;:::-;6120:53;;;;;;5976:204;;;;;:::o;30440:228:74:-;30592:21;;;30525:9;30592:21;;;:12;:21;;;;;;;:34;;;;;;;;30525:9;30643:14;30592:34;5464:12:132;;;;;5451:10;;;;;;:25;;;;5443:34;;5326:168;30643:14:74;:18;30636:25;;;30440:228;;;;;:::o;6670:942:138:-;6747:12;6762:13;:11;:13::i;:::-;6785:12;;6811:20;;6785:64;;;;;-1:-1:-1;;;;;6811:20:138;;;6785:64;;;26961:74:139;1862:7:135;27051:18:139;;;27044:34;6747:28:138;;-1:-1:-1;6785:12:138;;;;;;:17;;26934:18:139;;6785:64:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6885:12:138;;6908:5;;6885:29;;;;;-1:-1:-1;;;;;6908:5:138;;;6885:29;;;1088:74:139;6859:23:138;;-1:-1:-1;6885:12:138;;;-1:-1:-1;6885:22:138;;1061:18:139;;6885:29:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6859:55;;6925:30;6969:15;;;;;;;;;;;;;;;;;6986:1;6958:30;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6925:63;;6998:23;7024:72;1048:1:135;7055:17:138;1862:7:135;7090:5:138;;;;;;;;;-1:-1:-1;;;;;7090:5:138;7024:21;:72::i;:::-;7153:20;;7107:68;;;;;7121:4;7107:68;;;27578:41:139;;;27635:18;;;27628:50;;;27694:18;;;27687:50;;;27753:18;;;27746:50;-1:-1:-1;;;;;7153:20:138;;;27812:19:139;;;27805:84;6998:98:138;;-1:-1:-1;336:42:88;;7107:13:138;;27550:19:139;;7107:68:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7190:33:138;;7218:4;;-1:-1:-1;7190:33:138;;-1:-1:-1;7190:33:138;;;7243:11;;7234:21;;;;;-1:-1:-1;;;;;7243:11:138;;;7234:21;;;1088:74:139;336:42:88;;7234:8:138;;1061:18:139;;7234:21:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7265:20:138;;7322:12;;7355:11;;7265:106;;;;;-1:-1:-1;;;;;7265:20:138;;;;-1:-1:-1;7265:30:138;;-1:-1:-1;7304:7:138;;7265:106;;:20;7322:12;;;;;7337:4;;7343:10;;7355:11;;;;7265:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7413:12:138;;7382:45;;-1:-1:-1;1048:1:135;;-1:-1:-1;;;;;;7413:12:138;;-1:-1:-1;7382:13:138;:45::i;:::-;7459:12;;7482:5;;7459:29;;;;;-1:-1:-1;;;;;7482:5:138;;;7459:29;;;1088:74:139;7437:168:138;;7459:12;;;;;:22;;1061:18:139;;7459:29:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7502:32;1862:7:135;7502:15:138;:32;:::i;:::-;7437:168;;;;;;;;;;;;;;;;;:8;:168::i;:::-;6737:875;;;;6670:942::o;7618:1529::-;7684:12;7699:13;:11;:13::i;:::-;7722:12;;7748:20;;7722:64;;;;;-1:-1:-1;;;;;7748:20:138;;;7722:64;;;26961:74:139;1862:7:135;27051:18:139;;;27044:34;7684:28:138;;-1:-1:-1;7722:12:138;;;;;;:17;;26934:18:139;;7722:64:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7822:12:138;;7845:5;;7822:29;;;;;-1:-1:-1;;;;;7845:5:138;;;7822:29;;;1088:74:139;7796:23:138;;-1:-1:-1;7822:12:138;;;-1:-1:-1;7822:22:138;;1061:18:139;;7822:29:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7899:231;;;;;;;;;1128:1:135;7899:231:138;;7960:5;;7796:55;;-1:-1:-1;;;7899:231:138;;;;-1:-1:-1;;;;;7960:5:138;7899:231;;;;1862:7:135;7899:231:138;;;;1862:7:135;8025:1:138;8008:18;;;;:::i;:::-;7899:231;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7862:268;;8141:27;8182:17;8171:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;8141:59;;8210:23;8236:69;1048:1:135;8267:14:138;1862:7:135;8299:5:138;;;;;;;;;-1:-1:-1;;;;;8299:5:138;8236:21;:69::i;:::-;8362:20;;8316:68;;;;;8330:4;8316:68;;;27578:41:139;;;27635:18;;;27628:50;;;27694:18;;;27687:50;;;27753:18;;;27746:50;-1:-1:-1;;;;;8362:20:138;;;27812:19:139;;;27805:84;8210:95:138;;-1:-1:-1;336:42:88;;8316:13:138;;27550:19:139;;8316:68:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8399:33:138;;8427:4;;-1:-1:-1;8399:33:138;;-1:-1:-1;8399:33:138;;;8443:107;8452:12;;;;;;;;;-1:-1:-1;;;;;8452:12:138;-1:-1:-1;;;;;8452:24:138;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8443:107;8569:9;;:23;;;;;;;;8560:36;;-1:-1:-1;;;;;8569:9:138;;:21;;:23;;;;;;;;;;;;;;:9;:23;;;;;;;;;;;;;;8560:36;8616:11;;8607:21;;;;;-1:-1:-1;;;;;8616:11:138;;;8607:21;;;1088:74:139;336:42:88;;8607:8:138;;1061:18:139;;8607:21:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8638:20:138;;8695:12;;8728:11;;8638:106;;;;;-1:-1:-1;;;;;8638:20:138;;;;-1:-1:-1;8638:30:138;;-1:-1:-1;8677:7:138;;8638:106;;:20;8695:12;;;;;8710:4;;8716:10;;8728:11;;;;8638:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8858:12:138;;8827:45;;-1:-1:-1;1048:1:135;;-1:-1:-1;;;;;;8858:12:138;;-1:-1:-1;8827:13:138;:45::i;:::-;8904:12;;8927:5;;8904:29;;;;;-1:-1:-1;;;;;8927:5:138;;;8904:29;;;1088:74:139;8882:168:138;;8904:12;;;;;:22;;1061:18:139;;8904:29:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8947:32;1862:7:135;8947:15:138;:32;:::i;8882:168::-;9069:9;;:23;;;;;;;;9060:80;;-1:-1:-1;;;;;9069:9:138;;:21;;:23;;;;;;;;;;;;;;:9;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9094:1;9060:80;;;;;;;;;;;;;;;;;:8;:80::i;:::-;7674:1473;;;;;7618:1529::o;26061:4058:74:-;26164:13;26180:21;:12;;:19;:21::i;:::-;26244:17;;;26211:19;26244:17;;;:9;:17;;;;;;26164:37;;-1:-1:-1;;;;;;26244:17:74;;;;;26297:26;26324;:12;;:24;:26::i;:::-;26352:21;:12;;:19;:21::i;:::-;26297:77;;;;;;;;;;-1:-1:-1;;;;;35184:55:139;;;26297:77:74;;;35166:74:139;26297:77:74;35276:23:139;35256:18;;;35249:51;35139:18;;26297:77:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26272:102;;;26384:25;26412:21;:12;;:19;:21::i;:::-;26384:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26465:33:74;;;;;;;;26384:49;;-1:-1:-1;26384:49:74;;-1:-1:-1;;;;;26465:31:74;;;-1:-1:-1;26465:31:74;;-1:-1:-1;26465:33:74;;;;;-1:-1:-1;26465:33:74;;;;;;;:31;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26444:54;;;;26512:5;:10;;26521:1;26512:10;26508:3605;;26613:10;26576:20;-1:-1:-1;;;;;26660:16:74;;;26677:21;:12;;:19;:21::i;:::-;26700:26;:12;;:24;:26::i;:::-;26660:70;;;;;;;;;;;36767:15:139;;;;26660:70:74;;;36749:34:139;-1:-1:-1;;;;;36819:55:139;36799:18;;;36792:83;26728:1:74;36891:18:139;;;36884:43;36693:18;;26660:70:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26660:70:74;;;;;;;;;;;;:::i;:::-;26638:92;;26763:7;26788:6;26777:31;;;;;;;;;;;;:::i;:::-;:44;;;26822:1;26777:47;;;;;;;;:::i;:::-;;;;;;;26763:62;;26840:19;26872:22;:12;;:20;:22::i;:::-;26862:33;;;;;;;:::i;:::-;;;;;;;;26840:55;;26930:23;26967:27;27037:29;;;27084:12;27114:11;27143:3;26997:163;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26997:163:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;27207:16:74;;;27224:6;27240;26997:163;27265:22;:15;27283:4;27265:22;:::i;:::-;27207:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27192:96;;27319:10;27324:4;27319;:10::i;:::-;27388:21;;;27407:1;27388:21;;;;;;;;;27306:23;;-1:-1:-1;27357:28:74;;-1:-1:-1;27388:21:74;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27388:21:74;;;;;;;;;;;;;;;27357:52;;27435:89;;;;;;;;27448:6;27435:89;;;;;;27464:6;-1:-1:-1;;;;;27435:89:74;;;;;27473:14;27435:89;;;;27489:15;27507:4;27489:22;;;;:::i;:::-;27435:89;;;;27513:10;27435:89;;;27423:6;27430:1;27423:9;;;;;;;;:::i;:::-;;;;;;;;;;:101;27538:19;;;;;-1:-1:-1;;;;;27538:11:74;;;;;:19;;27550:6;;27538:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27607:21;27671:41;;;27730:12;27760:11;27631:154;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;27631:154:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;27832:16:74;;;27849:6;27865;27631:154;27884:22;:15;27902:4;27884:22;:::i;:::-;27832:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27817:90;;27938:10;27943:4;27938;:10::i;:::-;27925:23;;27799:164;27988:83;;;;;;;;28001:6;27988:83;;;;;;28017:6;-1:-1:-1;;;;;27988:83:74;;;;;28026:8;27988:83;;;;28036:15;28054:4;28036:22;;;;:::i;:::-;27988:83;;;;28060:10;27988:83;;;27976:6;27983:1;27976:9;;;;;;;;:::i;:::-;;;;;;;;;;:95;28085:19;;;;;-1:-1:-1;;;;;28085:11:74;;;;;:19;;28097:6;;28085:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26524:1591;;;;;;;;26508:3605;;;28125:5;:11;;28134:2;28125:11;28121:1992;;28193:10;28152:18;-1:-1:-1;;;;;28241:16:74;;;28258:21;:12;;:19;:21::i;:::-;28281:26;:12;;:24;:26::i;:::-;28241:70;;;;;;;;;;;36767:15:139;;;;28241:70:74;;;36749:34:139;-1:-1:-1;;;;;36819:55:139;36799:18;;;36792:83;28309:1:74;36891:18:139;;;36884:43;36693:18;;28241:70:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28241:70:74;;;;;;;;;;;;:::i;:::-;28219:92;;28355:7;28380:6;28369:35;;;;;;;;;;;;:::i;:::-;:48;;;28418:1;28369:51;;;;;;;;:::i;:::-;;;;;;;28355:66;;28436:19;28468:22;:12;;:20;:22::i;:::-;28458:33;;;;;;;:::i;:::-;;;;;;;;28436:55;;28505:27;28562:19;:12;;:17;:19::i;:::-;28583:16;28545:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28535:66;;;;;;28505:96;;28615:23;28671:27;28745;;;28794:12;28828:11;28861:19;28701:197;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;28701:197:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;28937:16:74;;;28954:6;28970;28701:197;28995:22;:15;29013:4;28995:22;:::i;:::-;28937:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28916:102;;29049:16;29054:10;29049:4;:16::i;:::-;29114:21;;;29133:1;29114:21;;;;;;;;;29036:29;;-1:-1:-1;29083:28:74;;29114:21;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29114:21:74;;;;;;;;;;;;;;;29083:52;;29165:89;;;;;;;;29178:6;29165:89;;;;;;29194:6;-1:-1:-1;;;;;29165:89:74;;;;;29203:14;29165:89;;;;29219:15;29237:4;29219:22;;;;:::i;:::-;29165:89;;;;29243:10;29165:89;;;29153:6;29160:1;29153:9;;;;;;;;:::i;:::-;;;;;;;;;;:101;29272:19;;;;;-1:-1:-1;;;;;29272:11:74;;;;;:19;;29284:6;;29272:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28653:653;;;29373:21;29441:39;;;29502:12;29536:11;29569:19;29397:209;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;29397:209:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;29645:16:74;;;29662:6;29678;29397:209;29697:22;:15;29715:4;29697:22;:::i;:::-;29645:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29624:96;;29751:16;29756:10;29751:4;:16::i;:::-;29816:21;;;29835:1;29816:21;;;;;;;;;29738:29;;-1:-1:-1;29785:28:74;;29816:21;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29816:21:74;;;;;;;;;;;;;;;29785:52;;29867:83;;;;;;;;29880:6;29867:83;;;;;;29896:6;-1:-1:-1;;;;;29867:83:74;;;;;29905:8;29867:83;;;;29915:15;29933:4;29915:22;;;;:::i;:::-;29867:83;;;;29939:10;29867:83;;;29855:6;29862:1;29855:9;;;;;;;;:::i;:::-;;;;;;;;;;:95;29968:19;;;;;-1:-1:-1;;;;;29968:11:74;;;;;:19;;29980:6;;29968:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29355:647;;;28138:1874;;;;;;28121:1992;;;30032:70;;;;;-1:-1:-1;;;;;30032:56:74;;;;;:70;;30089:12;;;;30032:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26154:3965;;;;;26061:4058;;;:::o;18447:360::-;18542:9;18537:264;18561:5;:12;18557:1;:16;18537:264;;;18594:29;18646:5;18652:1;18646:8;;;;;;;;:::i;:::-;;;;;;;18594:61;;18674:9;18669:122;18693:8;:15;18689:1;:19;18669:122;;;18733:9;-1:-1:-1;;;;;18733:24:74;;18758:8;18767:1;18758:11;;;;;;;;:::i;:::-;;;;;;;;;;;18733:43;;;;;;;;;;;45482:23:139;;;18733:43:74;;;45464:42:139;18771:4:74;45522:18:139;;;45515:50;45437:18;;18733:43:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18710:3:74;;;;;-1:-1:-1;18669:122:74;;-1:-1:-1;18669:122:74;;-1:-1:-1;;18575:3:74;;18537:264;;3193:186:94;3249:56;3346:26;3317:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5349:249:73;5464:16;5482:21;;5505:14;5538:53;5573:8;;5583:7;5538:34;:53::i;:::-;5531:60;;;;;;;;5349:249;;;;;;;:::o;17605:528:74:-;17680:12;;17665;17702:425;17726:4;17722:1;:8;17702:425;;;17751:22;17789:5;17795:1;17789:8;;;;;;;;:::i;:::-;;;;;;;17751:47;;17817:9;17812:305;17836:4;17832:1;:8;17812:305;;;17865:20;;;17877:8;17865:20;17903:23;17942:5;17948:1;17942:8;;;;;;;;:::i;:::-;;;;;;;17903:48;;17969:16;17989:10;-1:-1:-1;;;;;17989:19:74;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17988:27:74;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17969:48;;18035:9;-1:-1:-1;;;;;18035:17:74;;18053:9;18064:37;18089:10;-1:-1:-1;;;;;31116:23:74;;31018:129;18064:37;18035:67;;;;;;;;;;;46051:23:139;;;;18035:67:74;;;46033:42:139;46091:18;;;46084:34;46006:18;;18035:67:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17847:270;;17812:305;17842:3;;17812:305;;;-1:-1:-1;;17732:3:74;;17702:425;;30674:338;30845:21;;;30799:43;30845:21;;;:12;:21;;;;;;;:34;;;;;;;;30763:24;;30893:14;30845:34;5464:12:132;;;;;5451:10;;;;;;:25;;;;5443:34;;5326:168;30893:14:74;:18;30889:117;;;30927:12;30942;:5;:10;:12::i;:::-;30982:13;;;;:7;:13;;;;;30968:27;;30927;;-1:-1:-1;30982:13:74;30968:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30913:93;30889:117;30789:223;30674:338;;;;:::o;21518:1958::-;21722:18;;;21752:1;21722:18;;;:9;:18;;;;;;-1:-1:-1;;;;;21722:18:74;21714:72;;;;;;;46331:2:139;21714:72:74;;;46313:21:139;46370:2;46350:18;;;46343:30;46409:29;46389:18;;;46382:57;46456:18;;21714:72:74;;;;;;;;;21843:21;;;21797:43;21843:21;;;:12;:21;;;;;;;:34;;;;;;;;;21916:14;21843:34;5464:12:132;;;;;5451:10;;;;;;:25;;;;5443:34;;5326:168;21916:14:74;21887:43;;21940:23;21977:13;21994:1;21977:18;21973:201;;-1:-1:-1;5464:12:132;;;;;;5451:10;;;;;;:25;;;;5443:34;21973:201:74;;;22113:13;22092:18;:34;:71;;22145:18;22092:71;;;22129:13;22092:71;22074:89;;21973:201;22190:19;;22183:1287;;22225:17;;;;:::i;:::-;;;;22290:12;22305:15;:5;:13;:15::i;:::-;22334:24;22361:13;;;:7;:13;;;;;22334:40;;22290:30;;-1:-1:-1;22334:24:74;;:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22388:34:74;;;;;22334:40;;-1:-1:-1;22388:4:74;;:15;;-1:-1:-1;22388:34:74;;-1:-1:-1;22334:40:74;;-1:-1:-1;22417:4:74;;22388:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22436:50:74;;;;;:4;;-1:-1:-1;22436:19:74;;-1:-1:-1;22436:50:74;;22456:11;;22469:16;;22436:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22501:20:74;22524:19;;;:13;:19;;;;;22501:42;;:20;;-1:-1:-1;22524:19:74;22501:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22561:71;22583:7;363:1:13;22561:21:74;:71::i;:::-;22557:369;;;22653:14;22669:16;22689:39;22720:7;22689:30;:39::i;:::-;22828:28;;22652:76;;-1:-1:-1;22652:76:74;-1:-1:-1;22652:76:74;;22746:10;;-1:-1:-1;;;;;22828:7:74;;;22652:76;;22746:10;22828:28;22746:10;22828:28;22652:76;22828:7;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22812:44;;;22882:4;22874:37;;;;;;;47480:2:139;22874:37:74;;;47462:21:139;47519:2;47499:18;;;47492:30;47558:22;47538:18;;;47531:50;47598:18;;22874:37:74;47278:344:139;22874:37:74;22634:292;;;;22557:369;22943:69;22965:7;306:1:13;22943:21:74;:69::i;:::-;22939:144;;;23032:36;;;;;:4;;:14;;:36;;23047:11;;23060:7;;23032:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22939:144;23100:66;23122:7;533:1:13;23100:21:74;:66::i;:::-;23096:163;;;23186:58;;;;;:4;;:18;;:58;;23205:11;;23218:7;;23227:16;;23186:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23096:163;-1:-1:-1;;;;;23276:23:74;;;;;;:96;;;23303:69;23325:7;418:1:13;23303:21:74;:69::i;:::-;23272:188;;;23392:53;;;;;:4;;:14;;:53;;23407:11;;23420:7;;23429:4;;23435:9;;23392:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23272:188;22211:1259;;;22183:1287;;3047:140:94;3095:34;3162:18;3141:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3532:146;3580:40;3653:18;3632:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3632:39:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6186:197:73;6275:11;6288;6301:13;6333:43;6368:7;;6333:34;:43::i;30125:187:74:-;30211:18;30232;:11;;:16;:18::i;:::-;30211:39;;30282:4;30268:10;:18;30260:45;;;;;;;48946:2:139;30260:45:74;;;48928:21:139;48985:2;48965:18;;;48958:30;49024:16;49004:18;;;48997:44;49058:18;;30260:45:74;48744:338:139;9853:723:138;9945:12;9960:13;:11;:13::i;:::-;9983:12;;10009:20;;9983:64;;;;;-1:-1:-1;;;;;10009:20:138;;;9983:64;;;26961:74:139;1862:7:135;27051:18:139;;;27044:34;9945:28:138;;-1:-1:-1;9983:12:138;;;;;;:17;;26934:18:139;;9983:64:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10095:74:138;;;;;;;;1128:1:135;10095:74:138;;10131:5;;-1:-1:-1;;;;;10131:5:138;10095:74;;;;;;;1862:7:135;10095:74:138;;;;;;-1:-1:-1;10095:74:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;10205:75:138;;1048:1:135;;10095:74:138;;-1:-1:-1;;1862:7:135;10205:21:138;:75::i;:::-;10307:78;;;10366:9;10307:78;;;49351:42:139;10377:1:138;49409:18:139;;;49402:45;-1:-1:-1;49463:18:139;;;49456:45;;;49517:18;;;;49510:45;;;;10307:78:138;;;;;;;;;;49323:19:139;;;;10307:78:138;;;;;;;;;10330:34;10307:78;;;10291:95;;;;;10179:101;;-1:-1:-1;336:42:88;;10291:15:138;;:95;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10443:11:138;;10434:21;;;;;-1:-1:-1;;;;;10443:11:138;;;10434:21;;;1088:74:139;336:42:88;;-1:-1:-1;10434:8:138;;-1:-1:-1;1061:18:139;;10434:21:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10465:20:138;;10520:12;;10553:11;;10465:104;;;;;-1:-1:-1;;;;;10465:20:138;;;;-1:-1:-1;10465:30:138;;-1:-1:-1;10465:20:138;;:104;;:20;10520:12;;;;;10535:4;;10541:10;;10553:11;;;;10465:104;;;:::i;5389:1275::-;5474:12;5489:13;:11;:13::i;:::-;5512:12;;5538:20;;5512:64;;;;;-1:-1:-1;;;;;5538:20:138;;;5512:64;;;26961:74:139;1862:7:135;27051:18:139;;;27044:34;5474:28:138;;-1:-1:-1;5512:12:138;;;;;;:17;;26934:18:139;;5512:64:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5612:12:138;;5635:5;;5612:29;;;;;-1:-1:-1;;;;;5635:5:138;;;5612:29;;;1088:74:139;5586:23:138;;-1:-1:-1;5612:12:138;;;-1:-1:-1;5612:22:138;;1061:18:139;;5612:29:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5586:55;;5652:34;5689:193;;;;;;;;5712:20;;;;;;;;;-1:-1:-1;;;;;5712:20:138;-1:-1:-1;;;;;5712:30:138;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5689:193;;;;5775:5;;5689:193;;;;;-1:-1:-1;;;;;5775:5:138;5689:193;;1862:7:135;5689:193:138;;;;;;;-1:-1:-1;5689:193:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5992:5;;5652:230;;-1:-1:-1;;;5919:79:138;;1048:1:135;;5652:230:138;;1048:1:135;;-1:-1:-1;;;;;5992:5:138;5919:21;:79::i;2030:1630::-;2090:12;2105:13;:11;:13::i;:::-;2128:12;;2154:20;;2128:64;;;;;-1:-1:-1;;;;;2154:20:138;;;2128:64;;;26961:74:139;1862:7:135;27051:18:139;;;27044:34;2090:28:138;;-1:-1:-1;2128:12:138;;;;;;:17;;26934:18:139;;2128:64:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2240:74:138;;;;;;;;1128:1:135;2240:74:138;;2276:5;;-1:-1:-1;;;;;2276:5:138;2240:74;;;;;;;1862:7:135;2240:74:138;;;;;;-1:-1:-1;2240:74:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;2351:81:138;;1048:1:135;;2240:74:138;;1862:7:135;;2351:21:138;:81::i;:::-;2489:12;;2443:60;;;;;2457:4;2443:60;;;27578:41:139;;;27635:18;;;27628:50;;;27694:18;;;27687:50;;;27753:18;;;27746:50;2489:12:138;;;;-1:-1:-1;;;;;2489:12:138;27812:19:139;;;27805:84;2325:107:138;;-1:-1:-1;336:42:88;;2443:13:138;;27550:19:139;;2443:60:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2573:9:138;;2542:20;;2518:82;;1862:7:135;4644:25:139;;-1:-1:-1;;;;;2573:9:138;;;;-1:-1:-1;2542:20:138;;;-1:-1:-1;2518:82:138;;4632:2:139;4617:18;2518:82:138;;;;;;;2657:9;;2611:57;;;;;2625:4;2611:57;;;27578:41:139;;;27635:18;;;27628:50;;;27694:18;;;27687:50;;;27753:18;;;27746:50;-1:-1:-1;;;;;2657:9:138;;;27812:19:139;;;27805:84;336:42:88;;2611:13:138;;27550:19:139;;2611:57:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2719:20:138;;2683:74;;1862:7:135;4644:25:139;;-1:-1:-1;;;;;2719:20:138;;;;-1:-1:-1;2719:20:138;;-1:-1:-1;2683:74:138;;4632:2:139;4617:18;2683:74:138;;;;;;;2814:9;;2768:57;;;;;2782:4;2768:57;;;27578:41:139;;;27635:18;;;27628:50;;;27694:18;;;27687:50;;;27753:18;;;27746:50;-1:-1:-1;;;;;2814:9:138;;;27812:19:139;;;27805:84;336:42:88;;2768:13:138;;27550:19:139;;2768:57:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2921:20:138;;2840:168;;;1862:7:135;28074:25:139;;;28130:2;28115:18;;28108:34;-1:-1:-1;;;;;2921:20:138;;;;-1:-1:-1;2921:20:138;;-1:-1:-1;2840:168:138;;28047:18:139;2840:168:138;;;;;;;3065:20;;3019:68;;;;;3033:4;3019:68;;;27578:41:139;;;27635:18;;;27628:50;;;27694:18;;;27687:50;;;27753:18;;;27746:50;-1:-1:-1;;;;;3065:20:138;;;27812:19:139;;;27805:84;336:42:88;;3019:13:138;;27550:19:139;;3019:68:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3102:29:138;;3126:4;;-1:-1:-1;3102:29:138;;-1:-1:-1;3102:29:138;;;3142:107;3151:12;;;;;;;;;-1:-1:-1;;;;;3151:12:138;-1:-1:-1;;;;;3151:24:138;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3142:107;3268:9;;:23;;;;;;;;3259:36;;-1:-1:-1;;;;;3268:9:138;;:21;;:23;;;;;;;;;;;;;;:9;:23;;;;;;;;;;;;;;3259:36;3315:11;;3306:21;;;;;-1:-1:-1;;;;;3315:11:138;;;3306:21;;;1088:74:139;336:42:88;;3306:8:138;;1061:18:139;;3306:21:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3337:20:138;;3394:12;;3427:11;;3337:106;;;;;-1:-1:-1;;;;;3337:20:138;;;;-1:-1:-1;3337:30:138;;-1:-1:-1;3376:7:138;;3337:106;;:20;3394:12;;;;;3409:4;;3415:10;;3427:11;;;;3337:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3454:96;3463:12;;;;;;;;;-1:-1:-1;;;;;3463:12:138;-1:-1:-1;;;;;3463:24:138;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3454:96;3569:9;;:23;;;;;;;;3560:93;;-1:-1:-1;;;;;3569:9:138;;:21;;:23;;;;;;;;;;;;;;:9;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3594:9;;3622:12;;3594:42;;;;;-1:-1:-1;;;;;3622:12:138;;;3594:42;;;1088:74:139;3594:9:138;;;:19;;1061:18:139;;3594:42:138;942:226:139;24702:376:74;24872:4;:14;24900:21;:12;;:19;:21::i;:::-;24935:26;:12;;:24;:26::i;:::-;24975:8;24997:5;25016:9;25039:22;:12;;:20;:22::i;:::-;24872:199;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24702:376;;;;;:::o;30318:116::-;30418:8;30382:9;:25;30392:8;-1:-1:-1;;;;;30392:12:74;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30382:25;;;;;;;;;;;;;-1:-1:-1;30382:25:74;:45;;;;-1:-1:-1;;;;;30382:45:74;;;;;;;;;;-1:-1:-1;30318:116:74:o;2754:147:94:-;2803:40;2876:18;2855:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2855:39:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2459:141;2508:34;2575:18;2554:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20814:147:74;20891:63;20905:7;20914:11;20927:1;20938:3;20944:9;;;;;;;;;;;;20891:13;:63::i;5786:184:73:-;5865:14;5881:16;5916:47;5955:7;;5916:38;:47::i;:::-;5909:54;;;;5786:184;;;;;;:::o;1243:204:89:-;1302:7;;1282:4;;1302:7;;1298:143;;;-1:-1:-1;1332:7:89;;;;;1243:204::o;1298:143::-;1377:39;;;;;:7;:39;;;26961:74:139;;;1398:17:89;27051:18:139;;;27044:34;1428:1:89;;1377:7;;26934:18:139;;1377:39:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;1370:60;;1243:204;:::o;5621:10886:74:-;5824:12;5807:30;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5807:30:74;-1:-1:-1;5778:59:74;;;;:13;;:59;;;;;;:::i;:::-;;5884:12;5871:26;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5871:26:74;-1:-1:-1;5847:50:74;;;;:21;;:50;;;;;;:::i;:::-;;5946:12;5932:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5932:27:74;-1:-1:-1;5907:52:74;;;;:22;;:52;;;;;;:::i;:::-;;6011:12;5997:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5997:27:74;-1:-1:-1;5969:55:74;;;;:25;;:55;;;;;;:::i;:::-;;6073:12;6059:27;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6059:27:74;-1:-1:-1;6034:52:74;;;;:22;;:52;;;;;;:::i;:::-;-1:-1:-1;6120:16:74;;;6134:1;6120:16;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6096:40:74;;;;:21;;-1:-1:-1;6096:40:74;;;;:::i;:::-;-1:-1:-1;6173:10:74;;;;;6181:1;6173:10;;;4644:25:139;336:42:88;;6173:7:74;;4617:18:139;;6173:10:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6146:21;:24;;6168:1;;6146:24;;;;:::i;:::-;;;;;;;;;:37;;;;-1:-1:-1;;;;;6146:37:74;;;;;;;;;;;6240:552;6262:12;6258:16;;:1;:16;;;6240:552;;;6299:10;6312:5;:1;6316;6312:5;:::i;:::-;6299:18;;;;6335:19;6357:20;6378:1;6357:23;;;;;;;;;;:::i;:::-;;;;;;;6335:45;;6425:3;6398:13;:21;;6420:1;6398:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;6473:1;-1:-1:-1;;;;;6450:25:74;:11;-1:-1:-1;;;;;6450:25:74;;6446:267;;6546:3;6559:4;6531:34;;;;;:::i;:::-;51051:10:139;51039:23;;;51021:42;;-1:-1:-1;;;;;51099:55:139;51094:2;51079:18;;51072:83;51009:2;50994:18;6531:34:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6499:13:74;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;:66;;;;;-1:-1:-1;;;;;6499:66:74;;;;;-1:-1:-1;;;;;6499:66:74;;;;;;6446:267;;;6662:3;6675:4;6682:11;6644:50;;;;;:::i;:::-;51396:10:139;51384:23;;;51366:42;;-1:-1:-1;;;;;51505:15:139;;;51500:2;51485:18;;51478:43;51557:15;51552:2;51537:18;;51530:43;51354:2;51339:18;6644:50:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6612:13:74;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;:82;;;;;-1:-1:-1;;;;;6612:82:74;;;;;-1:-1:-1;;;;;6612:82:74;;;;;;6446:267;6730:47;6747:13;:26;;6774:1;6747:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6747:29:74;6730:16;:47::i;:::-;-1:-1:-1;;6276:3:74;;6240:552;;;;6918:4;6896:28;;;;;:::i;:::-;-1:-1:-1;;;;;1106:55:139;;;1088:74;;1076:2;1061:18;6896:28:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6870:23:74;:54;;;;-1:-1:-1;;;;;6870:54:74;;;;;;;;;;-1:-1:-1;6935:8866:74;6957:12;6953:16;;:1;:16;;;6935:8866;;;7010:26;6994:12;:42;;;;;;;;:::i;:::-;;6990:8801;;7056:20;7087:13;:26;;7114:1;7087:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7087:29:74;7056:61;;7199:4;7226:12;4147:13;4217:6;7155:185;;;;;:::i;:::-;-1:-1:-1;;;;;52099:15:139;;;52081:34;;52151:15;;;;52146:2;52131:18;;52124:43;52198:2;52183:18;;52176:34;52241:2;52226:18;;52219:34;52007:3;51992:19;7155:185:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7136:8:74;:204;;;;-1:-1:-1;;;;;7136:204:74;;;;;;;;;;7380:31;;7398:12;;7380:31;;;:::i;:::-;-1:-1:-1;;;;;1106:55:139;;;1088:74;;1076:2;1061:18;7380:31:74;;;;;;;;;;;;;;;;;;;;;;;7358:8;:19;;;:53;;;;;-1:-1:-1;;;;;7358:53:74;;;;;-1:-1:-1;;;;;7358:53:74;;;;;;7493:4;7520:12;4147:13;4217:6;7448:186;;;;;:::i;:::-;-1:-1:-1;;;;;52099:15:139;;;52081:34;;52151:15;;;;52146:2;52131:18;;52124:43;52198:2;52183:18;;52176:34;52241:2;52226:18;;52219:34;52007:3;51992:19;7448:186:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7429:16:74;:205;;;;-1:-1:-1;;;;;7429:205:74;;;;;;;;;;7652:13;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;7706:8;:16;7652:72;;;;;-1:-1:-1;;;;;7706:16:74;;;7652:72;;;1088:74:139;7652:29:74;;;:45;;1061:18:139;;7652:72:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7742:13;:26;;7769:1;7742:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;7796:19;;7742:75;;;;;-1:-1:-1;;;;;7796:19:74;;;7742:75;;;1088:74:139;7742:29:74;;;:45;;1061:18:139;;7742:75:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7835:13;:26;;7862:1;7835:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;7889:16;;7835:72;;;;;-1:-1:-1;;;;;7889:16:74;;;7835:72;;;1088:74:139;7835:29:74;;;:45;;1061:18:139;;7835:72:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7961:8:74;:16;7925:22;:25;;-1:-1:-1;;;;;7961:16:74;;;;-1:-1:-1;7925:22:74;-1:-1:-1;7925:25:74;;;;;;;;;;:::i;:::-;;;;;;;;;;:53;;;;-1:-1:-1;;;;;7925:53:74;;;;;;8035:19;;7996:25;:28;;8035:19;;;;;7996:25;:28;;;;;;;;;;:::i;:::-;;;;;;;;;;:59;;;;-1:-1:-1;;;;;7996:59:74;;;;;;8109:16;;8073:22;:25;;8109:16;;;;;8073:22;:25;;;;;;;;;;:::i;:::-;;;;;;;;;:53;;-1:-1:-1;;;;;8073:53:74;;;;;;;;;;;;;;;8193:16;;;-1:-1:-1;8193:16:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8193:16:74;8167:42;;8251:4;8231:6;8238:1;8231:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8231:25:74;;;;:9;;;;;;;;;;:25;8310:16;;;8324:1;8310:16;;;;;;;;;8279:28;;8310:16;;8324:1;8310:16;;;;;;;-1:-1:-1;;8373:8:74;:16;8348:14;;;;-1:-1:-1;;;;;;8373:16:74;;8348:14;;-1:-1:-1;8373:16:74;;8348:14;;;;:::i;:::-;-1:-1:-1;;;;;8348:42:74;;;:14;;;;;;;;;:42;8437:19;;8412:14;;8437:19;;;8412:11;;8437:19;;8412:14;;;;;;:::i;:::-;-1:-1:-1;;;;;8412:45:74;;;:14;;;;;;;;;:45;8504:16;;8479:14;;8504:16;;;8479:11;;8504:16;;8479:14;;;;;;:::i;:::-;-1:-1:-1;;;;;8479:42:74;;;:14;;;;;;;;;:42;8723:23;;8564:276;;8602:12;;8648:3;;8678:11;;8723:23;;;8781:4;;8812:6;;8564:276;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8544:17:74;:296;;;;-1:-1:-1;;;;;8544:296:74;;;;;;;;;;8905:21;:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;8886:44;;;;;:::i;:::-;4475:10:139;4463:23;;;4445:42;;4433:2;4418:18;8886:44:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8863:20:74;:67;;;;-1:-1:-1;;;;;8863:67:74;;;;;;;;;8952:17;;:64;;;;;;;;1088:74:139;;;;8952:17:74;;;;:33;;1061:18:139;;8952:64:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9087:13;:21;;9109:1;9087:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;9137:5;:1;9141;9137:5;:::i;:::-;9213:23;;9054:311;;9168:11;;-1:-1:-1;;;;;9213:23:74;;9263:21;;9213:23;;9337:6;;9054:311;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9039:12:74;:326;;;;-1:-1:-1;;;;;9039:326:74;;;;;;;;;;9419:21;:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;9445:4;9405:45;;;;;:::i;:::-;46063:10:139;46051:23;;;46033:42;;46106:2;46091:18;;46084:34;46021:2;46006:18;9405:45:74;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9387:15:74;:63;;;;-1:-1:-1;;;;;9387:63:74;;;;;;;;;9472:96;;;;;4343:4;9472:96;;;55214:34:139;;;55264:18;;;55257:43;4461:5:74;55316:18:139;;;55309:47;9472:26:74;;55136:18:139;;9472:96:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9590:12:74;;9627:15;;9590:54;;;;;-1:-1:-1;;;;;9627:15:74;;;9590:12;:54;;1088:74:139;9590:12:74;;;-1:-1:-1;9590:28:74;;-1:-1:-1;1061:18:139;;9590:54:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8145:1518;;9681:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;9681:32:74;9798:16;:12;9813:1;9798:16;:::i;:::-;9767:48;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9767:48:74;;-1:-1:-1;;9767:48:74;;;;;;;;;;;-1:-1:-1;9731:84:74;;9890:16;:12;9905:1;9890:16;:::i;:::-;9864:43;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9864:43:74;;-1:-1:-1;;9864:43:74;;;;;;;;;;;-1:-1:-1;9833:28:74;;;:74;10004:16;:12;10019:1;10004:16;:::i;:::-;9962:59;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;9962:59:74;;;;;;;;;;;;;;;-1:-1:-1;9925:34:74;;;;:96;;;;10071:16;;10085:1;10071:16;;;;;;;;;10040:28;;10071:16;;;;;;;;;-1:-1:-1;;10137:16:74;;;10105:29;10137:16;;;;;;;;;10196:12;;10171:14;;10040:47;;-1:-1:-1;10137:16:74;;-1:-1:-1;;;;;10196:12:74;;;;-1:-1:-1;10040:47:74;;10105:29;10171:14;;;;:::i;:::-;;;;;;:38;-1:-1:-1;;;;;10171:38:74;;;-1:-1:-1;;;;;10171:38:74;;;;;10233:7;10228:2850;10250:12;10246:16;;:1;:16;;;10228:2850;;;10300:1;10295:6;;:1;:6;;;10291:20;10303:8;10291:20;10333:13;10349:5;:1;10353;10349:5;:::i;:::-;10423:33;;;10454:1;10423:33;;;;;;;;;10333:21;;;;;;-1:-1:-1;10377:43:74;;10423:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10377:79;;10478:26;10507:265;;;;;;;;10542:3;10507:265;;;;;;10577:11;:18;10507:265;;;;;;10628:12;:19;10507:265;;;;;;10674:1;10507:265;;;;;;10701:11;10507:265;;;;10738:12;10507:265;;;10478:294;;10836:43;;;;;;;;10861:6;10836:43;;;;;;10869:9;10836:43;;;10821:9;10831:1;10821:12;;;;;;;;:::i;:::-;;;;;;;;;;:58;10905:8;:16;:48;;;;;-1:-1:-1;;;;;10905:16:74;;;;:37;;:48;;10943:9;;10905:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10979:19:74;;:51;;;;;-1:-1:-1;;;;;10979:19:74;;;;-1:-1:-1;10979:40:74;;-1:-1:-1;10979:51:74;;11020:9;;10979:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11101:49:74;;-1:-1:-1;11189:1:74;;-1:-1:-1;11153:38:74;;-1:-1:-1;11153:38:74;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;11252:49:74;;;;;;;;11267:5;11252:49;;11282:17;;-1:-1:-1;;;;;11282:17:74;11252:49;;;;;;;;11343;;;;;;;;11252;11343;;;;;;;;;11327:13;;11101:90;;-1:-1:-1;11252:49:74;11101:90;;11217:32;;11327:13;;;;:::i;:::-;;;;;;;;;;:65;11418:8;:16;:54;;;;;-1:-1:-1;;;;;11418:16:74;;;;:42;;:54;;11461:10;;11418:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11595:329:74;;;;;;;;;;;;;11704:4;11595:329;;;;;;;;;;;;;11797:5;11595:329;;;;11844:4;11595:329;;;;11885:16;;11595:329;11885:16;11595:329;;;;11556:33;;:36;;11595:329;;-1:-1:-1;11556:33:74;-1:-1:-1;11556:36:74;;;;-1:-1:-1;11556:36:74;;;-1:-1:-1;11556:36:74;;;;:::i;:::-;;;;;;:368;;;;12015:210;;;;;;;;12069:6;12015:210;;;;;;12106:4;12015:210;;;;;;12151:5;12015:210;;;;;;12198:4;12015:210;;;;;11981:12;:28;;;12010:1;11981:31;;;;;;;;;;:::i;:::-;;;;;;:244;;;;12330:175;;;;;;;;12403:6;12330:175;;;;;;4523:1;12330:175;;;12290:12;:34;;;12325:1;12290:37;;;;;;;;;;:::i;:::-;;;;;;:215;;;;12528:19;12550:13;:23;;;;;;;;;;-1:-1:-1;;;;;12550:23:74;-1:-1:-1;;;;;12550:48:74;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12672:40;;;12710:1;12672:40;;;;;;;;;12528:72;;-1:-1:-1;12622:47:74;;12672:40;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12672:40:74;;;;;;;;;;;;;;;;12622:90;;12746:159;;;;;;;;12803:6;12746:159;;;;;;12835:48;;;;;;;;12865:11;12861:1;:15;;;;:::i;:::-;12835:48;;;;12878:1;12835:48;;;;;;;;;;;12746:159;;12734:9;;:6;;-1:-1:-1;;12734:9:74;;;;:::i;:::-;;;;;;;;;;:171;12927:23;;:40;;;;;-1:-1:-1;;;;;12927:23:74;;;;:32;;:40;;12960:6;;12927:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12989:23:74;;:70;;;;;4278:4;12989:70;;;7241:66:139;-1:-1:-1;;;;;12989:23:74;;;;-1:-1:-1;12989:46:74;;-1:-1:-1;7214:18:139;;12989:70:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10269:2809;;;;;10228:2850;10264:3;;10228:2850;;;-1:-1:-1;13234:37:74;;;13269:1;13234:37;;;;;;;;;13180:51;;13234:37;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;13334:320:74;;;;;;;;13385:17;;-1:-1:-1;;;;;13385:17:74;13334:320;;13439:18;;13334:320;;;;;;;;;;;;13494:19;;13334:320;;;;;;;-1:-1:-1;13334:320:74;;;;;;;;;;;;;;;;;;13699:63;;;;;;;;4574:5;13699:63;;;;;;;;13680:16;;;;-1:-1:-1;13334:320:74;;13680:16;;-1:-1:-1;13680:16:74;;;;:::i;:::-;;;;;;;;;;:82;13788:16;;:56;;;;;-1:-1:-1;;;;;13788:16:74;;;;:41;;:56;;13830:13;;13788:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13154:713;;13965:375;;;;;;;;14028:13;:21;;14050:1;14028:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;13965:375;;14100:4;13965:375;;;;;;;;;;14201:5;13965:375;;;;14252:4;13965:375;;;;14297:16;;13965:375;14297:16;13965:375;;;;;13915:33;;:47;;;;;;;;;;;;:::i;:::-;;;;;;:425;;;;14412:248;;;;;;;;14470:13;:21;;14492:1;14470:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;14412:248;;14529:4;14412:248;;;;14578:5;14412:248;;;;14629:4;14412:248;;;;;;;;14367:28;;;:42;;;;;;;;;;;;:::i;:::-;;;;;;:293;;;;14738:205;;;;;;;;14815:13;:21;;14837:1;14815:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;14738:205;;4523:1;14738:205;;;14687:34;;;;:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:256;15002:17;;15033:33;;15002:65;;;;;-1:-1:-1;;;;;15002:17:74;;;;:30;;:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15085:12:74;;15111:28;;;;15085:55;;;;;-1:-1:-1;;;;;15085:12:74;;;;-1:-1:-1;15085:25:74;;-1:-1:-1;15085:55:74;;:12;:55;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15158:15:74;;15195:34;;;;;15158:72;;;;;-1:-1:-1;;;;;15158:15:74;;;;-1:-1:-1;15158:36:74;;-1:-1:-1;15158:72:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7038:8207;;;;6990:8801;;;15271:28;15255:12;:44;;;;;;;;:::i;:::-;;15251:540;;15319:31;15407:4;15442:13;:26;;15469:1;15442:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;15353:137;;-1:-1:-1;;;;;15442:29:74;;;;15353:137;;;:::i;:::-;-1:-1:-1;;;;;66305:15:139;;;66287:34;;66357:15;;66352:2;66337:18;;66330:43;66214:2;66199:18;15353:137:74;;;;;;;;;;;;;;;;;;;;;;;15319:171;;15508:13;:26;;15535:1;15508:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;:66;;;;;-1:-1:-1;;;;;1106:55:139;;;15508:66:74;;;1088:74:139;15508:29:74;;;;:45;;1061:18:139;;15508:66:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15628:10;15592:13;:22;;15615:1;15592:25;;;;;;;;;;:::i;:::-;;;;;;;;;:47;;;;;-1:-1:-1;;;;;15592:47:74;;;;;-1:-1:-1;;;;;15592:47:74;;;;;;15696:10;15657:13;:25;;15683:1;15657:28;;;;;;;;;;:::i;:::-;;;;;;;;;:50;;;;;-1:-1:-1;;;;;15657:50:74;;;;;-1:-1:-1;;;;;15657:50:74;;;;;;15301:421;15251:540;;;15746:30;;;;;66586:2:139;15746:30:74;;;66568:21:139;66625:2;66605:18;;;66598:30;66664:22;66644:18;;;66637:50;66704:18;;15746:30:74;66384:344:139;15251:540:74;6971:3;;6935:8866;;;;15837:7;15832:669;15854:12;15850:16;;:1;:16;;;15832:669;;;15887:19;15909:13;:26;;15936:1;15909:29;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;15909:29:74;;-1:-1:-1;15956:12:74;:42;;;;;;;;:::i;:::-;;15952:259;;16018:8;-1:-1:-1;;;;;16018:30:74;;4574:5;16069:13;:22;;16092:1;16069:25;;;;;;;;;;:::i;:::-;;;;;;;;;;;16018:77;;;;;;;;;;51051:10:139;51039:23;;;16018:77:74;;;51021:42:139;-1:-1:-1;;;;;16069:25:74;51079:18:139;;;51072:83;50994:18;;16018:77:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16113:8;-1:-1:-1;;;;;16113:33:74;;4574:5;16167:13;:22;;16190:1;16167:25;;;;;;;;;;:::i;:::-;;;;;;;;;;16113:83;;;;;;;;;;66971:10:139;66959:23;;;16113:83:74;;;66941:42:139;-1:-1:-1;;;;;16167:25:74;66999:18:139;;;66992:83;67091:18;;;67084:34;66914:18;;16113:83:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15952:259;16229:7;16224:267;16246:12;16242:16;;:1;:16;;;16224:267;;;16292:1;16287:6;;:1;:6;;;16283:20;16295:8;16283:20;-1:-1:-1;;;;;16321:30:74;;;16352:5;:1;16356;16352:5;:::i;:::-;16359:22;:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;16321:64;;;;;;;;;;67330:4:139;67318:17;;;16321:64:74;;;67300:36:139;-1:-1:-1;;;;;16359:25:74;67352:18:139;;;67345:83;67273:18;;16321:64:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16403:8;-1:-1:-1;;;;;16403:33:74;;16437:1;16441;16437:5;;;;:::i;:::-;16444:25;:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16403:73;;;;;;;;;;67676:4:139;67664:17;;;16403:73:74;;;67646:36:139;-1:-1:-1;;;;;16444:28:74;67698:18:139;;;67691:83;67790:18;;;67783:34;67619:18;;16403:73:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16224:267;16260:3;;16224:267;;;-1:-1:-1;;15868:3:74;;15832:669;;2606:142:94;2655:35;2723:18;2702:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2702:39:94;;;;;;;;;;;;;;;;;;;;;;2606:142;:::o;24121:575:74:-;24219:19;24252:9;:32;24262:21;:12;;:19;:21::i;:::-;24252:32;;;;;;;;;;;;;-1:-1:-1;24252:32:74;;;;-1:-1:-1;;;;;24252:32:74;;-1:-1:-1;;24326:39:74;24356:8;24326:29;:39::i;:::-;24295:70;;;;24376:20;24399:74;;;;;;;;24406:21;:12;;:19;:21::i;:::-;24399:74;;;;;;24429:21;:12;;:19;:21::i;:::-;24399:74;;;;24452:20;:12;;:18;:20::i;:::-;24399:74;;;;24376:97;-1:-1:-1;;;;;;24483:18:74;;;24522:3;24510:5;24376:97;24561:26;:12;;:24;:26::i;:::-;24601:19;:12;;:17;:19::i;:::-;24634:22;:12;;:20;:22::i;:::-;24670:9;;;;;;;;;;;;24483:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24209:487;;;;24121:575;;;:::o;1404:242:138:-;1466:79;;;1539:4;1466:79;;;;1088:74:139;;;;1466:79:138;;;;;;;;;;1061:18:139;;;;1466:79:138;;;;;;;;;1489:40;1466:79;;;1450:96;;;;;336:42:88;;1450:15:138;;:96;;1466:79;1450:96;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1556:20:138;;1595:12;;-1:-1:-1;;;;;1556:20:138;;;;-1:-1:-1;1556:30:138;;-1:-1:-1;1556:20:138;1595:12;;;1610:13;:11;:13::i;:::-;1629:5;;1556:83;;;;;;;;;;-1:-1:-1;;;;;26470:15:139;;;1556:83:138;;;26452:34:139;26502:18;;;26495:34;;;;26565:3;26545:18;;;26538:31;-1:-1:-1;26585:19:139;;;26578:30;;;1629:5:138;;26624:18:139;;;26617:43;26697:3;26676:19;;;26669:32;26717:19;;;26710:30;;;;26757:19;;1556:83:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5604:176:73;5682:11;5695:13;5727:46;5765:7;;5727:37;:46::i;19989:464:74:-;20084:13;20100:21;:12;;:19;:21::i;:::-;20084:37;;20131:18;20152:23;:12;;:21;:23::i;:::-;20231:20;;;20185:43;20231:20;;;:12;:20;;;;;;;:32;;;;;;;;20131:44;;-1:-1:-1;20318:19:74;:12;;:17;:19::i;:::-;20303:34;-1:-1:-1;20347:21:74;:5;20303:34;20347:15;:21::i;:::-;20378:13;;;;:7;:13;;;;;:28;20394:12;;20378:13;:28;:::i;:::-;-1:-1:-1;20416:19:74;;;;:13;:19;;;;;:30;20438:8;;20416:19;:30;:::i;7590:106:135:-;7670:18;;;;;7685:2;7670:18;;;4644:25:139;7636:7:135;;336:42:88;;7670:14:135;;4617:18:139;;7670::135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7670:18:135;;;;;;;;;;;;:::i;:::-;7662:27;;;:::i;:::-;7655:34;;7590:106;:::o;5965:449::-;6169:23;6217:190;6256:1;6271:7;6292;-1:-1:-1;;;;;31116:23:74;;6371:10:135;6383:12;6360:36;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6360:36:135;;;;;;;;;;6313:84;;;6360:36;6313:84;;:::i;:::-;;;;;;;;;;;;;6217:25;:190::i;:::-;6204:203;5965:449;-1:-1:-1;;;;;;5965:449:135:o;7702:184::-;7789:40;7798:5;7805;7789:40;;;;;;;;;;;;;;;;;:8;:40::i;:::-;7839;7848:5;7855;7839:40;;;;;;;;;;;;;;;;;:8;:40::i;2270:110:89:-;2349:24;;;;;;;;28074:25:139;;;28115:18;;;28108:34;;;2349:11:89;;;;28047:18:139;;2349:24:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2671:150:50;2734:6;2773:39;706:2;655;2773:7;;:39;:::i;:::-;2766:47;;;:::i;:::-;2759:55;;;2671:150;-1:-1:-1;;;2671:150:50:o;2148:414:73:-;2244:11;2257;2270:13;2296:10;2308:19;2331:110;2375:8;533:1:13;2331:30:73;:110::i;:::-;2295:146;;;;2459:5;2451:56;;;;;;;72460:2:139;2451:56:73;;;72442:21:139;72499:2;72479:18;;;72472:30;72538:34;72518:18;;;72511:62;72609:8;72589:18;;;72582:36;72635:19;;2451:56:73;72258:402:139;2451:56:73;2524:31;;;;;:4;;:23;;:31;;2548:6;;2524:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2517:38;;;;;;;;2148:414;;;;;:::o;2230:148:50:-;2293:6;2332:37;605:2;557:1;2332:7;;:37;:::i;2384:142::-;2447:7;2481:37;655:2;605;2481:7;;:37;:::i;:::-;2473:46;;;:::i;2078:146::-;2140:6;2179:36;557:1;493;2179:7;;:36;:::i;:::-;2172:44;;;:::i;:::-;2165:52;;;2078:146;-1:-1:-1;;;2078:146:50:o;2976:130::-;3044:7;3070:29;:17;3079:7;;3070:8;:17::i;:::-;1210:15:42;1084:151;3112:138:50;3173:7;3207:35;862:3;785:2;3207:7;;:35;:::i;1997:3163:135:-;2048:13;:11;:13::i;:::-;2086:11;;2071:55;;2086:11;;;2071:14;:55::i;:::-;1088:1;2159:18;;:9;:18;;;;2137:11;:41;;;;-1:-1:-1;;;;;2159:18:135;;;2137:41;;;;;2159:18;2311:79;2384:4;;2311:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2296:12:135;:94;;;;;-1:-1:-1;;;;;2296:94:135;;;;;;;-1:-1:-1;;2459:18:135;:9;:18;;;;;2415:79;2459:18;;;2488:4;;2415:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2400:12:135;:94;;;;-1:-1:-1;;;;;2400:94:135;;;;;;1128:1;-1:-1:-1;2563:18:135;:9;:18;;;;;2519:79;2563:18;;;2592:4;;2519:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2504:12:135;:94;;;;-1:-1:-1;;;;;2504:94:135;;;;;;;;;;2688:11;;-1:-1:-1;;2688:11:135;;2674:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2674:26:135;-1:-1:-1;2733:12:135;;2710;;2645:55;;-1:-1:-1;;;;;;2733:12:135;;2645:55;;2733:12;;2710;;;;:::i;:::-;-1:-1:-1;;;;;2710:36:135;;;:12;;;;;;;;;:36;2779:12;;2756;;2779;;;;;;;;2756:9;;2779:12;;2756;;;;;;:::i;:::-;-1:-1:-1;;;;;2756:36:135;;;:12;;;;;;;;;:36;2825:12;;2802;;2825;;;2802:9;;2812:1;;2802:12;;;;;;:::i;:::-;-1:-1:-1;;;;;2802:36:135;;;:12;;;;;;;;;;;:36;2848:25;;;;;:4;;:14;;:25;;2863:9;;2848:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3029:12;;;;;;;;;-1:-1:-1;;;;;3029:12:135;2983:60;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2971:9:135;:72;;;;-1:-1:-1;;;;;2971:72:135;;;;;;;;;1088:1;-1:-1:-1;3115:18:135;:9;:18;;;;;3068:82;2971:72;;3115:18;;3144:4;;3068:82;;;:::i;:::-;-1:-1:-1;;;;;77603:15:139;;;77585:34;;77655:15;;;77650:2;77635:18;;77628:43;77707:15;;;77702:2;77687:18;;77680:43;77512:2;77497:18;3068:82:135;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3053:12:135;:97;;;;-1:-1:-1;;;;;3053:97:135;;;;;;;;;3213:9;;3233:12;;3183:87;;3213:9;;;;3053:97;3233:12;;;;;3053:97;3183:87;;;:::i;:::-;-1:-1:-1;;;;;77603:15:139;;;77585:34;;77655:15;;;77650:2;77635:18;;77628:43;77707:15;;;77702:2;77687:18;;77680:43;77512:2;77497:18;3183:87:135;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3160:20:135;:110;;;;-1:-1:-1;;;;;3160:110:135;;;;;;-1:-1:-1;;3426:18:135;:9;:18;;;;;3382:79;3426:18;;;3455:4;;3382:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3367:12:135;:94;;;;-1:-1:-1;;;;;3367:94:135;;;;;;1128:1;-1:-1:-1;3530:18:135;:9;:18;;;;;3486:79;3530:18;;;3559:4;;3486:79;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3471:12:135;:94;;;;-1:-1:-1;;;;;3471:94:135;;;;;;;;;;3619:11;;-1:-1:-1;;3619:11:135;;3605:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3605:26:135;-1:-1:-1;3664:12:135;;3641;;3576:55;;-1:-1:-1;;;;;;3664:12:135;;3576:55;;3664:12;;3641;;;;:::i;:::-;-1:-1:-1;;;;;3641:36:135;;;:12;;;;;;;;;:36;3710:12;;3687;;3710;;;3687:9;;3710:12;;3687;;;;;;:::i;:::-;-1:-1:-1;;;;;3687:36:135;;;:12;;;;;;;;;:36;3756:12;;3733;;3756;;;3733:9;;3743:1;;3733:12;;;;;;:::i;:::-;-1:-1:-1;;;;;3733:36:135;;;:12;;;;;;;;;;;:36;3779:25;;;;;:4;;:14;;:25;;3794:9;;3779:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3832:12:135;;3815:48;;;;;;3832:12;;;;-1:-1:-1;;;;;3832:12:135;3815:48;;;79718:74:139;79808:18;;;79801:30;79867:2;79847:18;;;79840:30;79906:15;79886:18;;;79879:43;336:42:88;;-1:-1:-1;3815:8:135;;-1:-1:-1;79939:19:139;;3815:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3890:12:135;;3873:48;;;;;;-1:-1:-1;;;;;3890:12:135;;;3873:48;;;80181:74:139;80271:18;;;80264:30;80330:2;80310:18;;;80303:30;80369:15;80349:18;;;80342:43;336:42:88;;-1:-1:-1;3873:8:135;;-1:-1:-1;80402:19:139;;3873:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3948:12:135;;3931:48;;;;;;-1:-1:-1;;;;;3948:12:135;;;3931:48;;;80644:74:139;80734:18;;;80727:30;80793:2;80773:18;;;80766:30;80832:15;80812:18;;;80805:43;336:42:88;;-1:-1:-1;3931:8:135;;-1:-1:-1;80865:19:139;;3931:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4007:12:135;;3990:55;;;;;;-1:-1:-1;;;;;4007:12:135;;;3990:55;;;81107:74:139;81197:18;;;81190:30;81256:2;81236:18;;;81229:30;81295:22;81275:18;;;81268:50;336:42:88;;-1:-1:-1;3990:8:135;;-1:-1:-1;81335:19:139;;3990:55:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4072:12:135;;4055:48;;;;;;-1:-1:-1;;;;;4072:12:135;;;4055:48;;;81577:74:139;81667:18;;;81660:30;81726:2;81706:18;;;81699:30;81765:15;81745:18;;;81738:43;336:42:88;;-1:-1:-1;4055:8:135;;-1:-1:-1;81798:19:139;;4055:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4130:12:135;;4113:48;;;;;;-1:-1:-1;;;;;4130:12:135;;;4113:48;;;82040:74:139;82130:18;;;82123:30;82189:2;82169:18;;;82162:30;82228:15;82208:18;;;82201:43;336:42:88;;-1:-1:-1;4113:8:135;;-1:-1:-1;82261:19:139;;4113:48:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4189:9:135;;4172:42;;;;;;-1:-1:-1;;;;;4189:9:135;;;4172:42;;;82503:74:139;82593:18;;;82586:30;82652:2;82632:18;;;82625:30;82691:12;82671:18;;;82664:40;336:42:88;;-1:-1:-1;4172:8:135;;-1:-1:-1;82721:19:139;;4172:42:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4241:20:135;;4224:65;;;;;;-1:-1:-1;;;;;4241:20:135;;;4224:65;;;82963:74:139;83053:18;;;83046:30;83112:2;83092:18;;;83085:30;83151:24;83131:18;;;83124:52;336:42:88;;-1:-1:-1;4224:8:135;;-1:-1:-1;83193:19:139;;4224:65:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4305:11:135;;4300:34;;-1:-1:-1;;;;;;4305:11:135;;-1:-1:-1;1806:9:135;4300:4;:34::i;:::-;4349:11;;4344:34;;-1:-1:-1;;;;;4349:11:135;1806:9;4344:4;:34::i;:::-;4436:28;;;4462:1;4436:28;;;;;;;;;4389:44;;4436:28;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;4436:28:135;;;;;;;;;;;;;;;4389:75;;4495:82;;;;;;;;1128:1;4495:82;;;;;;4540:1;4495:82;;;;;;4552:22;4495:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4474:15;4490:1;4474:18;;;;;;;;:::i;:::-;;;;;;:103;;;;4608:82;;;;;;;;1088:1;4608:82;;;;;;4653:1;4608:82;;;;;;4665:22;4608:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4587:15;4603:1;4587:18;;;;;;;;:::i;:::-;;;;;;:103;;;;4721:82;;;;;;;;1048:1;4721:82;;;;;;4766:1;4721:82;;;;;;4778:22;4721:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4700:15;4716:1;4700:18;;;;;;;;:::i;:::-;;;;;;;;;;:103;4814:12;;:48;;;;;:12;;;;-1:-1:-1;;;;;4814:12:135;;:31;;:48;;4846:15;;4814:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4872:12:135;;:48;;;;;-1:-1:-1;;;;;4872:12:135;;;;-1:-1:-1;4872:31:135;;-1:-1:-1;4872:48:135;;4904:15;;4872:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4930:12:135;;:48;;;;;-1:-1:-1;;;;;4930:12:135;;;;-1:-1:-1;4930:31:135;;-1:-1:-1;4930:48:135;;4962:15;;4930:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4989:12:135;;:48;;;;;-1:-1:-1;;;;;4989:12:135;;;;-1:-1:-1;4989:31:135;;-1:-1:-1;4989:48:135;;5021:15;;4989:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5047:12:135;;:48;;;;;-1:-1:-1;;;;;5047:12:135;;;;-1:-1:-1;5047:31:135;;-1:-1:-1;5047:48:135;;5079:15;;5047:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5105:12:135;;:48;;;;;-1:-1:-1;;;;;5105:12:135;;;;-1:-1:-1;5105:31:135;;-1:-1:-1;5105:48:135;;5137:15;;5105:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:3122;;;1997:3163::o;3454:110:89:-;3533:24;;;;;-1:-1:-1;;;;;66305:15:139;;;3533:24:89;;;66287:34:139;66357:15;;66337:18;;;66330:43;3533:11:89;;;;66199:18:139;;3533:24:89;66036:343:139;19244:399:74;19342:12;19366:21;19420:13;19403:31;;;;;;;;:::i;:::-;;;;-1:-1:-1;;19403:31:74;;;;;;;;;;19390:63;;19436:16;;19403:31;19390:63;;:::i;:::-;;;;;;;;;;;;;19366:87;;19531:8;19525:15;19518:4;19508:8;19504:19;19501:1;19494:47;19486:55;;19576:4;19564:17;19554:73;;19611:1;19608;19601:12;1715:427:73;1814:12;1828:11;1841:13;1867:10;1879:19;1902:113;1946:8;418:1:13;1902:30:73;:113::i;:::-;1866:149;;;;2033:5;2025:59;;;;;;;85775:2:139;2025:59:73;;;85757:21:139;85814:2;85794:18;;;85787:30;85853:34;85833:18;;;85826:62;85924:11;85904:18;;;85897:39;85953:19;;2025:59:73;85573:405:139;2025:59:73;2101:34;;;;;:4;;:26;;:34;;2128:6;;2101:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2094:41;;;;;;;-1:-1:-1;2094:41:73;;;-1:-1:-1;1715:427:73;-1:-1:-1;;;;1715:427:73:o;2697:371:13:-;2789:12;;;2863:2;2845:20;;;;;:44;;-1:-1:-1;2887:2:13;2869:20;;;2845:44;2841:90;;;2898:33;;;;;;;;;;;;;;2841:90;2949:16;:7;;2963:1;2949:13;:16::i;:::-;2941:24;-1:-1:-1;2981:17:13;:7;;2996:1;2981:14;:17::i;:::-;2975:23;-1:-1:-1;3034:2:13;3016:20;;:45;;3060:1;3016:45;;;3039:18;:7;;3054:2;3039:14;:18::i;:::-;3008:53;;2697:371;;;;;:::o;6420:391:135:-;6591:23;6639:165;6678:1;6693:7;6714;-1:-1:-1;;;;;31116:23:74;;6782:11:135;6735:59;;;;;;;;;:::i;6639:165::-;6626:178;6420:391;-1:-1:-1;;;;;6420:391:135:o;2386:134:89:-;2484:29;;;;;:11;;;;:29;;2496:4;;2502:5;;2509:3;;2484:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1788:125:50;1851:14;;1884:22;785:2;1851:14;1884:7;;:22;:::i;3397:132::-;3461:14;;3500:21;:7;785:2;3500:7;;:21;:::i;25755:300:74:-;25871:58;;87113:66:139;25871:58:74;;;87101:79:139;87196:12;;;87189:28;;;25806:12:74;;25830:28;;87233:12:139;;25871:58:74;;;-1:-1:-1;;25871:58:74;;;;;;;;;;25861:69;;25871:58;25861:69;;;;25974:32;;;25982:1;25974:32;;;28074:25:139;28115:18;;;28108:34;;;25861:69:74;-1:-1:-1;25941:7:74;;;;;;336:42:88;;25974:7:74;;28047:18:139;;25974:32:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26023:25;;;;;;88072:19:139;;;;88107:12;;;88100:28;;;;88166:3;88162:16;;;;88180:66;88158:89;88144:12;;;88137:111;26023:25:74;;;;;;;;;88264:12:139;;;;26023:25:74;;;;25755:300;-1:-1:-1;;;;;;25755:300:74:o;3256:135:50:-;3320:14;;3359:24;:7;862:3;3359:7;;:24;:::i;1357:742:13:-;1472:16;1490:21;1472:16;1612:1;1602:11;;1472:16;1674:22;:8;;1602:11;1674:14;:22::i;:::-;1720:1;1710:11;;;;;1660:36;-1:-1:-1;1781:21:13;:8;;1710:11;1781:13;:21::i;:::-;1768:34;-1:-1:-1;1932:1:13;1923:10;;1987:13;;;;;2023:31;1987:13;1923:10;2023:8;;:31;:::i;:::-;1357:742;;2014:40;;-1:-1:-1;2014:40:13;;-1:-1:-1;;;2068:14:13;;;;-1:-1:-1;;;1357:742:13:o;4032:231:132:-;4097:13;4126:12;4132:5;5667:12;5653:10;;;5667:12;5653:10;;;5667:12;;5653:26;;5564:122;4126:12;4122:56;;;4140:38;1413:4:124;4140:11:132;:38::i;:::-;-1:-1:-1;4231:10:132;;-1:-1:-1;;4231:10:132;;;;;;;:14;4219:27;;;;;:11;;;;:27;;;;;;;4032:231::o;2119:386::-;2251:10;;2182:13;;2251:10;;;;;;;2292:12;2279:25;;2275:65;;2306:34;1315:4:124;2306:11:132;:34::i;:::-;-1:-1:-1;;2354:11:132;2387:22;;;;;;;;2354:11;2387;;:22;;;;;;;2423:29;;;2466:22;;;;;;;;;;;;;-1:-1:-1;2387:22:132;2119:386::o;2568:228:73:-;2694:10;2728:61;2759:8;2769:19;2728:30;:61::i;:::-;-1:-1:-1;2716:73:73;2568:228;-1:-1:-1;;;2568:228:73:o;1271:438::-;1371:14;1387:16;1416:10;1428:19;1451:115;1495:8;363:1:13;1451:30:73;:115::i;:::-;1415:151;;;;1584:5;1576:60;;;;;;;88489:2:139;1576:60:73;;;88471:21:139;88528:2;88508:18;;;88501:30;88567:34;88547:18;;;88540:62;88638:12;88618:18;;;88611:40;88668:19;;1576:60:73;88287:406:139;1576:60:73;1667:35;;;;;:4;;:27;;:35;;1695:6;;1667:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1646:56;;;;;;;-1:-1:-1;1271:438:73;-1:-1:-1;;;;1271:438:73:o;3074:380:13:-;3163:11;;;3244:2;3226:20;;;;;:44;;-1:-1:-1;3268:2:13;3250:20;;;3226:44;3222:87;;;3279:30;;;;;;;;;;;;;;3222:87;3325:17;:7;;3340:1;3325:14;:17::i;:::-;3319:23;-1:-1:-1;3367:17:13;:7;;3381:2;3367:13;:17::i;:::-;3352:32;-1:-1:-1;3420:2:13;3402:20;;:45;;3446:1;3402:45;;;3425:18;:7;;3440:2;3425:14;:18::i;2420:271::-;2499:14;;2565:2;2547:20;;2543:67;;2576:34;;;;;;;;;;;;;;2543:67;2629:17;:7;;2644:1;2629:14;:17::i;:::-;2620:26;-1:-1:-1;2667:17:13;:7;;2681:2;2667:13;:17::i;:::-;2656:28;;2420:271;;;;;:::o;858:407:73:-;943:11;956:13;982:10;994:19;1017:113;1061:8;306:1:13;1017:30:73;:113::i;:::-;981:149;;;;1148:5;1140:59;;;;;;;89217:2:139;1140:59:73;;;89199:21:139;89256:2;89236:18;;;89229:30;89295:34;89275:18;;;89268:62;89366:11;89346:18;;;89339:39;89395:19;;1140:59:73;89015:405:139;1140:59:73;1224:34;;;;;:4;;:26;;:34;;1251:6;;1224:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1209:49;;;;;;;;-1:-1:-1;858:407:73;-1:-1:-1;;;;858:407:73:o;2105:309:13:-;2183:11;;2243:2;2225:20;;;;;:44;;-1:-1:-1;2267:2:13;2249:20;;;2225:44;2221:90;;;2278:33;;;;;;;;;;;;;;2221:90;2327:17;:7;;2342:1;2327:14;:17::i;:::-;2321:23;-1:-1:-1;2380:2:13;2362:20;;:45;;2406:1;2362:45;;;2385:18;:7;;2400:2;2385:14;:18::i;2827:143:50:-;2892:7;2926:36;785:2;706;2926:7;;:36;:::i;2658:320:132:-;2784:12;;;;;;-1:-1:-1;;2784:16:132;;2832:10;;;;;2818:24;;;;2814:63;;2844:33;1536:4:124;2844:11:132;:33::i;:::-;2891:23;;;;;;:11;;;:23;;;;;:31;;;;2936:25;;;;;;;2658:320::o;640:284:71:-;824:17;877:6;885:7;894:9;905:11;860:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;853:64;;640:284;;;;;;:::o;2802:2541:73:-;3012:10;;:27;;;;;2937:10;;2949:19;;2937:10;;3012;;;-1:-1:-1;;;;;3012:10:73;;:17;;:27;;3030:8;;3012:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3012:27:73;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3306:12:73;;;3050:14;3306:12;;;;;;;;;2980:59;;-1:-1:-1;3050:14:73;;;;;;;3329:1893;3345:12;:19;3336:6;:28;3329:1893;;;3438:45;;;;;3381:16;;;;;;3438:4;;:23;;:45;;3462:12;;3476:6;;3438:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3438:45:73;;;;;;;;;;;;:::i;:::-;3380:103;;;;;;3606:19;3592:33;;:10;:33;;;3588:1591;;3645:11;;;;;-1:-1:-1;;3802:51:73;;;;3798:1367;;3892:30;;;;;:4;;:26;;:30;;3919:2;;3892:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3877:45;;-1:-1:-1;3877:45:73;-1:-1:-1;3944:18:73;3877:45;3944:18;;:::i;:::-;;-1:-1:-1;3984:22:73;4001:5;3984:22;;:::i;:::-;;;4055:11;4068:13;4038:44;;;;;;;;92317:3:139;92313:16;;;92222:66;92309:25;;;92297:38;;92369:16;;;;92365:25;92360:2;92351:12;;92344:47;92416:2;92407:12;;92055:370;4038:44:73;;;;;;;;;;;;;4028:54;;3798:1367;;;4111:53;;;;;4107:1058;;4311:31;;;;;:4;;:27;;:31;;4339:2;;4311:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4291:51;;-1:-1:-1;4291:51:73;-1:-1:-1;4364:22:73;4291:51;4364:22;;:::i;:::-;4418:41;;92621:66:139;92607:3;92603:16;;;92599:89;4418:41:73;;;92587:102:139;92705:12;;;92698:28;;;4364:22:73;;-1:-1:-1;92742:12:139;;4418:41:73;92430:330:139;4107:1058:73;4488:51;;;;;4484:681;;4585:30;;;;;:4;;:26;;:30;;4612:2;;4585:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4563:52;;-1:-1:-1;4563:52:73;-1:-1:-1;4563:52:73;-1:-1:-1;4637:18:73;4563:52;4637:18;;:::i;:::-;;-1:-1:-1;4677:22:73;4694:5;4677:22;;:::i;:::-;4731:51;;92982:66:139;92968:3;92964:16;;;92960:89;4731:51:73;;;92948:102:139;93069:66;93172:3;93168:16;;;93164:25;;93151:11;;;93144:46;93224:16;;;93220:25;93206:12;;;93199:47;4677:22:73;;-1:-1:-1;93262:12:139;;4731:51:73;92765:515:139;4484:681:73;4811:48;;;;;4807:358;;4904:27;;;;;:4;;:23;;:27;;4928:2;;4904:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4883:48;;-1:-1:-1;4883:48:73;;-1:-1:-1;4883:48:73;-1:-1:-1;4953:22:73;4883:48;4953:22;;:::i;:::-;;-1:-1:-1;4997:18:73;5012:3;4997:18;;:::i;:::-;;-1:-1:-1;5037:20:73;5053:4;5037:20;;:::i;:::-;5089:57;;93655:66:139;93750:3;93746:16;;;93742:25;;5089:57:73;;;93730:38:139;93820:66;93806:3;93802:16;;;93798:89;93784:12;;;93777:111;93922:16;;;93918:25;93904:12;;;93897:47;5037:20:73;;-1:-1:-1;93960:12:139;;5089:57:73;;;;;;;;;;;;5079:67;;4807:358;3627:1552;;;;;3588:1591;5201:10;-1:-1:-1;3329:1893:73;;-1:-1:-1;;3329:1893:73;;5236:7;:14;5254:1;5236:19;5232:73;;5279:5;;-1:-1:-1;5286:7:73;-1:-1:-1;5271:23:73;;-1:-1:-1;;;;;5271:23:73;5232:73;5322:4;;5328:7;;-1:-1:-1;2802:2541:73;-1:-1:-1;;;;;;;;2802:2541:73:o;4800:67:74:-;4842:18;:16;:18::i;27055:91:91:-;27122:17;;;;;-1:-1:-1;;;;;26979:55:139;;27122:17:91;;;26961:74:139;27051:18;;;27044:34;;;27122:7:91;;;;26934:18:139;;27122:17:91;;;;;;;;;;;;;;;;;;;229:215:43;306:6;371:1;362:10;;407:18;362:10;:6;407;;:18;:::i;:::-;400:26;;;:::i;:::-;393:34;;;229:215;-1:-1:-1;;;;;229:215:43:o;892:220::-;970:7;1036:2;1027:11;;1075:18;1027:11;:6;1075;;:18;:::i;:::-;1067:27;;;:::i;:::-;1059:36;;;892:220;-1:-1:-1;;;;;892:220:43:o;95:128::-;171:5;201:6;;208;201:14;;;;;;;:::i;:::-;;;;;;;;;95:128;-1:-1:-1;;;;;95:128:43:o;1776:194:124:-;1881:10;1875:4;1868:24;1918:4;1912;1905:18;1949:4;1943;1936:18;450:215:43;527:6;592:1;583:10;;628:18;583:10;:6;628;;:18;:::i;:::-;621:26;;;:::i;:::-;614:34;;;450:215;-1:-1:-1;;;;;450:215:43:o;1570:210::-;1647:7;1713:2;1704:11;;1744:18;1704:11;:6;1744;;:18;:::i;:::-;1736:27;;;:::i;765:87:73:-;825:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;812:10;;:33;;;;;-1:-1:-1;;;;;812:33:73;;;;;-1:-1:-1;;;;;812:33:73;;;;;;765:87::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:154:139;-1:-1:-1;;;;;93:5:139;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:247::-;232:6;285:2;273:9;264:7;260:23;256:32;253:52;;;301:1;298;291:12;253:52;340:9;327:23;359:31;384:5;359:31;:::i;425:121::-;510:10;503:5;499:22;492:5;489:33;479:61;;536:1;533;526:12;551:386;618:6;626;679:2;667:9;658:7;654:23;650:32;647:52;;;695:1;692;685:12;647:52;734:9;721:23;753:30;777:5;753:30;:::i;:::-;802:5;-1:-1:-1;859:2:139;844:18;;831:32;872:33;831:32;872:33;:::i;:::-;924:7;914:17;;;551:386;;;;;:::o;1173:347::-;1224:8;1234:6;1288:3;1281:4;1273:6;1269:17;1265:27;1255:55;;1306:1;1303;1296:12;1255:55;-1:-1:-1;1329:20:139;;1372:18;1361:30;;1358:50;;;1404:1;1401;1394:12;1358:50;1441:4;1433:6;1429:17;1417:29;;1493:3;1486:4;1477:6;1469;1465:19;1461:30;1458:39;1455:59;;;1510:1;1507;1500:12;1525:184;1577:77;1574:1;1567:88;1674:4;1671:1;1664:15;1698:4;1695:1;1688:15;1714:254;1787:2;1781:9;1829:4;1817:17;;1864:18;1849:34;;1885:22;;;1846:62;1843:88;;;1911:18;;:::i;:::-;1947:2;1940:22;1714:254;:::o;1973:334::-;2044:2;2038:9;2100:2;2090:13;;-1:-1:-1;;2086:86:139;2074:99;;2203:18;2188:34;;2224:22;;;2185:62;2182:88;;;2250:18;;:::i;:::-;2286:2;2279:22;1973:334;;-1:-1:-1;1973:334:139:o;2312:245::-;2360:4;2393:18;2385:6;2382:30;2379:56;;;2415:18;;:::i;:::-;-1:-1:-1;2472:2:139;2460:15;-1:-1:-1;;2456:88:139;2546:4;2452:99;;2312:245::o;2562:462::-;2604:5;2657:3;2650:4;2642:6;2638:17;2634:27;2624:55;;2675:1;2672;2665:12;2624:55;2711:6;2698:20;2742:48;2758:31;2786:2;2758:31;:::i;:::-;2742:48;:::i;:::-;2815:2;2806:7;2799:19;2861:3;2854:4;2849:2;2841:6;2837:15;2833:26;2830:35;2827:55;;;2878:1;2875;2868:12;2827:55;2943:2;2936:4;2928:6;2924:17;2917:4;2908:7;2904:18;2891:55;2991:1;2966:16;;;2984:4;2962:27;2955:38;;;;2970:7;2562:462;-1:-1:-1;;;2562:462:139:o;3029:826::-;3135:6;3143;3151;3159;3212:2;3200:9;3191:7;3187:23;3183:32;3180:52;;;3228:1;3225;3218:12;3180:52;3268:9;3255:23;3297:18;3338:2;3330:6;3327:14;3324:34;;;3354:1;3351;3344:12;3324:34;3393:58;3443:7;3434:6;3423:9;3419:22;3393:58;:::i;:::-;3470:8;;-1:-1:-1;3367:84:139;-1:-1:-1;3558:2:139;3543:18;;3530:32;;-1:-1:-1;3574:16:139;;;3571:36;;;3603:1;3600;3593:12;3571:36;3626:51;3669:7;3658:8;3647:9;3643:24;3626:51;:::i;:::-;3616:61;;3730:2;3719:9;3715:18;3702:32;3686:48;;3759:2;3749:8;3746:16;3743:36;;;3775:1;3772;3765:12;3743:36;;3798:51;3841:7;3830:8;3819:9;3815:24;3798:51;:::i;:::-;3788:61;;;3029:826;;;;;;;:::o;4901:250::-;4986:1;4996:113;5010:6;5007:1;5004:13;4996:113;;;5086:11;;;5080:18;5067:11;;;5060:39;5032:2;5025:10;4996:113;;;-1:-1:-1;;5143:1:139;5125:16;;5118:27;4901:250::o;5156:329::-;5197:3;5235:5;5229:12;5262:6;5257:3;5250:19;5278:76;5347:6;5340:4;5335:3;5331:14;5324:4;5317:5;5313:16;5278:76;:::i;:::-;5399:2;5387:15;-1:-1:-1;;5383:88:139;5374:98;;;;5474:4;5370:109;;5156:329;-1:-1:-1;;5156:329:139:o;5490:217::-;5637:2;5626:9;5619:21;5600:4;5657:44;5697:2;5686:9;5682:18;5674:6;5657:44;:::i;5712:114::-;5796:4;5789:5;5785:16;5778:5;5775:27;5765:55;;5816:1;5813;5806:12;5831:152;5908:20;;5957:1;5947:12;;5937:40;;5973:1;5970;5963:12;5937:40;5831:152;;;:::o;5988:343::-;6071:6;6079;6132:2;6120:9;6111:7;6107:23;6103:32;6100:52;;;6148:1;6145;6138:12;6100:52;6187:9;6174:23;6206:29;6229:5;6206:29;:::i;:::-;6254:5;-1:-1:-1;6278:47:139;6321:2;6306:18;;6278:47;:::i;6336:488::-;6389:3;6427:5;6421:12;6454:6;6449:3;6442:19;6480:4;6509;6504:3;6500:14;6493:21;;6548:4;6541:5;6537:16;6571:1;6581:218;6595:6;6592:1;6589:13;6581:218;;;6660:13;;-1:-1:-1;;;;;6656:62:139;6644:75;;6739:12;;;;6774:15;;;;6617:1;6610:9;6581:218;;;-1:-1:-1;6815:3:139;;6336:488;-1:-1:-1;;;;;6336:488:139:o;6829:261::-;7008:2;6997:9;6990:21;6971:4;7028:56;7080:2;7069:9;7065:18;7057:6;7028:56;:::i;7318:588::-;7400:6;7408;7416;7469:2;7457:9;7448:7;7444:23;7440:32;7437:52;;;7485:1;7482;7475:12;7437:52;7525:9;7512:23;7558:18;7550:6;7547:30;7544:50;;;7590:1;7587;7580:12;7544:50;7613:49;7654:7;7645:6;7634:9;7630:22;7613:49;:::i;:::-;7603:59;;;7712:2;7701:9;7697:18;7684:32;7725:29;7748:5;7725:29;:::i;:::-;7773:5;-1:-1:-1;7830:2:139;7815:18;;7802:32;7843:31;7802:32;7843:31;:::i;:::-;7893:7;7883:17;;;7318:588;;;;;:::o;7911:656::-;7963:3;7994;8026:5;8020:12;8053:6;8048:3;8041:19;8079:4;8108;8103:3;8099:14;8092:21;;8166:4;8156:6;8153:1;8149:14;8142:5;8138:26;8134:37;8205:4;8198:5;8194:16;8228:1;8238:303;8252:6;8249:1;8246:13;8238:303;;;-1:-1:-1;;8327:5:139;8321:4;8317:16;8313:89;8308:3;8301:102;8424:37;8456:4;8447:6;8441:13;8424:37;:::i;:::-;8519:12;;;;8416:45;-1:-1:-1;8484:15:139;;;;8274:1;8267:9;8238:303;;;-1:-1:-1;8557:4:139;;7911:656;-1:-1:-1;;;;;;;7911:656:139:o;8572:1159::-;8778:4;8807:2;8847;8836:9;8832:18;8877:2;8866:9;8859:21;8900:6;8935;8929:13;8966:6;8958;8951:22;8992:2;8982:12;;9025:2;9014:9;9010:18;9003:25;;9087:2;9077:6;9074:1;9070:14;9059:9;9055:30;9051:39;9125:2;9117:6;9113:15;9146:1;9156:546;9170:6;9167:1;9164:13;9156:546;;;9235:22;;;9259:66;9231:95;9219:108;;9350:13;;9395:9;;-1:-1:-1;;;;;9391:58:139;9376:74;;9489:11;;9483:18;9521:15;;;9514:27;;;9564:58;9606:15;;;9483:18;9564:58;:::i;:::-;9680:12;;;;9554:68;-1:-1:-1;;9645:15:139;;;;9192:1;9185:9;9156:546;;;-1:-1:-1;9719:6:139;;8572:1159;-1:-1:-1;;;;;;;;8572:1159:139:o;9991:1114::-;10114:6;10122;10130;10138;10146;10154;10162;10215:3;10203:9;10194:7;10190:23;10186:33;10183:53;;;10232:1;10229;10222:12;10183:53;10271:9;10258:23;10290:30;10314:5;10290:30;:::i;:::-;10339:5;-1:-1:-1;10396:2:139;10381:18;;10368:32;10409:33;10368:32;10409:33;:::i;:::-;10461:7;-1:-1:-1;10519:2:139;10504:18;;10491:32;10542:18;10572:14;;;10569:34;;;10599:1;10596;10589:12;10569:34;10622:49;10663:7;10654:6;10643:9;10639:22;10622:49;:::i;:::-;10612:59;;10718:2;10707:9;10703:18;10690:32;10680:42;;10774:3;10763:9;10759:19;10746:33;10731:48;;10788:33;10813:7;10788:33;:::i;:::-;10840:7;;-1:-1:-1;10900:3:139;10885:19;;10872:33;;10917:16;;;10914:36;;;10946:1;10943;10936:12;10914:36;;10985:60;11037:7;11026:8;11015:9;11011:24;10985:60;:::i;:::-;9991:1114;;;;-1:-1:-1;9991:1114:139;;-1:-1:-1;9991:1114:139;;;;10959:86;;-1:-1:-1;;;9991:1114:139:o;11110:409::-;11180:6;11188;11241:2;11229:9;11220:7;11216:23;11212:32;11209:52;;;11257:1;11254;11247:12;11209:52;11297:9;11284:23;11330:18;11322:6;11319:30;11316:50;;;11362:1;11359;11352:12;11316:50;11401:58;11451:7;11442:6;11431:9;11427:22;11401:58;:::i;:::-;11478:8;;11375:84;;-1:-1:-1;11110:409:139;-1:-1:-1;;;;11110:409:139:o;11930:117::-;12015:6;12008:5;12004:18;11997:5;11994:29;11984:57;;12037:1;12034;12027:12;12052:313;12119:6;12127;12180:2;12168:9;12159:7;12155:23;12151:32;12148:52;;;12196:1;12193;12186:12;12148:52;12235:9;12222:23;12254:30;12278:5;12254:30;:::i;:::-;12303:5;12355:2;12340:18;;;;12327:32;;-1:-1:-1;;;12052:313:139:o;12562:628::-;12650:6;12658;12666;12719:2;12707:9;12698:7;12694:23;12690:32;12687:52;;;12735:1;12732;12725:12;12687:52;12775:9;12762:23;12804:18;12845:2;12837:6;12834:14;12831:34;;;12861:1;12858;12851:12;12831:34;12900:58;12950:7;12941:6;12930:9;12926:22;12900:58;:::i;:::-;12977:8;;-1:-1:-1;12874:84:139;-1:-1:-1;13065:2:139;13050:18;;13037:32;;-1:-1:-1;13081:16:139;;;13078:36;;;13110:1;13107;13100:12;13078:36;;13133:51;13176:7;13165:8;13154:9;13150:24;13133:51;:::i;:::-;13123:61;;;12562:628;;;;;:::o;13195:183::-;13255:4;13288:18;13280:6;13277:30;13274:56;;;13310:18;;:::i;:::-;-1:-1:-1;13355:1:139;13351:14;13367:4;13347:25;;13195:183::o;13383:743::-;13437:5;13490:3;13483:4;13475:6;13471:17;13467:27;13457:55;;13508:1;13505;13498:12;13457:55;13544:6;13531:20;13570:4;13594:60;13610:43;13650:2;13610:43;:::i;13594:60::-;13676:3;13700:2;13695:3;13688:15;13728:4;13723:3;13719:14;13712:21;;13785:4;13779:2;13776:1;13772:10;13764:6;13760:23;13756:34;13742:48;;13813:3;13805:6;13802:15;13799:35;;;13830:1;13827;13820:12;13799:35;13866:4;13858:6;13854:17;13880:217;13896:6;13891:3;13888:15;13880:217;;;13976:3;13963:17;13993:31;14018:5;13993:31;:::i;:::-;14037:18;;14075:12;;;;13913;;13880:217;;;-1:-1:-1;14115:5:139;13383:743;-1:-1:-1;;;;;;13383:743:139:o;14131:1211::-;14248:6;14256;14309:2;14297:9;14288:7;14284:23;14280:32;14277:52;;;14325:1;14322;14315:12;14277:52;14365:9;14352:23;14394:18;14435:2;14427:6;14424:14;14421:34;;;14451:1;14448;14441:12;14421:34;14474:61;14527:7;14518:6;14507:9;14503:22;14474:61;:::i;:::-;14464:71;;14554:2;14544:12;;14609:2;14598:9;14594:18;14581:32;14638:2;14628:8;14625:16;14622:36;;;14654:1;14651;14644:12;14622:36;14677:24;;;-1:-1:-1;14732:4:139;14724:13;;14720:27;-1:-1:-1;14710:55:139;;14761:1;14758;14751:12;14710:55;14797:2;14784:16;14820:60;14836:43;14876:2;14836:43;:::i;14820:60::-;14914:15;;;14996:1;14992:10;;;;14984:19;;14980:28;;;14945:12;;;;15020:19;;;15017:39;;;15052:1;15049;15042:12;15017:39;15076:11;;;;15096:216;15112:6;15107:3;15104:15;15096:216;;;15192:3;15179:17;15209:30;15233:5;15209:30;:::i;:::-;15252:18;;15129:12;;;;15290;;;;15096:216;;;15331:5;15321:15;;;;;;;14131:1211;;;;;:::o;15347:511::-;15399:3;15437:5;15431:12;15464:6;15459:3;15452:19;15490:4;15519;15514:3;15510:14;15503:21;;15558:4;15551:5;15547:16;15581:1;15591:242;15605:6;15602:1;15599:13;15591:242;;;15670:13;;15685:66;15666:86;15654:99;;15773:12;;;;15808:15;;;;15627:1;15620:9;15591:242;;15863:1245;16083:4;16112:2;16152;16141:9;16137:18;16182:2;16171:9;16164:21;16205:6;16240;16234:13;16271:6;16263;16256:22;16297:2;16287:12;;16330:2;16319:9;16315:18;16308:25;;16392:2;16382:6;16379:1;16375:14;16364:9;16360:30;16356:39;16430:2;16422:6;16418:15;16451:1;16461:618;16475:6;16472:1;16469:13;16461:618;;;16564:66;16552:9;16544:6;16540:22;16536:95;16531:3;16524:108;16661:6;16655:13;16707:2;16701:9;16738:2;16730:6;16723:18;16768:47;16811:2;16803:6;16799:15;16785:12;16768:47;:::i;:::-;16856:11;;;16850:18;16905:19;;;16888:15;;;16881:44;16850:18;16754:61;-1:-1:-1;16948:51:139;16754:61;16850:18;16948:51;:::i;:::-;17057:12;;;;16938:61;-1:-1:-1;;;17022:15:139;;;;16497:1;16490:9;16461:618;;17113:477;17192:6;17200;17208;17261:2;17249:9;17240:7;17236:23;17232:32;17229:52;;;17277:1;17274;17267:12;17229:52;17317:9;17304:23;17350:18;17342:6;17339:30;17336:50;;;17382:1;17379;17372:12;17336:50;17421:58;17471:7;17462:6;17451:9;17447:22;17421:58;:::i;:::-;17498:8;;17395:84;;-1:-1:-1;17580:2:139;17565:18;;;;17552:32;;17113:477;-1:-1:-1;;;;17113:477:139:o;17595:325::-;17683:6;17678:3;17671:19;17735:6;17728:5;17721:4;17716:3;17712:14;17699:43;;17787:1;17780:4;17771:6;17766:3;17762:16;17758:27;17751:38;17653:3;17909:4;-1:-1:-1;;17834:2:139;17826:6;17822:15;17818:88;17813:3;17809:98;17805:109;17798:116;;17595:325;;;;:::o;17925:393::-;18146:4;18138:6;18134:17;18123:9;18116:36;18188:2;18183;18172:9;18168:18;18161:30;18097:4;18208:61;18265:2;18254:9;18250:18;18242:6;18234;18208:61;:::i;:::-;18200:69;;18305:6;18300:2;18289:9;18285:18;18278:34;17925:393;;;;;;;:::o;18323:348::-;18407:6;18460:2;18448:9;18439:7;18435:23;18431:32;18428:52;;;18476:1;18473;18466:12;18428:52;18516:9;18503:23;18549:18;18541:6;18538:30;18535:50;;;18581:1;18578;18571:12;18535:50;18604:61;18657:7;18648:6;18637:9;18633:22;18604:61;:::i;:::-;18594:71;18323:348;-1:-1:-1;;;;18323:348:139:o;18926:732::-;19029:6;19037;19045;19053;19061;19114:3;19102:9;19093:7;19089:23;19085:33;19082:53;;;19131:1;19128;19121:12;19082:53;19170:9;19157:23;19189:30;19213:5;19189:30;:::i;:::-;19238:5;-1:-1:-1;19290:2:139;19275:18;;19262:32;;-1:-1:-1;19341:2:139;19326:18;;19313:32;;-1:-1:-1;19397:2:139;19382:18;;19369:32;19410:33;19369:32;19410:33;:::i;:::-;19462:7;-1:-1:-1;19520:3:139;19505:19;;19492:33;19548:18;19537:30;;19534:50;;;19580:1;19577;19570:12;19534:50;19603:49;19644:7;19635:6;19624:9;19620:22;19603:49;:::i;:::-;19593:59;;;18926:732;;;;;;;;:::o;19663:280::-;19862:2;19851:9;19844:21;19825:4;19882:55;19933:2;19922:9;19918:18;19910:6;19882:55;:::i;20212:1157::-;20416:4;20445:2;20485;20474:9;20470:18;20515:2;20504:9;20497:21;20538:6;20573;20567:13;20604:6;20596;20589:22;20630:2;20620:12;;20663:2;20652:9;20648:18;20641:25;;20725:2;20715:6;20712:1;20708:14;20697:9;20693:30;20689:39;20763:2;20755:6;20751:15;20784:1;20794:546;20808:6;20805:1;20802:13;20794:546;;;20873:22;;;20897:66;20869:95;20857:108;;20988:13;;21033:9;;-1:-1:-1;;;;;21029:58:139;21014:74;;21127:11;;21121:18;21159:15;;;21152:27;;;21202:58;21244:15;;;21121:18;21202:58;:::i;:::-;21318:12;;;;21192:68;-1:-1:-1;;21283:15:139;;;;20830:1;20823:9;20794:546;;22266:832;22372:6;22380;22388;22396;22404;22457:3;22445:9;22436:7;22432:23;22428:33;22425:53;;;22474:1;22471;22464:12;22425:53;22514:9;22501:23;22543:18;22584:2;22576:6;22573:14;22570:34;;;22600:1;22597;22590:12;22570:34;22639:58;22689:7;22680:6;22669:9;22665:22;22639:58;:::i;:::-;22716:8;;-1:-1:-1;22613:84:139;-1:-1:-1;22804:2:139;22789:18;;22776:32;;-1:-1:-1;22820:16:139;;;22817:36;;;22849:1;22846;22839:12;22817:36;;22872:51;22915:7;22904:8;22893:9;22889:24;22872:51;:::i;:::-;22862:61;;;22970:2;22959:9;22955:18;22942:32;22932:42;;23024:2;23013:9;23009:18;22996:32;23037:31;23062:5;23037:31;:::i;:::-;23087:5;23077:15;;;22266:832;;;;;;;;:::o;23379:313::-;23446:6;23454;23507:2;23495:9;23486:7;23482:23;23478:32;23475:52;;;23523:1;23520;23513:12;23475:52;23562:9;23549:23;23581:30;23605:5;23581:30;:::i;23991:579::-;24108:6;24116;24124;24177:2;24165:9;24156:7;24152:23;24148:32;24145:52;;;24193:1;24190;24183:12;24145:52;24232:9;24219:23;24251:29;24274:5;24251:29;:::i;:::-;24299:5;-1:-1:-1;24323:47:139;24366:2;24351:18;;24323:47;:::i;:::-;24313:57;;24421:2;24410:9;24406:18;24393:32;24448:18;24440:6;24437:30;24434:50;;;24480:1;24477;24470:12;24434:50;24503:61;24556:7;24547:6;24536:9;24532:22;24503:61;:::i;24575:146::-;24661:34;24654:5;24650:46;24643:5;24640:57;24630:85;;24711:1;24708;24701:12;24726:247;24785:6;24838:2;24826:9;24817:7;24813:23;24809:32;24806:52;;;24854:1;24851;24844:12;24806:52;24893:9;24880:23;24912:31;24937:5;24912:31;:::i;25302:717::-;25392:6;25400;25408;25416;25469:2;25457:9;25448:7;25444:23;25440:32;25437:52;;;25485:1;25482;25475:12;25437:52;25525:9;25512:23;25554:18;25595:2;25587:6;25584:14;25581:34;;;25611:1;25608;25601:12;25581:34;25650:58;25700:7;25691:6;25680:9;25676:22;25650:58;:::i;:::-;25727:8;;-1:-1:-1;25624:84:139;-1:-1:-1;25815:2:139;25800:18;;25787:32;;-1:-1:-1;25831:16:139;;;25828:36;;;25860:1;25857;25850:12;25828:36;;25899:60;25951:7;25940:8;25929:9;25925:24;25899:60;:::i;:::-;25302:717;;;;-1:-1:-1;25978:8:139;-1:-1:-1;;;;25302:717:139:o;27089:249::-;27158:6;27211:2;27199:9;27190:7;27186:23;27182:32;27179:52;;;27227:1;27224;27217:12;27179:52;27259:9;27253:16;27278:30;27302:5;27278:30;:::i;28153:184::-;28223:6;28276:2;28264:9;28255:7;28251:23;28247:32;28244:52;;;28292:1;28289;28282:12;28244:52;-1:-1:-1;28315:16:139;;28153:184;-1:-1:-1;28153:184:139:o;28342:735::-;28636:4;-1:-1:-1;;;;;28746:2:139;28738:6;28734:15;28723:9;28716:34;28786:6;28781:2;28770:9;28766:18;28759:34;28829:3;28824:2;28813:9;28809:18;28802:31;28856:45;28896:3;28885:9;28881:19;28873:6;28856:45;:::i;:::-;28937:15;;28932:2;28917:18;;28910:43;-1:-1:-1;28990:22:139;;;28984:3;28969:19;;;28962:51;-1:-1:-1;29022:17:139;;29068:2;29056:15;;28342:735;-1:-1:-1;;;28342:735:139:o;29439:710::-;29265:12;;29279:10;29261:29;29249:42;;29340:4;29329:16;;;29323:23;29307:14;;;29300:47;29400:4;29389:16;;;29383:23;29408:18;29379:48;29363:14;;;29356:72;-1:-1:-1;;;;;29829:6:139;29825:55;29820:2;29809:9;29805:18;29798:83;29918:6;29912:3;29901:9;29897:19;29890:35;29962:3;29956;29945:9;29941:19;29934:32;29727:4;29989:45;30029:3;30018:9;30014:19;30006:6;29989:45;:::i;:::-;30083:9;30075:6;30071:22;30065:3;30054:9;30050:19;30043:51;30111:32;30136:6;30128;30111:32;:::i;:::-;30103:40;29439:710;-1:-1:-1;;;;;;;;29439:710:139:o;30154:269::-;30242:6;30295:2;30283:9;30274:7;30270:23;30266:32;30263:52;;;30311:1;30308;30301:12;30263:52;30343:9;30337:16;30362:31;30387:5;30362:31;:::i;30428:138::-;30507:13;;30529:31;30507:13;30529:31;:::i;30827:437::-;30906:1;30902:12;;;;30949;;;30970:61;;31024:4;31016:6;31012:17;31002:27;;30970:61;31077:2;31069:6;31066:14;31046:18;31043:38;31040:218;;31114:77;31111:1;31104:88;31215:4;31212:1;31205:15;31243:4;31240:1;31233:15;31040:218;;30827:437;;;:::o;31269:184::-;31321:77;31318:1;31311:88;31418:4;31415:1;31408:15;31442:4;31439:1;31432:15;31458:148;31546:4;31525:12;;;31539;;;31521:31;;31564:13;;31561:39;;;31580:18;;:::i;32024:151::-;32114:4;32107:12;;;32093;;;32089:31;;32132:14;;32129:40;;;32149:18;;:::i;32180:184::-;32232:77;32229:1;32222:88;32329:4;32326:1;32319:15;32353:4;32350:1;32343:15;32369:782;32645:4;-1:-1:-1;;;;;32755:2:139;32747:6;32743:15;32732:9;32725:34;32807:2;32799:6;32795:15;32790:2;32779:9;32775:18;32768:43;;32847:6;32842:2;32831:9;32827:18;32820:34;32902:6;32894;32890:19;32885:2;32874:9;32870:18;32863:47;32947:3;32941;32930:9;32926:19;32919:32;32974:62;33031:3;33020:9;33016:19;33008:6;33000;32974:62;:::i;:::-;33085:9;33077:6;33073:22;33067:3;33056:9;33052:19;33045:51;33113:32;33138:6;33130;33113:32;:::i;:::-;33105:40;32369:782;-1:-1:-1;;;;;;;;;;32369:782:139:o;33515:305::-;33696:2;33685:9;33678:21;33659:4;33716:44;33756:2;33745:9;33741:18;33733:6;33716:44;:::i;:::-;33708:52;;33808:4;33800:6;33796:17;33791:2;33780:9;33776:18;33769:45;33515:305;;;;;:::o;33825:125::-;33890:9;;;33911:10;;;33908:36;;;33924:18;;:::i;33955:763::-;34055:10;34047:5;34041:12;34037:29;34032:3;34025:42;34116:4;34109:5;34105:16;34099:23;34092:4;34087:3;34083:14;34076:47;34172:4;34165:5;34161:16;34155:23;34148:4;34143:3;34139:14;34132:47;34228:4;34221:5;34217:16;34211:23;34204:4;34199:3;34195:14;34188:47;34007:3;34281:4;34274:5;34270:16;34264:23;34319:4;34312;34307:3;34303:14;34296:28;34345:46;34385:4;34380:3;34376:14;34362:12;34345:46;:::i;:::-;34333:58;;34439:4;34432:5;34428:16;34422:23;34487:3;34481:4;34477:14;34470:4;34465:3;34461:14;34454:38;34515;34548:4;34532:14;34515:38;:::i;:::-;34501:52;;;34601:4;34594:5;34590:16;34584:23;34651:3;34643:6;34639:16;34632:4;34627:3;34623:14;34616:40;34672;34705:6;34689:14;34672:40;:::i;34723:266::-;34908:2;34897:9;34890:21;34871:4;34928:55;34979:2;34968:9;34964:18;34956:6;34928:55;:::i;35311:413::-;35387:6;35395;35448:2;35436:9;35427:7;35423:23;35419:32;35416:52;;;35464:1;35461;35454:12;35416:52;35496:9;35490:16;35515:31;35540:5;35515:31;:::i;:::-;35615:2;35600:18;;35594:25;35565:5;;-1:-1:-1;35657:15:139;;35650:23;35638:36;;35628:64;;35688:1;35685;35678:12;35729:175;35807:13;;35860:18;35849:30;;35839:41;;35829:69;;35894:1;35891;35884:12;35909:134;35986:13;;36008:29;35986:13;36008:29;:::i;36048:460::-;36131:6;36139;36147;36200:2;36188:9;36179:7;36175:23;36171:32;36168:52;;;36216:1;36213;36206:12;36168:52;36239:39;36268:9;36239:39;:::i;:::-;36229:49;;36321:2;36310:9;36306:18;36300:25;36334:29;36357:5;36334:29;:::i;:::-;36432:2;36417:18;;36411:25;36382:5;;-1:-1:-1;36445:31:139;36411:25;36445:31;:::i;36938:441::-;36991:5;37044:3;37037:4;37029:6;37025:17;37021:27;37011:55;;37062:1;37059;37052:12;37011:55;37091:6;37085:13;37122:48;37138:31;37166:2;37138:31;:::i;37122:48::-;37195:2;37186:7;37179:19;37241:3;37234:4;37229:2;37221:6;37217:15;37213:26;37210:35;37207:55;;;37258:1;37255;37248:12;37207:55;37271:77;37345:2;37338:4;37329:7;37325:18;37318:4;37310:6;37306:17;37271:77;:::i;37384:335::-;37463:6;37516:2;37504:9;37495:7;37491:23;37487:32;37484:52;;;37532:1;37529;37522:12;37484:52;37565:9;37559:16;37598:18;37590:6;37587:30;37584:50;;;37630:1;37627;37620:12;37584:50;37653:60;37705:7;37696:6;37685:9;37681:22;37653:60;:::i;37724:740::-;37789:5;37842:3;37835:4;37827:6;37823:17;37819:27;37809:55;;37860:1;37857;37850:12;37809:55;37889:6;37883:13;37915:4;37939:60;37955:43;37995:2;37955:43;:::i;37939:60::-;38021:3;38045:2;38040:3;38033:15;38073:4;38068:3;38064:14;38057:21;;38130:4;38124:2;38121:1;38117:10;38109:6;38105:23;38101:34;38087:48;;38158:3;38150:6;38147:15;38144:35;;;38175:1;38172;38165:12;38144:35;38211:4;38203:6;38199:17;38225:210;38241:6;38236:3;38233:15;38225:210;;;38314:3;38308:10;38331:31;38356:5;38331:31;:::i;:::-;38375:18;;38413:12;;;;38258;;38225:210;;38469:1116;38566:6;38619:2;38607:9;38598:7;38594:23;38590:32;38587:52;;;38635:1;38632;38625:12;38587:52;38668:9;38662:16;38697:18;38738:2;38730:6;38727:14;38724:34;;;38754:1;38751;38744:12;38724:34;38777:22;;;;38833:4;38815:16;;;38811:27;38808:47;;;38851:1;38848;38841:12;38808:47;38877:23;;:::i;:::-;38923:32;38952:2;38923:32;:::i;:::-;38916:5;38909:47;38988:40;39024:2;39020;39016:11;38988:40;:::i;:::-;38983:2;38976:5;38972:14;38965:64;39061:40;39097:2;39093;39089:11;39061:40;:::i;:::-;39056:2;39049:5;39045:14;39038:64;39134:40;39170:2;39166;39162:11;39134:40;:::i;:::-;39129:2;39122:5;39118:14;39111:64;39214:3;39210:2;39206:12;39200:19;39244:2;39234:8;39231:16;39228:36;;;39260:1;39257;39250:12;39228:36;39297:67;39356:7;39345:8;39341:2;39337:17;39297:67;:::i;:::-;39291:3;39284:5;39280:15;39273:92;;39404:3;39400:2;39396:12;39390:19;39434:2;39424:8;39421:16;39418:36;;;39450:1;39447;39440:12;39418:36;39487:67;39546:7;39535:8;39531:2;39527:17;39487:67;:::i;:::-;39481:3;39470:15;;39463:92;-1:-1:-1;39474:5:139;38469:1116;-1:-1:-1;;;;;38469:1116:139:o;39590:271::-;39773:6;39765;39760:3;39747:33;39729:3;39799:16;;39824:13;;;39799:16;39590:271;-1:-1:-1;39590:271:139:o;39866:378::-;40077:2;40066:9;40059:21;40040:4;40097:44;40137:2;40126:9;40122:18;40114:6;40097:44;:::i;:::-;40089:52;;40177:6;40172:2;40161:9;40157:18;40150:34;40232:4;40224:6;40220:17;40215:2;40204:9;40200:18;40193:45;39866:378;;;;;;:::o;40249:496::-;40490:10;40482:6;40478:23;40467:9;40460:42;-1:-1:-1;;;;;40542:6:139;40538:55;40533:2;40522:9;40518:18;40511:83;40630:3;40625:2;40614:9;40610:18;40603:31;40441:4;40651:45;40691:3;40680:9;40676:19;40668:6;40651:45;:::i;:::-;40643:53;;40732:6;40727:2;40716:9;40712:18;40705:34;40249:496;;;;;;;:::o;40939:1533::-;41143:4;41172:2;41212;41201:9;41197:18;41242:2;41231:9;41224:21;41265:6;41300;41294:13;41331:6;41323;41316:22;41357:2;41347:12;;41390:2;41379:9;41375:18;41368:25;;41452:2;41442:6;41439:1;41435:14;41424:9;41420:30;41416:39;41490:2;41482:6;41478:15;41511:1;41521:922;41535:6;41532:1;41529:13;41521:922;;;41624:66;41612:9;41604:6;41600:22;41596:95;41591:3;41584:108;41721:6;41715:13;41751:4;41798:10;41793:2;41787:9;41783:26;41775:6;41768:42;-1:-1:-1;;;;;41865:2:139;41861;41857:11;41851:18;41847:67;41842:2;41834:6;41830:15;41823:92;41962:2;41958;41954:11;41948:18;42003:2;41998;41990:6;41986:15;41979:27;42033:47;42076:2;42068:6;42064:15;42050:12;42033:47;:::i;:::-;42019:61;;;42103:4;42158:2;42154;42150:11;42144:18;42139:2;42131:6;42127:15;42120:43;;42186:4;42239:2;42235;42231:11;42225:18;42203:40;;42292:6;42284;42280:19;42275:2;42267:6;42263:15;42256:44;;42323:40;42356:6;42340:14;42323:40;:::i;:::-;42421:12;;;;42313:50;-1:-1:-1;;;42386:15:139;;;;41557:1;41550:9;41521:922;;42477:288;42652:2;42641:9;42634:21;42615:4;42672:44;42712:2;42701:9;42697:18;42689:6;42672:44;:::i;:::-;42664:52;;42752:6;42747:2;42736:9;42732:18;42725:34;42477:288;;;;;:::o;43195:1121::-;43296:6;43349:2;43337:9;43328:7;43324:23;43320:32;43317:52;;;43365:1;43362;43355:12;43317:52;43398:9;43392:16;43427:18;43468:2;43460:6;43457:14;43454:34;;;43484:1;43481;43474:12;43454:34;43507:22;;;;43563:4;43545:16;;;43541:27;43538:47;;;43581:1;43578;43571:12;43538:47;43607:23;;:::i;:::-;43653:33;43683:2;43653:33;:::i;44321:359::-;44508:6;44503:3;44496:19;44478:3;44544:6;44538:13;44560:73;44626:6;44621:2;44616:3;44612:12;44607:2;44599:6;44595:15;44560:73;:::i;:::-;44653:16;;;;44671:2;44649:25;;44321:359;-1:-1:-1;;;44321:359:139:o;44685:::-;44888:2;44877:9;44870:21;44851:4;44908:44;44948:2;44937:9;44933:18;44925:6;44908:44;:::i;:::-;44983:2;44968:18;;44961:34;;;;-1:-1:-1;45026:2:139;45011:18;45004:34;44900:52;44685:359;-1:-1:-1;44685:359:139:o;45049:244::-;45206:2;45195:9;45188:21;45169:4;45226:61;45283:2;45272:9;45268:18;45260:6;45252;45226:61;:::i;46485:196::-;46524:3;46552:5;46542:39;;46561:18;;:::i;:::-;-1:-1:-1;;;46597:78:139;;46485:196::o;46686:377::-;46879:2;46868:9;46861:21;46842:4;46905:44;46945:2;46934:9;46930:18;46922:6;46905:44;:::i;:::-;46997:9;46989:6;46985:22;46980:2;46969:9;46965:18;46958:50;47025:32;47050:6;47042;47025:32;:::i;47627:537::-;47866:2;47855:9;47848:21;47829:4;47892:44;47932:2;47921:9;47917:18;47909:6;47892:44;:::i;:::-;47984:9;47976:6;47972:22;47967:2;47956:9;47952:18;47945:50;48018:32;48043:6;48035;48018:32;:::i;:::-;48004:46;;48098:9;48090:6;48086:22;48081:2;48070:9;48066:18;48059:50;48126:32;48151:6;48143;48126:32;:::i;48169:570::-;48418:3;48407:9;48400:22;48381:4;48445:45;48485:3;48474:9;48470:19;48462:6;48445:45;:::i;:::-;48538:9;48530:6;48526:22;48521:2;48510:9;48506:18;48499:50;48566:32;48591:6;48583;48566:32;:::i;:::-;48558:40;;;48634:6;48629:2;48618:9;48614:18;48607:34;-1:-1:-1;;;;;48681:6:139;48677:55;48672:2;48661:9;48657:18;48650:83;48169:570;;;;;;;:::o;49566:786::-;49891:10;49883:6;49879:23;49868:9;49861:42;49842:4;-1:-1:-1;;;;;50012:2:139;50004:6;50000:15;49995:2;49984:9;49980:18;49973:43;50052:3;50047:2;50036:9;50032:18;50025:31;50079:45;50119:3;50108:9;50104:19;50096:6;50079:45;:::i;:::-;50160:6;50155:2;50144:9;50140:18;50133:34;50216:2;50208:6;50204:15;50198:3;50187:9;50183:19;50176:44;50269:9;50261:6;50257:22;50251:3;50240:9;50236:19;50229:51;50297:49;50339:6;50331;50323;50297:49;:::i;:::-;50289:57;49566:786;-1:-1:-1;;;;;;;;;;;49566:786:139:o;51584:184::-;51636:77;51633:1;51626:88;51733:4;51730:1;51723:15;51757:4;51754:1;51747:15;52264:850;52596:4;-1:-1:-1;;;;;52706:2:139;52698:6;52694:15;52683:9;52676:34;52758:2;52750:6;52746:15;52741:2;52730:9;52726:18;52719:43;52798:3;52793:2;52782:9;52778:18;52771:31;52825:57;52877:3;52866:9;52862:19;52854:6;52825:57;:::i;:::-;52930:2;52922:6;52918:15;52913:2;52902:9;52898:18;52891:43;52983:2;52975:6;52971:15;52965:3;52954:9;52950:19;52943:44;53036:9;53028:6;53024:22;53018:3;53007:9;53003:19;52996:51;53064:44;53101:6;53093;53064:44;:::i;53256:1408::-;53714:10;53706:6;53702:23;53691:9;53684:42;53665:4;53745:2;53795:4;53787:6;53783:17;53778:2;53767:9;53763:18;53756:45;53837:3;53832:2;53821:9;53817:18;53810:31;53864:57;53916:3;53905:9;53901:19;53893:6;53864:57;:::i;:::-;-1:-1:-1;;;;;54018:15:139;;;54013:2;53998:18;;53991:43;54071:22;;;54065:3;54050:19;;54043:51;54143:13;;54165:22;;;-1:-1:-1;54227:17:139;;;54215:2;54267:16;;;;54203:15;;54143:13;54311:177;54325:6;54322:1;54319:13;54311:177;;;54390:13;;54386:22;;54374:35;;54476:1;54464:14;;;;54429:12;;;;54340:9;54311:177;;;-1:-1:-1;;29158:18:139;29147:30;;54538:3;54523:19;;29135:43;54589:9;54584:3;54580:19;54574:3;54563:9;54559:19;54552:48;54617:41;54654:3;54646:6;54617:41;:::i;:::-;54609:49;53256:1408;-1:-1:-1;;;;;;;;;;;;;53256:1408:139:o;55871:2095::-;56097:4;56126:2;56166;56155:9;56151:18;56196:2;56185:9;56178:21;56219:6;56254;56248:13;56285:6;56277;56270:22;56311:2;56301:12;;56344:2;56333:9;56329:18;56322:25;;56406:2;56396:6;56393:1;56389:14;56378:9;56374:30;56370:39;56444:2;56436:6;56432:15;56465:1;56475:1462;56489:6;56486:1;56483:13;56475:1462;;;56548:66;56643:22;;;56639:31;;56627:44;;56694:13;;56739:9;;56750:10;56735:26;56720:42;;56801:11;;56795:18;56833:15;;;56826:27;;;56894:19;;56915:18;56890:44;56873:15;;;56866:69;56976:21;;;56970:28;57046:4;57087:23;;;57021:2;57070:15;;;57063:48;;;;57152:21;;;57146:28;57237:23;;57197:3;57220:15;;;57213:48;;;;57302:21;;;57296:28;57387:23;;;57347:3;57370:15;;;57363:48;;;;57452:21;;;57446:28;57497:4;57521:15;;;57514:27;57446:28;57568:73;57636:3;57624:16;;57446:28;57568:73;:::i;:::-;57682:21;;57676:28;57746:19;;;57742:28;;57736:3;57724:16;;57717:54;57676:28;57554:87;-1:-1:-1;57794:63:139;57554:87;57676:28;57794:63;:::i;:::-;57915:12;;;;57784:73;-1:-1:-1;;;57880:15:139;;;;-1:-1:-1;56511:1:139;56504:9;56475:1462;;57971:1049;58236:2;58288:21;;;58358:13;;58261:18;;;58380:22;;;58207:4;;58236:2;58421;;58439:18;;;;58480:15;;;58207:4;58523:471;58537:6;58534:1;58531:13;58523:471;;;58596:13;;58671:9;;58632:10;58667:18;;;58655:31;;58725:11;;;58719:18;58775:19;;58771:28;;;58757:12;;;58750:50;58844:21;;58838:28;-1:-1:-1;;;;;58834:77:139;58820:12;;;58813:99;58941:4;58932:14;;;;58969:15;;;;58559:1;58552:9;58523:471;;;-1:-1:-1;59011:3:139;;57971:1049;-1:-1:-1;;;;;;;57971:1049:139:o;59025:251::-;59095:6;59148:2;59136:9;59127:7;59123:23;59119:32;59116:52;;;59164:1;59161;59154:12;59116:52;59196:9;59190:16;59215:31;59240:5;59215:31;:::i;59281:274::-;59353:34;59419:10;;;59431;;;59415:27;59462:20;;;;59353:34;59501:24;;;59491:58;;59529:18;;:::i;:::-;59491:58;;59281:274;;;;:::o;59560:1093::-;59789:2;59841:21;;;59911:13;;59814:18;;;59933:22;;;59760:4;;59789:2;59974;;59992:18;;;;60033:15;;;59760:4;60076:551;60090:6;60087:1;60084:13;60076:551;;;60149:13;;60224:9;;60185:10;60220:18;;;60208:31;;60278:11;;;60272:18;60328:19;;60349:34;60324:60;60310:12;;;60303:82;60429:21;;;60423:28;60453:18;60419:53;60405:12;;;60398:75;60517:21;;60511:28;60507:37;60502:2;60493:12;;60486:59;60574:4;60565:14;;;;60602:15;;;;60112:1;60105:9;60076:551;;60658:2127;60892:4;60921:2;60961;60950:9;60946:18;60991:2;60980:9;60973:21;61014:6;61049;61043:13;61080:6;61072;61065:22;61106:2;61096:12;;61139:2;61128:9;61124:18;61117:25;;61201:2;61191:6;61188:1;61184:14;61173:9;61169:30;61165:39;61239:2;61231:6;61227:15;61260:1;61270:1486;61284:6;61281:1;61278:13;61270:1486;;;61343:66;61438:22;;;61434:31;;61422:44;;61489:13;;61534:9;;61545:10;61530:26;61515:42;;61596:11;;61590:18;61628:15;;;61621:27;;;61689:19;;-1:-1:-1;;;;;61685:68:139;61668:15;;;61661:93;61795:21;;;61789:28;61865:4;61906:23;;;61840:2;61889:15;;;61882:48;;;;61971:21;;;61965:28;62056:23;;62016:3;62039:15;;;62032:48;;;;62121:21;;;62115:28;62206:23;;;62166:3;62189:15;;;62182:48;;;;62271:21;;;62265:28;62316:4;62340:15;;;62333:27;62265:28;62387:73;62455:3;62443:16;;62265:28;62387:73;:::i;:::-;62501:21;;62495:28;62565:19;;;62561:28;;62555:3;62543:16;;62536:54;62495:28;62373:87;-1:-1:-1;62613:63:139;62373:87;62495:28;62613:63;:::i;:::-;62734:12;;;;62603:73;-1:-1:-1;;;62699:15:139;;;;-1:-1:-1;61306:1:139;61299:9;61270:1486;;62790:1355;63025:2;63077:21;;;63147:13;;63050:18;;;63169:22;;;62996:4;;63025:2;63210;;63228:18;;;;63269:15;;;62996:4;63312:807;63326:6;63323:1;63320:13;63312:807;;;63385:13;;63427:9;;63438:10;63423:26;63411:39;;63489:11;;;63483:18;63524;63576:21;;;63562:12;;;63555:43;63642:11;;;63636:18;63632:27;63618:12;;;63611:49;63683:4;63731:11;;;63725:18;63745:6;63721:31;63707:12;;;63700:53;63776:4;63821:11;;;63815:18;63856:34;63924:23;;;63910:12;;;63903:45;;;;63971:4;64019:11;;;64013:18;64009:27;63995:12;;;63988:49;64066:4;64057:14;;;;64094:15;;;;63348:1;63341:9;63312:807;;64150:1033;64385:2;64437:21;;;64507:13;;64410:18;;;64529:22;;;64356:4;;64385:2;64570;;64588:18;;;;64629:15;;;64356:4;64672:485;64686:6;64683:1;64680:13;64672:485;;;64745:13;;64787:9;;64798:10;64783:26;64771:39;;64854:11;;;64848:18;64868;64844:43;64830:12;;;64823:65;64932:11;;;64926:18;64946:6;64922:31;64908:12;;;64901:53;64977:4;65025:11;;;65019:18;65039:34;65015:59;65001:12;;;64994:81;65104:4;65095:14;;;;65132:15;;;;64708:1;64701:9;64672:485;;65188:843;65447:2;65499:21;;;65569:13;;65472:18;;;65591:22;;;65418:4;;65447:2;65632;;65650:18;;;;65691:15;;;65418:4;65734:271;65748:6;65745:1;65742:13;65734:271;;;65807:13;;65849:9;;65860:10;65845:26;65833:39;;65912:11;;65906:18;65892:12;;;65885:40;65945:12;;;;65980:15;;;;65770:1;65763:9;65734:271;;67828:737;29265:12;;29279:10;29261:29;29249:42;;29340:4;29329:16;;;29323:23;29307:14;;;29300:47;29400:4;29389:16;;;29383:23;29408:18;29379:48;29363:14;;;29356:72;-1:-1:-1;;;;;68228:6:139;68224:55;68219:2;68208:9;68204:18;68197:83;68317:6;68311:3;68300:9;68296:19;68289:35;68361:3;68355;68344:9;68340:19;68333:32;68126:4;68388:62;68445:3;68434:9;68430:19;68422:6;68414;68388:62;:::i;:::-;68499:9;68491:6;68487:22;68481:3;68470:9;68466:19;68459:51;68527:32;68552:6;68544;68527:32;:::i;:::-;68519:40;67828:737;-1:-1:-1;;;;;;;;;67828:737:139:o;68570:517::-;68671:2;68666:3;68663:11;68660:421;;;68707:5;68704:1;68697:16;68751:4;68748:1;68738:18;68821:2;68809:10;68805:19;68802:1;68798:27;68792:4;68788:38;68857:4;68845:10;68842:20;68839:47;;;-1:-1:-1;68880:4:139;68839:47;68935:2;68930:3;68926:12;68923:1;68919:20;68913:4;68909:31;68899:41;;68990:81;69008:2;69001:5;68998:13;68990:81;;;69067:1;69053:16;;69034:1;69023:13;68990:81;;69323:1325;69445:18;69440:3;69437:27;69434:53;;;69467:18;;:::i;:::-;69496:93;69585:3;69545:38;69577:4;69571:11;69545:38;:::i;:::-;69539:4;69496:93;:::i;:::-;69615:1;69640:2;69635:3;69632:11;69657:1;69652:738;;;;70434:1;70451:3;70448:93;;;-1:-1:-1;70507:19:139;;;70494:33;70448:93;-1:-1:-1;;69220:1:139;69216:11;;;69212:84;69208:89;69198:100;69304:1;69300:11;;;69195:117;70554:78;;69625:1017;;69652:738;53203:1;53196:14;;;53240:4;53227:18;;-1:-1:-1;;69688:76:139;;;69873:229;69887:7;69884:1;69881:14;69873:229;;;69976:19;;;69963:33;69948:49;;70083:4;70068:20;;;;70036:1;70024:14;;;;69903:12;69873:229;;;69877:3;70130;70121:7;70118:16;70115:219;;;-1:-1:-1;;70244:3:139;70238;70235:1;70231:11;70227:21;70223:94;70219:99;70206:9;70201:3;70197:19;70184:33;70180:139;70172:6;70165:155;70115:219;;;70377:1;70371:3;70368:1;70364:11;70360:19;70354:4;70347:33;69625:1017;;69323:1325;;;:::o;70844:357::-;70962:12;;71009:4;70998:16;;;70992:23;;70962:12;71027:16;;71024:171;;;-1:-1:-1;;71101:4:139;71097:17;;;;71094:1;71090:25;71086:98;71075:110;;70844:357;-1:-1:-1;70844:357:139:o;71206:337::-;71419:2;71408:9;71401:21;71382:4;71439:55;71490:2;71479:9;71475:18;71467:6;71439:55;:::i;71548:331::-;71653:9;71664;71706:8;71694:10;71691:24;71688:44;;;71728:1;71725;71718:12;71688:44;71757:6;71747:8;71744:20;71741:40;;;71777:1;71774;71767:12;71741:40;-1:-1:-1;;71803:23:139;;;71848:25;;;;;-1:-1:-1;71548:331:139:o;71884:369::-;72042:66;72004:19;;72126:11;;;;72157:1;72149:10;;72146:101;;;72218:1;72214:11;;;;72211:1;72207:19;72203:28;;;72195:37;72191:46;;;;71884:369;-1:-1:-1;;71884:369:139:o;72665:517::-;72752:6;72760;72768;72821:2;72809:9;72800:7;72796:23;72792:32;72789:52;;;72837:1;72834;72827:12;72789:52;72869:9;72863:16;72888:31;72913:5;72888:31;:::i;:::-;72988:2;72973:18;;72967:25;72938:5;;-1:-1:-1;73001:32:139;72967:25;73001:32;:::i;:::-;73104:2;73089:18;;73083:25;73052:7;;-1:-1:-1;73117:33:139;73083:25;73117:33;:::i;73187:315::-;73307:19;;73346:2;73338:11;;73335:161;;;-1:-1:-1;;73407:2:139;73403:12;;;73400:1;73396:20;73392:93;73381:105;73187:315;;;;:::o;73507:369::-;73665:66;73627:19;;73749:11;;;;73780:1;73772:10;;73769:101;;;73841:1;73837:11;;;;73834:1;73830:19;73826:28;;;73818:37;73814:46;;;;73507:369;-1:-1:-1;;73507:369:139:o;74042:720::-;74401:3;74390:9;74383:22;74364:4;74428:50;74473:3;74462:9;74458:19;73958:1;73946:14;;73992:10;73985:4;73976:14;;73969:34;74028:2;74019:12;;73881:156;74428:50;74526:9;74518:6;74514:22;74509:2;74498:9;74494:18;74487:50;74554:37;74584:6;73958:1;73946:14;;73992:10;73985:4;73976:14;;73969:34;74028:2;74019:12;;73881:156;74554:37;74546:45;;;-1:-1:-1;;;;;74700:2:139;74692:6;74688:15;74683:2;74672:9;74668:18;74661:43;74752:2;74744:6;74740:15;74735:2;74724:9;74720:18;74713:43;;74042:720;;;;;:::o;74928:::-;75287:3;75276:9;75269:22;75250:4;75314:50;75359:3;75348:9;75344:19;74844:1;74832:14;;74878:10;74871:4;74862:14;;74855:34;74914:2;74905:12;;74767:156;75314:50;75412:9;75404:6;75400:22;75395:2;75384:9;75380:18;75373:50;75440:37;75470:6;74844:1;74832:14;;74878:10;74871:4;74862:14;;74855:34;74914:2;74905:12;;74767:156;75814:720;76173:3;76162:9;76155:22;76136:4;76200:50;76245:3;76234:9;76230:19;75730:1;75718:14;;75764:10;75757:4;75748:14;;75741:34;75800:2;75791:12;;75653:156;76200:50;76298:9;76290:6;76286:22;76281:2;76270:9;76266:18;76259:50;76326:37;76356:6;75730:1;75718:14;;75764:10;75757:4;75748:14;;75741:34;75800:2;75791:12;;75653:156;76700:617;77031:2;77020:9;77013:21;76994:4;77057:49;77102:2;77091:9;77087:18;76616:1;76604:14;;76650:10;76643:4;76634:14;;76627:34;76686:2;76677:12;;76539:156;77057:49;77154:9;77146:6;77142:22;77137:2;77126:9;77122:18;77115:50;77182:37;77212:6;76616:1;76604:14;;76650:10;76643:4;76634:14;;76627:34;76686:2;76677:12;;76539:156;77182:37;77174:45;;;-1:-1:-1;;;;;77259:6:139;77255:55;77250:2;77239:9;77235:18;77228:83;76700:617;;;;:::o;77895:720::-;78254:3;78243:9;78236:22;78217:4;78281:50;78326:3;78315:9;78311:19;77811:1;77799:14;;77845:10;77838:4;77829:14;;77822:34;77881:2;77872:12;;77734:156;78281:50;78379:9;78371:6;78367:22;78362:2;78351:9;78347:18;78340:50;78407:37;78437:6;77811:1;77799:14;;77845:10;77838:4;77829:14;;77822:34;77881:2;77872:12;;77734:156;78781:720;79140:3;79129:9;79122:22;79103:4;79167:50;79212:3;79201:9;79197:19;78697:1;78685:14;;78731:10;78724:4;78715:14;;78708:34;78767:2;78758:12;;78620:156;79167:50;79265:9;79257:6;79253:22;79248:2;79237:9;79233:18;79226:50;79293:37;79323:6;78697:1;78685:14;;78731:10;78724:4;78715:14;;78708:34;78767:2;78758:12;;78620:156;83223:1224;83441:4;83470:2;83510;83499:9;83495:18;83540:2;83529:9;83522:21;83563:6;83598;83592:13;83629:6;83621;83614:22;83655:2;83645:12;;83688:2;83677:9;83673:18;83666:25;;83750:2;83740:6;83737:1;83733:14;83722:9;83718:30;83714:39;83788:2;83780:6;83776:15;83809:1;83819:599;83833:6;83830:1;83827:13;83819:599;;;83898:22;;;83922:66;83894:95;83882:108;;84013:13;;84085:9;;84096:10;84081:26;84066:42;;84155:11;;;84149:18;84169:6;84145:31;84128:15;;;84121:56;84216:11;;84210:18;84049:4;84248:15;;;84241:27;;;84291:47;84322:15;;;84210:18;84291:47;:::i;:::-;84396:12;;;;84281:57;-1:-1:-1;;;84361:15:139;;;;83855:1;83848:9;83819:599;;84784:287;84913:3;84951:6;84945:13;84967:66;85026:6;85021:3;85014:4;85006:6;85002:17;84967:66;:::i;:::-;85049:16;;;;;84784:287;-1:-1:-1;;84784:287:139:o;85076:492::-;85251:3;85289:6;85283:13;85305:66;85364:6;85359:3;85352:4;85344:6;85340:17;85305:66;:::i;:::-;85434:13;;85393:16;;;;85456:70;85434:13;85393:16;85503:4;85491:17;;85456:70;:::i;:::-;85542:20;;85076:492;-1:-1:-1;;;;85076:492:139:o;85983:517::-;86070:6;86078;86086;86139:2;86127:9;86118:7;86114:23;86110:32;86107:52;;;86155:1;86152;86145:12;86107:52;86187:9;86181:16;86206:30;86230:5;86206:30;:::i;:::-;86305:2;86290:18;;86284:25;86255:5;;-1:-1:-1;86318:33:139;86284:25;86318:33;:::i;86505:361::-;86710:6;86699:9;86692:25;86753:6;86748:2;86737:9;86733:18;86726:34;86796:2;86791;86780:9;86776:18;86769:30;86673:4;86816:44;86856:2;86845:9;86841:18;86833:6;86816:44;:::i;87517:369::-;87603:6;87611;87619;87672:2;87660:9;87651:7;87647:23;87643:32;87640:52;;;87688:1;87685;87678:12;87640:52;87720:9;87714:16;87739:29;87762:5;87739:29;:::i;:::-;87832:2;87817:18;;87811:25;87876:2;87861:18;;;87855:25;87787:5;;87811:25;;-1:-1:-1;87855:25:139;87517:369;-1:-1:-1;;;87517:369:139:o;88698:312::-;88777:6;88785;88838:2;88826:9;88817:7;88813:23;88809:32;88806:52;;;88854:1;88851;88844:12;88806:52;88886:9;88880:16;88905:31;88930:5;88905:31;:::i;:::-;89000:2;88985:18;;;;88979:25;88955:5;;88979:25;;-1:-1:-1;;;88698:312:139:o;89425:385::-;89504:6;89512;89565:2;89553:9;89544:7;89540:23;89536:32;89533:52;;;89581:1;89578;89571:12;89533:52;89613:9;89607:16;89632:31;89657:5;89632:31;:::i;:::-;89732:2;89717:18;;89711:25;89682:5;;-1:-1:-1;89745:33:139;89711:25;89745:33;:::i;89815:652::-;90076:66;90067:6;90062:3;90058:16;90054:89;90049:3;90042:102;90195:66;90186:6;90181:3;90177:16;90173:89;90169:1;90164:3;90160:11;90153:110;90293:6;90288:2;90283:3;90279:12;90272:28;90024:3;90329:6;90323:13;90345:75;90413:6;90408:2;90403:3;90399:12;90392:4;90384:6;90380:17;90345:75;:::i;:::-;90440:16;;;;90458:2;90436:25;;89815:652;-1:-1:-1;;;;;89815:652:139:o;90472:558::-;90569:6;90577;90630:2;90618:9;90609:7;90605:23;90601:32;90598:52;;;90646:1;90643;90636:12;90598:52;90679:9;90673:16;90708:18;90749:2;90741:6;90738:14;90735:34;;;90765:1;90762;90755:12;90735:34;90788:60;90840:7;90831:6;90820:9;90816:22;90788:60;:::i;:::-;90778:70;;90894:2;90883:9;90879:18;90873:25;90857:41;;90923:2;90913:8;90910:16;90907:36;;;90939:1;90936;90929:12;90907:36;;90962:62;91016:7;91005:8;90994:9;90990:24;90962:62;:::i;:::-;90952:72;;;90472:558;;;;;:::o;91328:520::-;91423:6;91431;91439;91492:2;91480:9;91471:7;91467:23;91463:32;91460:52;;;91508:1;91505;91498:12;91460:52;91540:9;91534:16;91559:29;91582:5;91559:29;:::i;:::-;91656:2;91641:18;;91635:25;91607:5;;-1:-1:-1;91683:18:139;91672:30;;91669:50;;;91715:1;91712;91705:12;91669:50;91738:60;91790:7;91781:6;91770:9;91766:22;91738:60;:::i;:::-;91728:70;;;91838:2;91827:9;91823:18;91817:25;91807:35;;91328:520;;;;;:::o;91853:197::-;91921:34;91975:10;;;91987;;;91971:27;;92010:11;;;92007:37;;;92024:18;;:::i;93285:172::-;93352:10;93382;;;93394;;;93378:27;;93417:11;;;93414:37;;;93431:18;;:::i;93983:369::-;94141:66;94103:19;;94225:11;;;;94256:1;94248:10;;94245:101;;;94317:1;94313:11;;;;94310:1;94306:19;94302:28;;;94294:37;94290:46;;;;93983:369;-1:-1:-1;;93983:369:139:o;94357:372::-;94516:66;94478:19;;94600:11;;;;94631:2;94623:11;;94620:103;;;94693:2;94689:12;;;;94686:1;94682:20;94678:29;;;94670:38;94666:47;;;;94357:372;-1:-1:-1;;94357:372:139:o",
+ "linkReferences": {}
+ },
+ "methodIdentifiers": {
+ "ARB_EID()": "5e42c9b2",
+ "BAD_EID()": "0fcaecfe",
+ "DEFAULT_CHANNEL_ID()": "51aa318b",
+ "ETH_EID()": "25996dae",
+ "EVM_COMPUTE_MAP_BPS()": "0afba868",
+ "EVM_COMPUTE_REDUCE_FEE_USD()": "82411c77",
+ "EVM_REQUEST_FEE_USD()": "1766f5a4",
+ "INITIAL_BALANCE()": "14525bce",
+ "IS_TEST()": "fa7626d4",
+ "MAP_REDUCE_COMPUTE_TYPES()": "b76bada5",
+ "NATIVE_TOKEN_PRICE_USD()": "699cbade",
+ "OPTIONS_LZRECEIVE_100k()": "178928d3",
+ "POL_EID()": "1f3280c5",
+ "TOKENS_TO_SEND()": "8c5e9f74",
+ "TREASURY_GAS_CAP()": "baead19c",
+ "TREASURY_GAS_FOR_FEE_CAP()": "b1dcf5c8",
+ "VaultComposerSyncArb()": "90a606f5",
+ "arbEndpoint()": "09c885c9",
+ "arbExecutor()": "677d4175",
+ "assertGuid(bytes,bytes32)": "997cff1b",
+ "assetOFT_arb()": "0c003ff7",
+ "assetOFT_eth()": "536e8d3a",
+ "assetOFT_pol()": "67d53a00",
+ "createEndpoints(uint8,uint8,address[])": "d6d62497",
+ "decodeLzComposeOption(bytes)": "518e8ab0",
+ "decodeLzReadOption(bytes)": "9751ca86",
+ "decodeLzReceiveOption(bytes)": "f93e1d61",
+ "decodeNativeDropOption(bytes)": "b954fdf6",
+ "excludeArtifacts()": "b5508aa9",
+ "excludeContracts()": "e20c9f71",
+ "excludeSelectors()": "b0464fdc",
+ "excludeSenders()": "1ed7831c",
+ "executorValueCap()": "2113ce62",
+ "failed()": "ba414fa6",
+ "getNextInflightPacket(uint16,bytes32)": "7982cf42",
+ "hasPendingPackets(uint16,bytes32)": "5ea0fefe",
+ "lzCompose(bytes,bytes,bytes32,address)": "a29c8984",
+ "lzCompose(uint32,address,bytes,bytes32,address,bytes)": "3bbd6a94",
+ "lzReadReceive(bytes,bytes,bytes)": "0a69faa9",
+ "lzReceive(bytes,bytes)": "ec53eaa0",
+ "msgValueToFail()": "556257df",
+ "msgValueToPass()": "f5e4efb5",
+ "nextExecutorOption(bytes,uint256)": "6e1775e3",
+ "registerEndpoint(address)": "ae6ce400",
+ "schedulePacket(bytes,bytes)": "faed6c58",
+ "setExecutorValueCap(uint128)": "defd9da6",
+ "setUp()": "0a9254e4",
+ "setUpEndpoints(uint8,uint8)": "1cc46525",
+ "setupOApps(bytes,uint8,uint8)": "2a35d250",
+ "shareOFT_arb()": "375591d7",
+ "shareOFT_eth()": "7f2e5936",
+ "shareOFT_pol()": "3cae7b8a",
+ "targetArtifactSelectors()": "66d9a9a0",
+ "targetArtifacts()": "85226c81",
+ "targetContracts()": "3f7286f4",
+ "targetInterfaces()": "2ade3880",
+ "targetSelectors()": "916a17c6",
+ "targetSenders()": "3e5e3c23",
+ "test_InsufficientMsgValue_causes_revert_no_refund()": "45f81ff4",
+ "test_deployment()": "1015594a",
+ "test_lzCompose_fail_invalid_payload_auto_refunds()": "5f85148e",
+ "test_lzCompose_fail_not_enough_value_for_refund_complete_revert()": "99ce8e8d",
+ "test_lzCompose_pass_dst_is_hub()": "031c3463",
+ "test_lzCompose_pass_dst_is_hub_no_msgValue_causes_refund()": "9e0e8c55",
+ "test_lzCompose_pass_dst_not_hub()": "9fe4ee91",
+ "test_lzCompose_slippage_causes_refund()": "5fe1413f",
+ "test_onlyEndpoint()": "f5cf6390",
+ "test_onlyOFT(address)": "01acc0e2",
+ "userA()": "deb22e9a",
+ "userB()": "cb1a295f",
+ "validatePacket(bytes,bytes)": "60197889",
+ "vault_arb()": "7a8b5d98",
+ "verifyPackets(uint32,address)": "090852b6",
+ "verifyPackets(uint32,bytes32)": "b752b72a",
+ "verifyPackets(uint32,bytes32,uint256,address,bytes)": "834bd159",
+ "wireOApps(address[])": "703ca254",
+ "wireReadOApps(address[],uint32[])": "65449eb0"
+ },
+ "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Executor_InvalidLzComposeOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReadOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReceiveOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidNativeDropOption\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"optionType\",\"type\":\"uint16\"}],\"name\":\"InvalidOptionType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"}],\"name\":\"Refunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"}],\"name\":\"Sent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ARB_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BAD_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_CHANNEL_ID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_COMPUTE_MAP_BPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_COMPUTE_REDUCE_FEE_USD\",\"outputs\":[{\"internalType\":\"uint120\",\"name\":\"\",\"type\":\"uint120\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_REQUEST_FEE_USD\",\"outputs\":[{\"internalType\":\"uint120\",\"name\":\"\",\"type\":\"uint120\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BALANCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAP_REDUCE_COMPUTE_TYPES\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_TOKEN_PRICE_USD\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIONS_LZRECEIVE_100k\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POL_EID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKENS_TO_SEND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREASURY_GAS_CAP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREASURY_GAS_FOR_FEE_CAP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VaultComposerSyncArb\",\"outputs\":[{\"internalType\":\"contract VaultComposerSync\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbEndpoint\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbExecutor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"}],\"name\":\"assertGuid\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assetOFT_arb\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assetOFT_eth\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assetOFT_pol\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_endpointNum\",\"type\":\"uint8\"},{\"internalType\":\"enum TestHelperOz5.LibraryType\",\"name\":\"_libraryType\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"nativeTokenAddresses\",\"type\":\"address[]\"}],\"name\":\"createEndpoints\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzComposeOption\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzReadOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"size\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzReceiveOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeNativeDropOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executorValueCap\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"getNextInflightPacket\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"packetBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"hasPendingPackets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_composerMsg\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_composer\",\"type\":\"address\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"lzReadReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgValueToFail\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgValueToPass\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_cursor\",\"type\":\"uint256\"}],\"name\":\"nextExecutorOption\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"optionType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"option\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract EndpointV2Mock\",\"name\":\"endpoint\",\"type\":\"address\"}],\"name\":\"registerEndpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"schedulePacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_valueCap\",\"type\":\"uint128\"}],\"name\":\"setExecutorValueCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_endpointNum\",\"type\":\"uint8\"},{\"internalType\":\"enum TestHelperOz5.LibraryType\",\"name\":\"_libraryType\",\"type\":\"uint8\"}],\"name\":\"setUpEndpoints\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_oappCreationCode\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"_startEid\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"_oappNum\",\"type\":\"uint8\"}],\"name\":\"setupOApps\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shareOFT_arb\",\"outputs\":[{\"internalType\":\"contract MockOFTAdapter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shareOFT_eth\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shareOFT_pol\",\"outputs\":[{\"internalType\":\"contract MockOFT\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_InsufficientMsgValue_causes_revert_no_refund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_deployment\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_lzCompose_fail_invalid_payload_auto_refunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_lzCompose_fail_not_enough_value_for_refund_complete_revert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_lzCompose_pass_dst_is_hub\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_lzCompose_pass_dst_is_hub_no_msgValue_causes_refund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_lzCompose_pass_dst_not_hub\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_lzCompose_slippage_causes_refund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_onlyEndpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oft\",\"type\":\"address\"}],\"name\":\"test_onlyOFT\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"userA\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"userB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"validatePacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault_arb\",\"outputs\":[{\"internalType\":\"contract MockVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_dstAddress\",\"type\":\"address\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_packetAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_composer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"}],\"name\":\"wireOApps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"channels\",\"type\":\"uint32[]\"}],\"name\":\"wireReadOApps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}]},\"events\":{\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"createEndpoints(uint8,uint8,address[])\":{\"params\":{\"_endpointNum\":\"The number of endpoints to create.\",\"_libraryType\":\"The type of message library to use (UltraLightNode or SimpleMessageLib).\"}},\"schedulePacket(bytes,bytes)\":{\"details\":\"Adds the packet to the front of the queue and stores its options for later retrieval.\",\"params\":{\"_options\":\"The options associated with the packet, used during delivery.\",\"_packetBytes\":\"The packet data to be scheduled.\"}},\"setExecutorValueCap(uint128)\":{\"details\":\"set executorValueCap if more than 0.1 ether is necessarythis must be called prior to setUpEndpoints() if the value is to be used\",\"params\":{\"_valueCap\":\"amount executor can pass as msg.value to lzReceive()\"}},\"setUp()\":{\"details\":\"Initializes test environment setup, to be overridden by specific tests.\"},\"setupOApps(bytes,uint8,uint8)\":{\"params\":{\"_oappCreationCode\":\"The bytecode for creating OApp contracts.\",\"_oappNum\":\"The number of OApps to set up.\",\"_startEid\":\"The starting endpoint ID for OApp setup.\"},\"returns\":{\"oapps\":\"An array of addresses for the deployed OApps.\"}},\"verifyPackets(uint32,address)\":{\"details\":\"verify packets to destination chain's OApp address.\",\"params\":{\"_dstAddress\":\"The destination address.\",\"_dstEid\":\"The destination endpoint ID.\"}},\"verifyPackets(uint32,bytes32)\":{\"details\":\"Calls an overloaded version of verifyPackets with default values for packet amount and composer address.\",\"params\":{\"_dstAddress\":\"The destination address in bytes32 format.\",\"_dstEid\":\"The destination chain's endpoint ID.\"}},\"verifyPackets(uint32,bytes32,uint256,address,bytes)\":{\"details\":\"dst UA receive/execute packetswill NOT work calling this directly with composer IF the composed payload is different from the lzReceive msg payload\"},\"wireOApps(address[])\":{\"details\":\"Sets each OApp as a peer to every other OApp in the provided array, except itself.\",\"params\":{\"oapps\":\"An array of addresses representing the deployed OApp instances.\"}},\"wireReadOApps(address[],uint32[])\":{\"details\":\"Sets each OApp to read from the provided channels.\",\"params\":{\"channels\":\"An array of channel IDs to set as read channels.\",\"oapps\":\"An array of addresses representing the deployed OApp instances.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"Sent(bytes32)\":{\"notice\":\"========================== EVENTS =====================================\"}},\"kind\":\"user\",\"methods\":{\"createEndpoints(uint8,uint8,address[])\":{\"notice\":\"Sets up endpoints for testing.\"},\"schedulePacket(bytes,bytes)\":{\"notice\":\"Schedules a packet for delivery, storing it in the packets queue.\"},\"setupOApps(bytes,uint8,uint8)\":{\"notice\":\"Sets up mock OApp contracts for testing.\"},\"verifyPackets(uint32,bytes32)\":{\"notice\":\"Verifies and processes packets destined for a specific chain and user address.\"},\"wireOApps(address[])\":{\"notice\":\"Configures the peers between multiple OApp instances.\"},\"wireReadOApps(address[],uint32[])\":{\"notice\":\"Configures the read channels for multiple OApp instances.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/vault-sync/VaultComposerSync_Unit.t.sol\":\"VaultComposerSyncUnitTest\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":20000},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/\"]},\"sources\":{\"contracts/VaultComposerSync.sol\":{\"keccak256\":\"0xbbba257858c39e33201067897be32e7e2dac636726498e4f394115c2bc3bf93b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ff9ce61a8cd70dfea73b632241c852a040c0ae2c9470c7add66571cc32e0246\",\"dweb:/ipfs/QmauMyGN1mGiv9pLEtnZbXjpd8J49AzV6W8bSLQ9Uf2LEH\"]},\"contracts/interfaces/IVaultComposerSync.sol\":{\"keccak256\":\"0x86597121d142cdd98d7399abfe1109ab4052d570056758f71193b8a614c289cd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bcfb48d7d685e5e4d46dc16e3a74d18341c489ea4efcab2e593ec3b3f3cca48\",\"dweb:/ipfs/QmQG5PGYqVDrxBeGy7vcYKkk3jjqt3mLJ9kJpjwcRQzWZu\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":{\"keccak256\":\"0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2\",\"dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol\":{\"keccak256\":\"0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497\",\"dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":{\"keccak256\":\"0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79\",\"dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol\":{\"keccak256\":\"0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2\",\"dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":{\"keccak256\":\"0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc\",\"dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":{\"keccak256\":\"0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc\",\"dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":{\"keccak256\":\"0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899\",\"dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol\":{\"keccak256\":\"0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8\",\"dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":{\"keccak256\":\"0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691\",\"dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol\":{\"keccak256\":\"0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda\",\"dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol\":{\"keccak256\":\"0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d\",\"dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol\":{\"keccak256\":\"0xd40d91e8173cdb5bb821b4594f806b99344d5fd605bc6f2cf0fb21d5ab2500e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1278c26c077e3b1ee6a5f25385a3c00eaecc0efd7b622facac5569d1e47ac42e\",\"dweb:/ipfs/QmQZyrJV7UoUfdY1KYNJ2ru27Khtg4Z8v8XE9KNHFtsvA4\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol\":{\"keccak256\":\"0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7\",\"dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFTAdapter.sol\":{\"keccak256\":\"0xd65041c093c19792b66369a04b4aea5c988c32e2cf4ab952a442315426407fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1f1cc68778a40a45397f1ffcdba25920523a75d321da8852f7688f50885bbd08\",\"dweb:/ipfs/QmRUL7Q6dNxbc1Mz1hXgUz7eyCZDpt9eJD8BK1EMaJ9Yoz\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol\":{\"keccak256\":\"0xdda89798c66928bba9e0fa44b3edf4710ff15cf46edadcf3e15c92d78fcc9ca8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef0cf33304a4ae343e83e9c11bafb2516f2b256c290cba3e096455ff237fa78c\",\"dweb:/ipfs/QmQph8KfKf9o7JNoas4BmNQ9qL9whZsrchouPiUp7o4YFm\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0xc60c7b4374b3d89f33b8de982f463c92374a8548800c816fe776f0ec76351fb0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9e2ae9efc2a93373e822b148b3a3b50e3562c8c317f2e71d73cf4a11dede9d15\",\"dweb:/ipfs/QmahCbqvqEcWLJpqE6EbHHTuSbnGWyo35ZBVqoyKv18BSF\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":{\"keccak256\":\"0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973\",\"dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":{\"keccak256\":\"0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f\",\"dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol\":{\"keccak256\":\"0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688\",\"dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol\":{\"keccak256\":\"0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab\",\"dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol\":{\"keccak256\":\"0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b\",\"dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":{\"keccak256\":\"0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045\",\"dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol\":{\"keccak256\":\"0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff\",\"dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol\":{\"keccak256\":\"0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73\",\"dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol\":{\"keccak256\":\"0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f\",\"dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol\":{\"keccak256\":\"0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec\",\"dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol\":{\"keccak256\":\"0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0\",\"dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol\":{\"keccak256\":\"0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4\",\"dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol\":{\"keccak256\":\"0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574\",\"dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol\":{\"keccak256\":\"0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991\",\"dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":{\"keccak256\":\"0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1\",\"dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x399d0b11c8e4e902b6c95c21c187968e62e1bd2a86b8f6dad882c399a05404c1\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://82618dd9135c30870716bb9561f238b68b0c46cff6c7311a3d4b1c35a541c633\",\"dweb:/ipfs/QmSw3gEwXthgoDAqE3gemC5JfQnBnRBTFGEJaDNBj7JwxH\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]},\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09\",\"dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol\":{\"keccak256\":\"0x51aabf26e9682335ecf33b708cbcdf26e42bdc2f0a2e6fc09d6640219a0e00f6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9423a1603d9145e142d50aa0f9a31199731733535501a7d3918d36b1deed78f2\",\"dweb:/ipfs/QmQAArNnrZVfKrbY3vGer2G6775HozDmGrsovtz5NFqGrP\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol\":{\"keccak256\":\"0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb\",\"dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3\"]},\"test/mocks/MockOFT.sol\":{\"keccak256\":\"0x6c2143557accb95c3be9a0942cb8bca877ef94d3ec34f51112fe744a72dad047\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://437d64f216e278082bd978ccbb9fc64a27707c564678a08a827df0741ec63d44\",\"dweb:/ipfs/QmagfMbuJuJV7LLXrxAoftExfETeFcszkSZFvYJ1T2u9kJ\"]},\"test/mocks/MockVault.sol\":{\"keccak256\":\"0xd4a6b9e7c49512a7ed3548781d45d9082b3ecd25dd635873926c39184d485790\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://70acbb9b707cc17ee6cd36d71e21c7a8ab793a700c152c77a9babf2a1836aeca\",\"dweb:/ipfs/Qmef5Fs6DD5we9Qr3SQnYJUpne726JdpkGUqrq9BFbJgpn\"]},\"test/vault-sync/VaultComposerSync_Base.t.sol\":{\"keccak256\":\"0x31b5b3e30e1869648bb806871a9713d85ced6233448dfc9c0e6f59a31140d536\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6b43dc68a03a7305c8f5049b1080dd1387edbd99ea0de6e9e009471516aaa982\",\"dweb:/ipfs/QmVj6GGCCe2QvFf33dwYxHNWqLAdXh4aVnyacHBT8v4gRW\"]},\"test/vault-sync/VaultComposerSync_Unit.t.sol\":{\"keccak256\":\"0x4078900bc266df2628b2ac3738030da86d904cf2607bc7d2601a5c79e3c54cea\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://87e2e0edea7d527b23de666f2b04ad68a740d148cbc44f2706bd2c4e48190007\",\"dweb:/ipfs/QmRyLQUvCvscvGMWuZm3yWMCU3EPbZhs4dmpAhd6GAP8U3\"]}},\"version\":1}",
+ "metadata": {
+ "compiler": { "version": "0.8.22+commit.4fc1097e" },
+ "language": "Solidity",
+ "output": {
+ "abi": [
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidLzComposeOption"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidLzReadOption"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidLzReceiveOption"
+ },
+ {
+ "inputs": [],
+ "type": "error",
+ "name": "Executor_InvalidNativeDropOption"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint16", "name": "optionType", "type": "uint16" }
+ ],
+ "type": "error",
+ "name": "InvalidOptionType"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint8", "name": "bits", "type": "uint8" },
+ { "internalType": "uint256", "name": "value", "type": "uint256" }
+ ],
+ "type": "error",
+ "name": "SafeCastOverflowedUintDowncast"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address",
+ "indexed": true
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address",
+ "indexed": true
+ },
+ {
+ "internalType": "uint256",
+ "name": "assets",
+ "type": "uint256",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "shares",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "Deposit",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "guid",
+ "type": "bytes32",
+ "indexed": true
+ }
+ ],
+ "type": "event",
+ "name": "Refunded",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "guid",
+ "type": "bytes32",
+ "indexed": true
+ }
+ ],
+ "type": "event",
+ "name": "Sent",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address",
+ "indexed": true
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address",
+ "indexed": true
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "Transfer",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_address",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "int256[]",
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "val",
+ "type": "address[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_bytes",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_bytes32",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "int256",
+ "name": "",
+ "type": "int256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_int",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "address",
+ "name": "val",
+ "type": "address",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_address",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "val",
+ "type": "uint256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "int256[]",
+ "name": "val",
+ "type": "int256[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "address[]",
+ "name": "val",
+ "type": "address[]",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_array",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "bytes",
+ "name": "val",
+ "type": "bytes",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_bytes",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "bytes32",
+ "name": "val",
+ "type": "bytes32",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_bytes32",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "int256",
+ "name": "val",
+ "type": "int256",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_decimal_int",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "val",
+ "type": "uint256",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "decimals",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_decimal_uint",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "int256",
+ "name": "val",
+ "type": "int256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_int",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "string",
+ "name": "val",
+ "type": "string",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_string",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "key",
+ "type": "string",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "val",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_named_uint",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_string",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "log_uint",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "logs",
+ "anonymous": false
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "ARB_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "BAD_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "DEFAULT_CHANNEL_ID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "ETH_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "EVM_COMPUTE_MAP_BPS",
+ "outputs": [
+ { "internalType": "uint16", "name": "", "type": "uint16" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "EVM_COMPUTE_REDUCE_FEE_USD",
+ "outputs": [
+ { "internalType": "uint120", "name": "", "type": "uint120" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "EVM_REQUEST_FEE_USD",
+ "outputs": [
+ { "internalType": "uint120", "name": "", "type": "uint120" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "INITIAL_BALANCE",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "IS_TEST",
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "MAP_REDUCE_COMPUTE_TYPES",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "NATIVE_TOKEN_PRICE_USD",
+ "outputs": [
+ { "internalType": "uint128", "name": "", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "OPTIONS_LZRECEIVE_100k",
+ "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "POL_EID",
+ "outputs": [
+ { "internalType": "uint32", "name": "", "type": "uint32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "TOKENS_TO_SEND",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "TREASURY_GAS_CAP",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "TREASURY_GAS_FOR_FEE_CAP",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "VaultComposerSyncArb",
+ "outputs": [
+ {
+ "internalType": "contract VaultComposerSync",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "arbEndpoint",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "arbExecutor",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "packetBytes", "type": "bytes" },
+ { "internalType": "bytes32", "name": "guid", "type": "bytes32" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "assertGuid"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "assetOFT_arb",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "assetOFT_eth",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "assetOFT_pol",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint8",
+ "name": "_endpointNum",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum TestHelperOz5.LibraryType",
+ "name": "_libraryType",
+ "type": "uint8"
+ },
+ {
+ "internalType": "address[]",
+ "name": "nativeTokenAddresses",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "createEndpoints"
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeLzComposeOption",
+ "outputs": [
+ { "internalType": "uint16", "name": "index", "type": "uint16" },
+ { "internalType": "uint128", "name": "gas", "type": "uint128" },
+ { "internalType": "uint128", "name": "value", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeLzReadOption",
+ "outputs": [
+ { "internalType": "uint128", "name": "gas", "type": "uint128" },
+ { "internalType": "uint32", "name": "size", "type": "uint32" },
+ { "internalType": "uint128", "name": "value", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeLzReceiveOption",
+ "outputs": [
+ { "internalType": "uint128", "name": "gas", "type": "uint128" },
+ { "internalType": "uint128", "name": "value", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_option", "type": "bytes" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "decodeNativeDropOption",
+ "outputs": [
+ { "internalType": "uint128", "name": "amount", "type": "uint128" },
+ { "internalType": "bytes32", "name": "receiver", "type": "bytes32" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeArtifacts",
+ "outputs": [
+ {
+ "internalType": "string[]",
+ "name": "excludedArtifacts_",
+ "type": "string[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeContracts",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "excludedContracts_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeSelectors",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "name": "excludedSelectors_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "excludeSenders",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "excludedSenders_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "executorValueCap",
+ "outputs": [
+ { "internalType": "uint128", "name": "", "type": "uint128" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "failed",
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint16", "name": "_dstEid", "type": "uint16" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "getNextInflightPacket",
+ "outputs": [
+ { "internalType": "bytes", "name": "packetBytes", "type": "bytes" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint16", "name": "_dstEid", "type": "uint16" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "hasPendingPackets",
+ "outputs": [
+ { "internalType": "bool", "name": "flag", "type": "bool" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ { "internalType": "address", "name": "_from", "type": "address" },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ { "internalType": "bytes32", "name": "_guid", "type": "bytes32" },
+ { "internalType": "address", "name": "_to", "type": "address" },
+ { "internalType": "bytes", "name": "_composerMsg", "type": "bytes" }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzCompose"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ { "internalType": "bytes32", "name": "_guid", "type": "bytes32" },
+ {
+ "internalType": "address",
+ "name": "_composer",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzCompose"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ {
+ "internalType": "bytes",
+ "name": "_resolvedPayload",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzReadReceive"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "lzReceive"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "msgValueToFail",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "msgValueToPass",
+ "outputs": [
+ { "internalType": "uint256", "name": "", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "_options", "type": "bytes" },
+ { "internalType": "uint256", "name": "_cursor", "type": "uint256" }
+ ],
+ "stateMutability": "pure",
+ "type": "function",
+ "name": "nextExecutorOption",
+ "outputs": [
+ { "internalType": "uint8", "name": "optionType", "type": "uint8" },
+ { "internalType": "bytes", "name": "option", "type": "bytes" },
+ { "internalType": "uint256", "name": "cursor", "type": "uint256" }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "contract EndpointV2Mock",
+ "name": "endpoint",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "registerEndpoint"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ { "internalType": "bytes", "name": "_options", "type": "bytes" }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "schedulePacket"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint128",
+ "name": "_valueCap",
+ "type": "uint128"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setExecutorValueCap"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setUp"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint8",
+ "name": "_endpointNum",
+ "type": "uint8"
+ },
+ {
+ "internalType": "enum TestHelperOz5.LibraryType",
+ "name": "_libraryType",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setUpEndpoints"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_oappCreationCode",
+ "type": "bytes"
+ },
+ { "internalType": "uint8", "name": "_startEid", "type": "uint8" },
+ { "internalType": "uint8", "name": "_oappNum", "type": "uint8" }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "setupOApps",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "oapps",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "shareOFT_arb",
+ "outputs": [
+ {
+ "internalType": "contract MockOFTAdapter",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "shareOFT_eth",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "shareOFT_pol",
+ "outputs": [
+ {
+ "internalType": "contract MockOFT",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetArtifactSelectors",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzArtifactSelector[]",
+ "name": "targetedArtifactSelectors_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "string",
+ "name": "artifact",
+ "type": "string"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetArtifacts",
+ "outputs": [
+ {
+ "internalType": "string[]",
+ "name": "targetedArtifacts_",
+ "type": "string[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetContracts",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "targetedContracts_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetInterfaces",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzInterface[]",
+ "name": "targetedInterfaces_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "string[]",
+ "name": "artifacts",
+ "type": "string[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetSelectors",
+ "outputs": [
+ {
+ "internalType": "struct StdInvariant.FuzzSelector[]",
+ "name": "targetedSelectors_",
+ "type": "tuple[]",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "targetSenders",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "targetedSenders_",
+ "type": "address[]"
+ }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_InsufficientMsgValue_causes_revert_no_refund"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "test_deployment"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_lzCompose_fail_invalid_payload_auto_refunds"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_lzCompose_fail_not_enough_value_for_refund_complete_revert"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_lzCompose_pass_dst_is_hub"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_lzCompose_pass_dst_is_hub_no_msgValue_causes_refund"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_lzCompose_pass_dst_not_hub"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_lzCompose_slippage_causes_refund"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_onlyEndpoint"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "_oft", "type": "address" }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "test_onlyOFT"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "userA",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "userB",
+ "outputs": [
+ { "internalType": "address", "name": "", "type": "address" }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_packetBytes",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_resolvedPayload",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "validatePacket"
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "vault_arb",
+ "outputs": [
+ {
+ "internalType": "contract MockVault",
+ "name": "",
+ "type": "address"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ {
+ "internalType": "address",
+ "name": "_dstAddress",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "verifyPackets"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_packetAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_composer",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_resolvedPayload",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "verifyPackets"
+ },
+ {
+ "inputs": [
+ { "internalType": "uint32", "name": "_dstEid", "type": "uint32" },
+ {
+ "internalType": "bytes32",
+ "name": "_dstAddress",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "verifyPackets"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "oapps",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "wireOApps"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "oapps",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint32[]",
+ "name": "channels",
+ "type": "uint32[]"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "wireReadOApps"
+ },
+ { "inputs": [], "stateMutability": "payable", "type": "receive" }
+ ],
+ "devdoc": {
+ "kind": "dev",
+ "methods": {
+ "createEndpoints(uint8,uint8,address[])": {
+ "params": {
+ "_endpointNum": "The number of endpoints to create.",
+ "_libraryType": "The type of message library to use (UltraLightNode or SimpleMessageLib)."
+ }
+ },
+ "schedulePacket(bytes,bytes)": {
+ "details": "Adds the packet to the front of the queue and stores its options for later retrieval.",
+ "params": {
+ "_options": "The options associated with the packet, used during delivery.",
+ "_packetBytes": "The packet data to be scheduled."
+ }
+ },
+ "setExecutorValueCap(uint128)": {
+ "details": "set executorValueCap if more than 0.1 ether is necessarythis must be called prior to setUpEndpoints() if the value is to be used",
+ "params": {
+ "_valueCap": "amount executor can pass as msg.value to lzReceive()"
+ }
+ },
+ "setUp()": {
+ "details": "Initializes test environment setup, to be overridden by specific tests."
+ },
+ "setupOApps(bytes,uint8,uint8)": {
+ "params": {
+ "_oappCreationCode": "The bytecode for creating OApp contracts.",
+ "_oappNum": "The number of OApps to set up.",
+ "_startEid": "The starting endpoint ID for OApp setup."
+ },
+ "returns": {
+ "oapps": "An array of addresses for the deployed OApps."
+ }
+ },
+ "verifyPackets(uint32,address)": {
+ "details": "verify packets to destination chain's OApp address.",
+ "params": {
+ "_dstAddress": "The destination address.",
+ "_dstEid": "The destination endpoint ID."
+ }
+ },
+ "verifyPackets(uint32,bytes32)": {
+ "details": "Calls an overloaded version of verifyPackets with default values for packet amount and composer address.",
+ "params": {
+ "_dstAddress": "The destination address in bytes32 format.",
+ "_dstEid": "The destination chain's endpoint ID."
+ }
+ },
+ "verifyPackets(uint32,bytes32,uint256,address,bytes)": {
+ "details": "dst UA receive/execute packetswill NOT work calling this directly with composer IF the composed payload is different from the lzReceive msg payload"
+ },
+ "wireOApps(address[])": {
+ "details": "Sets each OApp as a peer to every other OApp in the provided array, except itself.",
+ "params": {
+ "oapps": "An array of addresses representing the deployed OApp instances."
+ }
+ },
+ "wireReadOApps(address[],uint32[])": {
+ "details": "Sets each OApp to read from the provided channels.",
+ "params": {
+ "channels": "An array of channel IDs to set as read channels.",
+ "oapps": "An array of addresses representing the deployed OApp instances."
+ }
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {
+ "createEndpoints(uint8,uint8,address[])": {
+ "notice": "Sets up endpoints for testing."
+ },
+ "schedulePacket(bytes,bytes)": {
+ "notice": "Schedules a packet for delivery, storing it in the packets queue."
+ },
+ "setupOApps(bytes,uint8,uint8)": {
+ "notice": "Sets up mock OApp contracts for testing."
+ },
+ "verifyPackets(uint32,bytes32)": {
+ "notice": "Verifies and processes packets destined for a specific chain and user address."
+ },
+ "wireOApps(address[])": {
+ "notice": "Configures the peers between multiple OApp instances."
+ },
+ "wireReadOApps(address[],uint32[])": {
+ "notice": "Configures the read channels for multiple OApp instances."
+ }
+ },
+ "version": 1
+ }
+ },
+ "settings": {
+ "remappings": [
+ "@layerzerolabs/=node_modules/@layerzerolabs/",
+ "@openzeppelin/=node_modules/@openzeppelin/",
+ "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/",
+ "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/",
+ "solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/"
+ ],
+ "optimizer": { "enabled": true, "runs": 20000 },
+ "metadata": { "bytecodeHash": "ipfs" },
+ "compilationTarget": {
+ "test/vault-sync/VaultComposerSync_Unit.t.sol": "VaultComposerSyncUnitTest"
+ },
+ "evmVersion": "shanghai",
+ "libraries": {}
+ },
+ "sources": {
+ "contracts/VaultComposerSync.sol": {
+ "keccak256": "0xbbba257858c39e33201067897be32e7e2dac636726498e4f394115c2bc3bf93b",
+ "urls": [
+ "bzz-raw://7ff9ce61a8cd70dfea73b632241c852a040c0ae2c9470c7add66571cc32e0246",
+ "dweb:/ipfs/QmauMyGN1mGiv9pLEtnZbXjpd8J49AzV6W8bSLQ9Uf2LEH"
+ ],
+ "license": "MIT"
+ },
+ "contracts/interfaces/IVaultComposerSync.sol": {
+ "keccak256": "0x86597121d142cdd98d7399abfe1109ab4052d570056758f71193b8a614c289cd",
+ "urls": [
+ "bzz-raw://0bcfb48d7d685e5e4d46dc16e3a74d18341c489ea4efcab2e593ec3b3f3cca48",
+ "dweb:/ipfs/QmQG5PGYqVDrxBeGy7vcYKkk3jjqt3mLJ9kJpjwcRQzWZu"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": {
+ "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1",
+ "urls": [
+ "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9",
+ "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": {
+ "keccak256": "0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9",
+ "urls": [
+ "bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2",
+ "dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": {
+ "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1",
+ "urls": [
+ "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4",
+ "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": {
+ "keccak256": "0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e",
+ "urls": [
+ "bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497",
+ "dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": {
+ "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af",
+ "urls": [
+ "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696",
+ "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": {
+ "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc",
+ "urls": [
+ "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d",
+ "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": {
+ "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347",
+ "urls": [
+ "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4",
+ "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": {
+ "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc",
+ "urls": [
+ "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8",
+ "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": {
+ "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657",
+ "urls": [
+ "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab",
+ "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": {
+ "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345",
+ "urls": [
+ "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5",
+ "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": {
+ "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1",
+ "urls": [
+ "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534",
+ "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": {
+ "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c",
+ "urls": [
+ "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb",
+ "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": {
+ "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d",
+ "urls": [
+ "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89",
+ "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh"
+ ],
+ "license": "MIT OR Apache-2.0"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": {
+ "keccak256": "0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44",
+ "urls": [
+ "bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79",
+ "dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": {
+ "keccak256": "0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5",
+ "urls": [
+ "bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2",
+ "dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": {
+ "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3",
+ "urls": [
+ "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4",
+ "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": {
+ "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284",
+ "urls": [
+ "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c",
+ "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": {
+ "keccak256": "0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9",
+ "urls": [
+ "bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc",
+ "dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": {
+ "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b",
+ "urls": [
+ "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3",
+ "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": {
+ "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8",
+ "urls": [
+ "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5",
+ "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": {
+ "keccak256": "0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91",
+ "urls": [
+ "bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc",
+ "dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": {
+ "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35",
+ "urls": [
+ "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141",
+ "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": {
+ "keccak256": "0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda",
+ "urls": [
+ "bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899",
+ "dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": {
+ "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a",
+ "urls": [
+ "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9",
+ "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": {
+ "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27",
+ "urls": [
+ "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850",
+ "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": {
+ "keccak256": "0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3",
+ "urls": [
+ "bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8",
+ "dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": {
+ "keccak256": "0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f",
+ "urls": [
+ "bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691",
+ "dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": {
+ "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a",
+ "urls": [
+ "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241",
+ "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": {
+ "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73",
+ "urls": [
+ "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c",
+ "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": {
+ "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1",
+ "urls": [
+ "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a",
+ "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": {
+ "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420",
+ "urls": [
+ "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54",
+ "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": {
+ "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49",
+ "urls": [
+ "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf",
+ "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": {
+ "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3",
+ "urls": [
+ "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083",
+ "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": {
+ "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0",
+ "urls": [
+ "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933",
+ "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": {
+ "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c",
+ "urls": [
+ "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0",
+ "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": {
+ "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc",
+ "urls": [
+ "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b",
+ "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": {
+ "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972",
+ "urls": [
+ "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927",
+ "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": {
+ "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901",
+ "urls": [
+ "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d",
+ "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": {
+ "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e",
+ "urls": [
+ "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6",
+ "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": {
+ "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625",
+ "urls": [
+ "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97",
+ "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": {
+ "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb",
+ "urls": [
+ "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1",
+ "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": {
+ "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875",
+ "urls": [
+ "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d",
+ "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": {
+ "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7",
+ "urls": [
+ "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24",
+ "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": {
+ "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5",
+ "urls": [
+ "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b",
+ "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": {
+ "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a",
+ "urls": [
+ "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0",
+ "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": {
+ "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9",
+ "urls": [
+ "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f",
+ "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": {
+ "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9",
+ "urls": [
+ "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f",
+ "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": {
+ "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28",
+ "urls": [
+ "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2",
+ "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": {
+ "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680",
+ "urls": [
+ "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09",
+ "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": {
+ "keccak256": "0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22",
+ "urls": [
+ "bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda",
+ "dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa"
+ ],
+ "license": "BUSL-1.1"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": {
+ "keccak256": "0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5",
+ "urls": [
+ "bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28",
+ "dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": {
+ "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc",
+ "urls": [
+ "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0",
+ "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": {
+ "keccak256": "0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b",
+ "urls": [
+ "bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075",
+ "dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": {
+ "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20",
+ "urls": [
+ "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2",
+ "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol": {
+ "keccak256": "0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae",
+ "urls": [
+ "bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d",
+ "dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": {
+ "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58",
+ "urls": [
+ "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd",
+ "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": {
+ "keccak256": "0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c",
+ "urls": [
+ "bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e",
+ "dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": {
+ "keccak256": "0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461",
+ "urls": [
+ "bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc",
+ "dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": {
+ "keccak256": "0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d",
+ "urls": [
+ "bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2",
+ "dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": {
+ "keccak256": "0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01",
+ "urls": [
+ "bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af",
+ "dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol": {
+ "keccak256": "0xd40d91e8173cdb5bb821b4594f806b99344d5fd605bc6f2cf0fb21d5ab2500e3",
+ "urls": [
+ "bzz-raw://1278c26c077e3b1ee6a5f25385a3c00eaecc0efd7b622facac5569d1e47ac42e",
+ "dweb:/ipfs/QmQZyrJV7UoUfdY1KYNJ2ru27Khtg4Z8v8XE9KNHFtsvA4"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": {
+ "keccak256": "0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750",
+ "urls": [
+ "bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82",
+ "dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": {
+ "keccak256": "0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2",
+ "urls": [
+ "bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a",
+ "dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": {
+ "keccak256": "0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84",
+ "urls": [
+ "bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e",
+ "dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": {
+ "keccak256": "0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6",
+ "urls": [
+ "bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc",
+ "dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol": {
+ "keccak256": "0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a",
+ "urls": [
+ "bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7",
+ "dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/OFTAdapter.sol": {
+ "keccak256": "0xd65041c093c19792b66369a04b4aea5c988c32e2cf4ab952a442315426407fd0",
+ "urls": [
+ "bzz-raw://1f1cc68778a40a45397f1ffcdba25920523a75d321da8852f7688f50885bbd08",
+ "dweb:/ipfs/QmRUL7Q6dNxbc1Mz1hXgUz7eyCZDpt9eJD8BK1EMaJ9Yoz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol": {
+ "keccak256": "0xdda89798c66928bba9e0fa44b3edf4710ff15cf46edadcf3e15c92d78fcc9ca8",
+ "urls": [
+ "bzz-raw://ef0cf33304a4ae343e83e9c11bafb2516f2b256c290cba3e096455ff237fa78c",
+ "dweb:/ipfs/QmQph8KfKf9o7JNoas4BmNQ9qL9whZsrchouPiUp7o4YFm"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": {
+ "keccak256": "0xc60c7b4374b3d89f33b8de982f463c92374a8548800c816fe776f0ec76351fb0",
+ "urls": [
+ "bzz-raw://9e2ae9efc2a93373e822b148b3a3b50e3562c8c317f2e71d73cf4a11dede9d15",
+ "dweb:/ipfs/QmahCbqvqEcWLJpqE6EbHHTuSbnGWyo35ZBVqoyKv18BSF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": {
+ "keccak256": "0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5",
+ "urls": [
+ "bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e",
+ "dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": {
+ "keccak256": "0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b",
+ "urls": [
+ "bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258",
+ "dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": {
+ "keccak256": "0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0",
+ "urls": [
+ "bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973",
+ "dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q"
+ ],
+ "license": "UNLICENSED"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": {
+ "keccak256": "0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63",
+ "urls": [
+ "bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f",
+ "dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq"
+ ],
+ "license": "UNLICENSED"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": {
+ "keccak256": "0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1",
+ "urls": [
+ "bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688",
+ "dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol": {
+ "keccak256": "0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f",
+ "urls": [
+ "bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab",
+ "dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": {
+ "keccak256": "0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9",
+ "urls": [
+ "bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b",
+ "dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": {
+ "keccak256": "0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff",
+ "urls": [
+ "bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045",
+ "dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": {
+ "keccak256": "0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01",
+ "urls": [
+ "bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff",
+ "dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": {
+ "keccak256": "0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f",
+ "urls": [
+ "bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73",
+ "dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": {
+ "keccak256": "0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830",
+ "urls": [
+ "bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f",
+ "dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": {
+ "keccak256": "0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44",
+ "urls": [
+ "bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec",
+ "dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol": {
+ "keccak256": "0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc",
+ "urls": [
+ "bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0",
+ "dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": {
+ "keccak256": "0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121",
+ "urls": [
+ "bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4",
+ "dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol": {
+ "keccak256": "0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348",
+ "urls": [
+ "bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574",
+ "dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol": {
+ "keccak256": "0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9",
+ "urls": [
+ "bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991",
+ "dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": {
+ "keccak256": "0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97",
+ "urls": [
+ "bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1",
+ "dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA"
+ ],
+ "license": "LZBL-1.2"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": {
+ "keccak256": "0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd",
+ "urls": [
+ "bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d",
+ "dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": {
+ "keccak256": "0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270",
+ "urls": [
+ "bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe",
+ "dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": {
+ "keccak256": "0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e",
+ "urls": [
+ "bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351",
+ "dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": {
+ "keccak256": "0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746",
+ "urls": [
+ "bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41",
+ "dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdConstants.sol": {
+ "keccak256": "0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534",
+ "urls": [
+ "bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc",
+ "dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": {
+ "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77",
+ "urls": [
+ "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6",
+ "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": {
+ "keccak256": "0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d",
+ "urls": [
+ "bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391",
+ "dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": {
+ "keccak256": "0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500",
+ "urls": [
+ "bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974",
+ "dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": {
+ "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2",
+ "urls": [
+ "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92",
+ "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": {
+ "keccak256": "0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc",
+ "urls": [
+ "bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57",
+ "dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": {
+ "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d",
+ "urls": [
+ "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8",
+ "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdToml.sol": {
+ "keccak256": "0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861",
+ "urls": [
+ "bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3",
+ "dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": {
+ "keccak256": "0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737",
+ "urls": [
+ "bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138",
+ "dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": {
+ "keccak256": "0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c",
+ "urls": [
+ "bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4",
+ "dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": {
+ "keccak256": "0x399d0b11c8e4e902b6c95c21c187968e62e1bd2a86b8f6dad882c399a05404c1",
+ "urls": [
+ "bzz-raw://82618dd9135c30870716bb9561f238b68b0c46cff6c7311a3d4b1c35a541c633",
+ "dweb:/ipfs/QmSw3gEwXthgoDAqE3gemC5JfQnBnRBTFGEJaDNBj7JwxH"
+ ],
+ "license": "MIT OR Apache-2.0"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": {
+ "keccak256": "0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5",
+ "urls": [
+ "bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57",
+ "dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": {
+ "keccak256": "0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f",
+ "urls": [
+ "bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d",
+ "dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": {
+ "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a",
+ "urls": [
+ "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0",
+ "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": {
+ "keccak256": "0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11",
+ "urls": [
+ "bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab",
+ "dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/BytesLib.sol": {
+ "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a",
+ "urls": [
+ "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535",
+ "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq"
+ ],
+ "license": "Unlicense"
+ },
+ "node_modules/@openzeppelin/contracts/access/AccessControl.sol": {
+ "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308",
+ "urls": [
+ "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80",
+ "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": {
+ "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606",
+ "urls": [
+ "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1",
+ "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/access/Ownable.sol": {
+ "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
+ "urls": [
+ "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
+ "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": {
+ "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7",
+ "urls": [
+ "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b",
+ "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": {
+ "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724",
+ "urls": [
+ "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a",
+ "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": {
+ "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c",
+ "urls": [
+ "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba",
+ "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/IERC4626.sol": {
+ "keccak256": "0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17",
+ "urls": [
+ "bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1",
+ "dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
+ "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b",
+ "urls": [
+ "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b",
+ "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": {
+ "keccak256": "0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31",
+ "urls": [
+ "bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09",
+ "dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": {
+ "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7",
+ "urls": [
+ "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db",
+ "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol": {
+ "keccak256": "0x51aabf26e9682335ecf33b708cbcdf26e42bdc2f0a2e6fc09d6640219a0e00f6",
+ "urls": [
+ "bzz-raw://9423a1603d9145e142d50aa0f9a31199731733535501a7d3918d36b1deed78f2",
+ "dweb:/ipfs/QmQAArNnrZVfKrbY3vGer2G6775HozDmGrsovtz5NFqGrP"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
+ "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330",
+ "urls": [
+ "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf",
+ "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
+ "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310",
+ "urls": [
+ "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862",
+ "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Address.sol": {
+ "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5",
+ "urls": [
+ "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23",
+ "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Context.sol": {
+ "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
+ "urls": [
+ "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
+ "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Errors.sol": {
+ "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123",
+ "urls": [
+ "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf",
+ "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Panic.sol": {
+ "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a",
+ "urls": [
+ "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a",
+ "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/Pausable.sol": {
+ "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd",
+ "urls": [
+ "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc",
+ "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": {
+ "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3",
+ "urls": [
+ "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a",
+ "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": {
+ "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84",
+ "urls": [
+ "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9",
+ "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": {
+ "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa",
+ "urls": [
+ "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287",
+ "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": {
+ "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8",
+ "urls": [
+ "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621",
+ "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/math/Math.sol": {
+ "keccak256": "0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea",
+ "urls": [
+ "bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d",
+ "dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": {
+ "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54",
+ "urls": [
+ "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8",
+ "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": {
+ "keccak256": "0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217",
+ "urls": [
+ "bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb",
+ "dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3"
+ ],
+ "license": "MIT"
+ },
+ "test/mocks/MockOFT.sol": {
+ "keccak256": "0x6c2143557accb95c3be9a0942cb8bca877ef94d3ec34f51112fe744a72dad047",
+ "urls": [
+ "bzz-raw://437d64f216e278082bd978ccbb9fc64a27707c564678a08a827df0741ec63d44",
+ "dweb:/ipfs/QmagfMbuJuJV7LLXrxAoftExfETeFcszkSZFvYJ1T2u9kJ"
+ ],
+ "license": "AGPL-3.0-only"
+ },
+ "test/mocks/MockVault.sol": {
+ "keccak256": "0xd4a6b9e7c49512a7ed3548781d45d9082b3ecd25dd635873926c39184d485790",
+ "urls": [
+ "bzz-raw://70acbb9b707cc17ee6cd36d71e21c7a8ab793a700c152c77a9babf2a1836aeca",
+ "dweb:/ipfs/Qmef5Fs6DD5we9Qr3SQnYJUpne726JdpkGUqrq9BFbJgpn"
+ ],
+ "license": "AGPL-3.0-only"
+ },
+ "test/vault-sync/VaultComposerSync_Base.t.sol": {
+ "keccak256": "0x31b5b3e30e1869648bb806871a9713d85ced6233448dfc9c0e6f59a31140d536",
+ "urls": [
+ "bzz-raw://6b43dc68a03a7305c8f5049b1080dd1387edbd99ea0de6e9e009471516aaa982",
+ "dweb:/ipfs/QmVj6GGCCe2QvFf33dwYxHNWqLAdXh4aVnyacHBT8v4gRW"
+ ],
+ "license": "UNLICENSED"
+ },
+ "test/vault-sync/VaultComposerSync_Unit.t.sol": {
+ "keccak256": "0x4078900bc266df2628b2ac3738030da86d904cf2607bc7d2601a5c79e3c54cea",
+ "urls": [
+ "bzz-raw://87e2e0edea7d527b23de666f2b04ad68a740d148cbc44f2706bd2c4e48190007",
+ "dweb:/ipfs/QmRyLQUvCvscvGMWuZm3yWMCU3EPbZhs4dmpAhd6GAP8U3"
+ ],
+ "license": "UNLICENSED"
+ }
+ },
+ "version": 1
+ },
+ "id": 138
+}
diff --git a/packages/ovault-evm/contracts/VaultComposerSync.sol b/packages/ovault-evm/contracts/VaultComposerSync.sol
new file mode 100644
index 0000000000..63f887fdda
--- /dev/null
+++ b/packages/ovault-evm/contracts/VaultComposerSync.sol
@@ -0,0 +1,348 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.22;
+
+import { SafeERC20, IERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
+import { ERC4626, IERC4626 } from "@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol";
+
+import { ReentrancyGuard } from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
+
+import { IOFT, SendParam, MessagingFee } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+import { IOAppCore } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol";
+import { ILayerZeroEndpointV2 } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";
+import { OFTComposeMsgCodec } from "@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol";
+
+import { IVaultComposerSync } from "./interfaces/IVaultComposerSync.sol";
+
+/**
+ * @title VaultComposerSync - Synchronous Vault Composer
+ * @author LayerZero Labs (@shankars99, @TRileySchwarz)
+ * @notice This contract is a composer that allows deposits and redemptions operations against a
+ * synchronous vault across different chains using LayerZero's OFT protocol.
+ * @dev The contract is designed to handle deposits and redemptions of vault shares and assets,
+ * ensuring that the share and asset tokens are correctly managed and transferred across chains.
+ * It also includes slippage protection and refund mechanisms for failed transactions.
+ * @dev Default refunds are enabled to EOA addresses only on the source.
+ Custom refunds to contracts can be implemented by overriding the _refund function.
+ * @dev Default vault interface is IERC4626 - [ERC4626](https://eips.ethereum.org/EIPS/eip-4626) compliant vaults.
+ * Custom vaults can be implemented by overriding the _deposit and _redeem functions.
+ */
+contract VaultComposerSync is IVaultComposerSync, ReentrancyGuard {
+ using OFTComposeMsgCodec for bytes;
+ using OFTComposeMsgCodec for bytes32;
+ using SafeERC20 for IERC20;
+
+ /// @dev Must be a synchronous vault - NO 2-step redemptions/deposit windows
+ IERC4626 public immutable VAULT;
+
+ address public immutable ASSET_OFT;
+ address public immutable ASSET_ERC20;
+ address public immutable SHARE_OFT;
+ address public immutable SHARE_ERC20;
+
+ address public immutable ENDPOINT;
+ uint32 public immutable VAULT_EID;
+
+ /**
+ * @notice Initializes the VaultComposerSync contract with vault and OFT token addresses
+ * @param _vault The address of the ERC4626 vault contract
+ * @param _assetOFT The address of the asset OFT (Omnichain Fungible Token) contract
+ * @param _shareOFT The address of the share OFT contract (must be an adapter)
+ *
+ * Requirements:
+ * - Share token must be the vault itself
+ * - Asset token must match the vault's underlying asset
+ * - Share OFT must be an adapter (approvalRequired() returns true)
+ */
+ constructor(address _vault, address _assetOFT, address _shareOFT) {
+ VAULT = IERC4626(_vault);
+
+ ASSET_OFT = _assetOFT;
+ ASSET_ERC20 = IOFT(ASSET_OFT).token();
+ SHARE_OFT = _shareOFT;
+ SHARE_ERC20 = IOFT(SHARE_OFT).token();
+
+ ENDPOINT = address(IOAppCore(ASSET_OFT).endpoint());
+ VAULT_EID = ILayerZeroEndpointV2(ENDPOINT).eid();
+
+ if (SHARE_ERC20 != address(VAULT)) {
+ revert ShareTokenNotVault(SHARE_ERC20, address(VAULT));
+ }
+
+ if (ASSET_ERC20 != address(VAULT.asset())) {
+ revert AssetTokenNotVaultAsset(ASSET_ERC20, address(VAULT.asset()));
+ }
+
+ /// @dev ShareOFT must be an OFT adapter. We can infer this by checking 'approvalRequired()'.
+ /// @dev burn() on tokens when a user sends changes totalSupply() which the asset:share ratio depends on.
+ if (!IOFT(SHARE_OFT).approvalRequired()) revert ShareOFTNotAdapter(SHARE_OFT);
+
+ /// @dev Approve the vault to spend the asset tokens held by this contract
+ IERC20(ASSET_ERC20).approve(_vault, type(uint256).max);
+ /// @dev Approving the vault for the share erc20 is not required when the vault is the share erc20
+ // IERC20(SHARE_ERC20).approve(_vault, type(uint256).max);
+
+ /// @dev Approve the share adapter with the share tokens held by this contract
+ IERC20(SHARE_ERC20).approve(_shareOFT, type(uint256).max);
+ /// @dev If the asset OFT is an adapter, approve it as well
+ if (IOFT(_assetOFT).approvalRequired()) IERC20(ASSET_ERC20).approve(_assetOFT, type(uint256).max);
+ }
+
+ /**
+ * @notice Handles LayerZero compose operations for vault transactions with automatic refund functionality
+ * @dev This composer is designed to handle refunds to an EOA address and not a contract
+ * @dev Any revert in handleCompose() causes a refund back to the src EXCEPT for InsufficientMsgValue
+ * @param _composeSender The OFT contract address used for refunds, must be either ASSET_OFT or SHARE_OFT
+ * @param _guid LayerZero's unique tx id (created on the source tx)
+ * @param _message Decomposable bytes object into [composeHeader][composeMessage]
+ */
+ function lzCompose(
+ address _composeSender, // The OFT used on refund, also the vaultIn token.
+ bytes32 _guid,
+ bytes calldata _message, // expected to contain a composeMessage = abi.encode(SendParam hopSendParam,uint256 minMsgValue)
+ address /*_executor*/,
+ bytes calldata /*_extraData*/
+ ) external payable virtual override {
+ if (msg.sender != ENDPOINT) revert OnlyEndpoint(msg.sender);
+ if (_composeSender != ASSET_OFT && _composeSender != SHARE_OFT) revert OnlyValidComposeCaller(_composeSender);
+
+ bytes32 composeFrom = _message.composeFrom();
+ uint256 amount = _message.amountLD();
+ bytes memory composeMsg = _message.composeMsg();
+
+ /// @dev try...catch to handle the compose operation. if it fails we refund the user
+ try this.handleCompose{ value: msg.value }(_composeSender, composeFrom, composeMsg, amount) {
+ emit Sent(_guid);
+ } catch (bytes memory _err) {
+ /// @dev A revert where the msg.value passed is lower than the min expected msg.value is handled separately
+ /// This is because it is possible to re-trigger from the endpoint the compose operation with the right msg.value
+ if (bytes4(_err) == InsufficientMsgValue.selector) {
+ assembly {
+ revert(add(32, _err), mload(_err))
+ }
+ }
+
+ _refund(_composeSender, _message, amount, tx.origin);
+ emit Refunded(_guid);
+ }
+ }
+
+ /**
+ * @notice Handles the compose operation for OFT (Omnichain Fungible Token) transactions
+ * @dev This function can only be called by the contract itself (self-call restriction)
+ * Decodes the compose message to extract SendParam and minimum message value
+ * Routes to either deposit or redeem flow based on the input OFT token type
+ * @param _oftIn The OFT token whose funds have been received in the lzReceive associated with this lzTx
+ * @param _composeFrom The bytes32 identifier of the compose sender
+ * @param _composeMsg The encoded message containing SendParam and minMsgValue
+ * @param _amount The amount of tokens received in the lzReceive associated with this lzTx
+ */
+ function handleCompose(
+ address _oftIn,
+ bytes32 _composeFrom,
+ bytes memory _composeMsg,
+ uint256 _amount
+ ) external payable {
+ /// @dev Can only be called by self
+ if (msg.sender != address(this)) revert OnlySelf(msg.sender);
+
+ /// @dev SendParam defines how the composer will handle the user's funds
+ /// @dev The minMsgValue is the minimum amount of msg.value that must be sent, failing to do so will revert and the transaction will be retained in the endpoint for future retries
+ (SendParam memory sendParam, uint256 minMsgValue) = abi.decode(_composeMsg, (SendParam, uint256));
+ if (msg.value < minMsgValue) revert InsufficientMsgValue(minMsgValue, msg.value);
+
+ if (_oftIn == ASSET_OFT) {
+ _depositAndSend(_composeFrom, _amount, sendParam, tx.origin);
+ } else {
+ _redeemAndSend(_composeFrom, _amount, sendParam, tx.origin);
+ }
+ }
+
+ /**
+ * @notice Deposits ERC20 assets from the caller into the vault and sends them to the recipient
+ * @param _assetAmount The number of ERC20 tokens to deposit and send
+ * @param _sendParam Parameters on how to send the shares to the recipient
+ * @param _refundAddress Address to receive excess `msg.value`
+ */
+ function depositAndSend(
+ uint256 _assetAmount,
+ SendParam memory _sendParam,
+ address _refundAddress
+ ) external payable virtual nonReentrant {
+ IERC20(ASSET_ERC20).safeTransferFrom(msg.sender, address(this), _assetAmount);
+ _depositAndSend(OFTComposeMsgCodec.addressToBytes32(msg.sender), _assetAmount, _sendParam, _refundAddress);
+ }
+
+ /**
+ * @dev Internal function that deposits assets and sends shares to another chain
+ * @param _depositor The depositor (bytes32 format to account for non-evm addresses)
+ * @param _assetAmount The number of assets to deposit
+ * @param _sendParam Parameter that defines how to send the shares
+ * @param _refundAddress Address to receive excess payment of the LZ fees
+ * @notice This function first deposits the assets to mint shares, validates the shares meet minimum slippage requirements,
+ * then sends the minted shares cross-chain using the OFT (Omnichain Fungible Token) protocol
+ * @notice The _sendParam.amountLD is updated to the actual share amount minted, and minAmountLD is reset to 0 for the send operation
+ */
+ function _depositAndSend(
+ bytes32 _depositor,
+ uint256 _assetAmount,
+ SendParam memory _sendParam,
+ address _refundAddress
+ ) internal virtual {
+ uint256 shareAmount = _deposit(_depositor, _assetAmount);
+ _assertSlippage(shareAmount, _sendParam.minAmountLD);
+
+ _sendParam.amountLD = shareAmount;
+ _sendParam.minAmountLD = 0;
+
+ _send(SHARE_OFT, _sendParam, _refundAddress);
+ }
+
+ /**
+ * @dev Internal function to deposit assets into the vault
+ * @param _assetAmount The number of assets to deposit into the vault
+ * @return shareAmount The number of shares received from the vault deposit
+ * @notice This function is expected to be overridden by the inheriting contract to implement custom/nonERC4626 deposit logic
+ */
+ function _deposit(bytes32 /*_depositor*/, uint256 _assetAmount) internal virtual returns (uint256 shareAmount) {
+ shareAmount = VAULT.deposit(_assetAmount, address(this));
+ }
+
+ /**
+ * @notice Redeems vault shares and sends the resulting assets to the user
+ * @param _shareAmount The number of vault shares to redeem
+ * @param _sendParam Parameter that defines how to send the assets
+ * @param _refundAddress Address to receive excess payment of the LZ fees
+ */
+ function redeemAndSend(
+ uint256 _shareAmount,
+ SendParam memory _sendParam,
+ address _refundAddress
+ ) external payable virtual nonReentrant {
+ IERC20(SHARE_ERC20).safeTransferFrom(msg.sender, address(this), _shareAmount);
+ _redeemAndSend(OFTComposeMsgCodec.addressToBytes32(msg.sender), _shareAmount, _sendParam, _refundAddress);
+ }
+
+ /**
+ * @dev Internal function that redeems shares for assets and sends them cross-chain
+ * @param _redeemer The address of the redeemer in bytes32 format
+ * @param _shareAmount The number of shares to redeem
+ * @param _sendParam Parameter that defines how to send the assets
+ * @param _refundAddress Address to receive excess payment of the LZ fees
+ * @notice This function first redeems the specified share amount for the underlying asset,
+ * validates the received amount against slippage protection, then initiates a cross-chain
+ * transfer of the redeemed assets using the OFT (Omnichain Fungible Token) protocol
+ * @notice The minAmountLD in _sendParam is reset to 0 after slippage validation since the
+ * actual amount has already been verified
+ */
+ function _redeemAndSend(
+ bytes32 _redeemer,
+ uint256 _shareAmount,
+ SendParam memory _sendParam,
+ address _refundAddress
+ ) internal virtual {
+ uint256 assetAmount = _redeem(_redeemer, _shareAmount);
+ _assertSlippage(assetAmount, _sendParam.minAmountLD);
+
+ _sendParam.amountLD = assetAmount;
+ _sendParam.minAmountLD = 0;
+
+ _send(ASSET_OFT, _sendParam, _refundAddress);
+ }
+
+ /**
+ * @dev Internal function to redeem shares from the vault
+ * @param _shareAmount The number of shares to redeem from the vault
+ * @return assetAmount The number of assets received from the vault redemption
+ * @notice This function is expected to be overridden by the inheriting contract to implement custom/nonERC4626 redemption logic
+ */
+ function _redeem(bytes32 /*_redeemer*/, uint256 _shareAmount) internal virtual returns (uint256 assetAmount) {
+ assetAmount = VAULT.redeem(_shareAmount, address(this), address(this));
+ }
+
+ /**
+ * @param _amountLD The amount of tokens to send
+ * @param _minAmountLD The minimum amount of tokens that must be sent to avoid slippage
+ * @notice This function checks if the amount sent is less than the minimum amount
+ * If it is, it reverts with SlippageExceeded error
+ * @notice This function can be overridden to implement custom slippage logic
+ */
+ function _assertSlippage(uint256 _amountLD, uint256 _minAmountLD) internal view virtual {
+ if (_amountLD < _minAmountLD) revert SlippageExceeded(_amountLD, _minAmountLD);
+ }
+
+ /**
+ * @notice Quotes the send operation for the given OFT and SendParam
+ * @dev Revert on slippage will be thrown by the OFT and not _assertSlippage
+ * @param _from The "sender address" used for the quote
+ * @param _targetOFT The OFT contract address to quote
+ * @param _vaultInAmount The amount of tokens to send to the vault
+ * @param _sendParam The parameters for the send operation
+ * @return MessagingFee The estimated fee for the send operation
+ * @dev This function can be overridden to implement custom quoting logic
+ */
+ function quoteSend(
+ address _from,
+ address _targetOFT,
+ uint256 _vaultInAmount,
+ SendParam memory _sendParam
+ ) external view virtual returns (MessagingFee memory) {
+ /// @dev When quoting the asset OFT, the function input is shares and the SendParam.amountLD into quoteSend() should be assets (and vice versa)
+
+ if (_targetOFT == ASSET_OFT) {
+ uint256 maxRedeem = VAULT.maxRedeem(_from);
+ if (_vaultInAmount > maxRedeem) {
+ revert ERC4626.ERC4626ExceededMaxRedeem(_from, _vaultInAmount, maxRedeem);
+ }
+
+ _sendParam.amountLD = VAULT.previewRedeem(_vaultInAmount);
+ } else {
+ uint256 maxDeposit = VAULT.maxDeposit(_from);
+ if (_vaultInAmount > maxDeposit) {
+ revert ERC4626.ERC4626ExceededMaxDeposit(_from, _vaultInAmount, maxDeposit);
+ }
+
+ _sendParam.amountLD = VAULT.previewDeposit(_vaultInAmount);
+ }
+ return IOFT(_targetOFT).quoteSend(_sendParam, false);
+ }
+
+ /**
+ * @dev Internal function that handles token transfer to the recipient
+ * @dev If the destination eid is the same as the current eid, it transfers the tokens directly to the recipient
+ * @dev If the destination eid is different, it sends a LayerZero cross-chain transaction
+ * @param _oft The OFT contract address to use for sending
+ * @param _sendParam The parameters for the send operation
+ * @param _refundAddress Address to receive excess payment of the LZ fees
+ */
+ function _send(address _oft, SendParam memory _sendParam, address _refundAddress) internal {
+ if (_sendParam.dstEid == VAULT_EID) {
+ /// @dev Can do this because _oft is validated before this function is called
+ address erc20 = _oft == ASSET_OFT ? ASSET_ERC20 : SHARE_ERC20;
+
+ if (msg.value > 0) revert NoMsgValueExpected();
+ IERC20(erc20).safeTransfer(_sendParam.to.bytes32ToAddress(), _sendParam.amountLD);
+ } else {
+ // crosschain send
+ IOFT(_oft).send{ value: msg.value }(_sendParam, MessagingFee(msg.value, 0), _refundAddress);
+ }
+ }
+
+ /**
+ * @dev Internal function to refund input tokens to sender on source during a failed transaction
+ * @param _oft The OFT contract address used for refunding
+ * @param _message The original message that was sent
+ * @param _amount The amount of tokens to refund
+ * @param _refundAddress Address to receive the refund
+ */
+ function _refund(address _oft, bytes calldata _message, uint256 _amount, address _refundAddress) internal virtual {
+ /// @dev Extracted from the _message header. Will always be part of the _message since it is created by lzReceive
+ SendParam memory refundSendParam;
+ refundSendParam.dstEid = OFTComposeMsgCodec.srcEid(_message);
+ refundSendParam.to = OFTComposeMsgCodec.composeFrom(_message);
+ refundSendParam.amountLD = _amount;
+
+ IOFT(_oft).send{ value: msg.value }(refundSendParam, MessagingFee(msg.value, 0), _refundAddress);
+ }
+
+ receive() external payable {}
+}
diff --git a/packages/ovault-evm/contracts/interfaces/IVaultComposerSync.sol b/packages/ovault-evm/contracts/interfaces/IVaultComposerSync.sol
new file mode 100644
index 0000000000..07f33421e3
--- /dev/null
+++ b/packages/ovault-evm/contracts/interfaces/IVaultComposerSync.sol
@@ -0,0 +1,75 @@
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.22;
+
+import { IERC4626 } from "@openzeppelin/contracts/interfaces/IERC4626.sol";
+
+import { IOAppComposer } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol";
+import { SendParam, MessagingFee } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+
+interface IVaultComposerSync is IOAppComposer {
+ /// ========================== EVENTS =====================================
+ event Sent(bytes32 indexed guid); // 0x27b5aea9
+ event Refunded(bytes32 indexed guid); // 0xfe509803
+
+ /// ========================== Error Messages =====================================
+ error ShareOFTNotAdapter(address shareOFT); // 0xfc1514ae
+ error ShareTokenNotVault(address shareERC20, address vault); // 0x0e178ab6
+ error AssetTokenNotVaultAsset(address assetERC20, address vaultAsset); // 0xba9d665f
+
+ error OnlyEndpoint(address caller); // 0x91ac5e4f
+ error OnlySelf(address caller); // 0xa19dbf00
+ error OnlyValidComposeCaller(address caller); // 0x84fb3f0d
+
+ error InsufficientMsgValue(uint256 expectedMsgValue, uint256 actualMsgValue); // 0x7cb769dc
+ error NoMsgValueExpected(); // 0x7578d2bd
+
+ error SlippageExceeded(uint256 amountLD, uint256 minAmountLD); // 0x71c4efed
+
+ /// ========================== GLOBAL VARIABLE FUNCTIONS =====================================
+ function VAULT() external view returns (IERC4626);
+
+ function ASSET_OFT() external view returns (address);
+ function ASSET_ERC20() external view returns (address);
+ function SHARE_OFT() external view returns (address);
+ function SHARE_ERC20() external view returns (address);
+
+ function ENDPOINT() external view returns (address);
+ function VAULT_EID() external view returns (uint32);
+
+ /// ========================== Proxy OFT =====================================
+
+ /**
+ * @notice Deposits ERC20 assets from the caller into the vault and sends them to the recipient
+ * @param assetAmount The number of ERC20 tokens to deposit and send
+ * @param sendParam Parameters on how to send the shares to the recipient
+ * @param refundAddress Address to receive excess `msg.value`
+ */
+ function depositAndSend(uint256 assetAmount, SendParam memory sendParam, address refundAddress) external payable;
+
+ /**
+ * @notice Redeems vault shares and sends the resulting assets to the user
+ * @param shareAmount The number of vault shares to redeem
+ * @param sendParam Parameter that defines how to send the assets
+ * @param refundAddress Address to receive excess payment of the LZ fees
+ */
+ function redeemAndSend(uint256 shareAmount, SendParam memory sendParam, address refundAddress) external payable;
+
+ /**
+ * @notice Quotes the send operation for the given OFT and SendParam
+ * @param from The "sender address" used for the quote
+ * @param targetOft The OFT contract address to quote
+ * @param vaultInAmount The amount of tokens to send to the vault
+ * @param sendParam The parameters for the send operation
+ * @return MessagingFee The estimated fee for the send operation
+ * @dev This function can be overridden to implement custom quoting logic
+ */
+ function quoteSend(
+ address from,
+ address targetOft,
+ uint256 vaultInAmount,
+ SendParam memory sendParam
+ ) external view returns (MessagingFee memory);
+
+ /// ========================== Receive =====================================
+ receive() external payable;
+}
diff --git a/packages/ovault-evm/foundry.toml b/packages/ovault-evm/foundry.toml
new file mode 100644
index 0000000000..74c97fb60f
--- /dev/null
+++ b/packages/ovault-evm/foundry.toml
@@ -0,0 +1,35 @@
+[profile.default]
+solc = '0.8.22'
+verbosity = 3
+src = "contracts"
+test = "test"
+out = "artifacts"
+cache_path = "cache"
+optimizer = true
+optimizer_runs = 20_000
+
+libs = [
+ # We provide a set of useful contract utilities
+ # in the lib directory of @layerzerolabs/toolbox-foundry:
+ #
+ # - forge-std
+ # - ds-test
+ # - solidity-bytes-utils
+ 'node_modules/@layerzerolabs/toolbox-foundry/lib',
+ 'node_modules',
+]
+
+remappings = [
+ # Due to a misconfiguration of solidity-bytes-utils, an outdated version
+ # of forge-std is being dragged in
+ #
+ # To remedy this, we'll remap the ds-test and forge-std imports to our own versions
+ 'ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/',
+ 'forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/',
+ 'solidity-bytes-utils/contracts/=node_modules/@layerzerolabs/toolbox-foundry/lib/solidity-bytes-utils/',
+ '@layerzerolabs/=node_modules/@layerzerolabs/',
+ '@openzeppelin/=node_modules/@openzeppelin/',
+]
+
+[fuzz]
+runs = 1000
diff --git a/packages/ovault-evm/package.json b/packages/ovault-evm/package.json
new file mode 100644
index 0000000000..59c2cabbfe
--- /dev/null
+++ b/packages/ovault-evm/package.json
@@ -0,0 +1,88 @@
+{
+ "name": "@layerzerolabs/ovault-evm",
+ "version": "0.0.1",
+ "description": "LayerZero Labs reference EVM OVault + composer implementation",
+ "keywords": [
+ "LayerZero",
+ "OVault",
+ "ERC4626",
+ "Composer",
+ "OmniChain",
+ "EndpointV2",
+ "EVM"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/LayerZero-Labs/devtools.git",
+ "directory": "packages/ovault-evm"
+ },
+ "license": "MIT",
+ "type": "module",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "require": "./dist/*.js",
+ "import": "./dist/index.js"
+ },
+ "./package.json": "./package.json",
+ "./artifacts/*.json": {
+ "require": "./artifacts/*.json",
+ "imports": "./artifacts/*.json"
+ }
+ },
+ "files": [
+ "contracts/**/*",
+ "test/**/*",
+ "src/**/*",
+ "dist/**/*",
+ "artifacts/**/*.{json,sol}"
+ ],
+ "scripts": {
+ "clean": "rimraf .turbo cache out artifacts",
+ "compile": "$npm_execpath compile:forge",
+ "compile:forge": "forge build",
+ "prepublishOnly": "npm run sdk:build",
+ "sdk:build": "tsc",
+ "sdk:start": "tsx src/sdk.ts",
+ "sdk:test": "tsx node_modules/mocha/bin/_mocha test/**/*.test.ts",
+ "test": "$npm_execpath test:forge",
+ "test:forge": "forge test"
+ },
+ "dependencies": {
+ "@layerzerolabs/lz-definitions": "^3.0.75",
+ "@layerzerolabs/lz-v2-utilities": "^3.0.75",
+ "@layerzerolabs/scan-client-v2": "^0.0.1",
+ "redaxios": "^0.5.1",
+ "viem": "^2.33.1"
+ },
+ "devDependencies": {
+ "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75",
+ "@layerzerolabs/lz-evm-protocol-v2": "^3.0.75",
+ "@layerzerolabs/lz-evm-v1-0.7": "^3.0.75",
+ "@layerzerolabs/oapp-evm": "^0.3.2",
+ "@layerzerolabs/oft-evm": "^3.1.4",
+ "@layerzerolabs/test-devtools-evm-foundry": "~6.0.3",
+ "@layerzerolabs/toolbox-foundry": "^0.1.12",
+ "@openzeppelin/contracts": "^5.0.2",
+ "@openzeppelin/contracts-upgradeable": "^5.0.2",
+ "@types/mocha": "^10.0.10",
+ "@types/node": "^24.1.0",
+ "mocha": "^11.7.1",
+ "rimraf": "^5.0.5",
+ "ts-mocha": "^11.1.0",
+ "ts-node": "^10.9.2",
+ "tsx": "^4.20.3",
+ "typescript": "^5.4.4"
+ },
+ "peerDependencies": {
+ "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.75",
+ "@layerzerolabs/lz-evm-protocol-v2": "^3.0.75",
+ "@layerzerolabs/lz-evm-v1-0.7": "^3.0.75",
+ "@layerzerolabs/oapp-evm": "^0.3.2",
+ "@openzeppelin/contracts": "^4.8.1 || ^5.0.0",
+ "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/packages/ovault-evm/src/contracts/ERC20.ts b/packages/ovault-evm/src/contracts/ERC20.ts
new file mode 100644
index 0000000000..9599fe1180
--- /dev/null
+++ b/packages/ovault-evm/src/contracts/ERC20.ts
@@ -0,0 +1,222 @@
+export const ERC20Abi = [
+ {
+ constant: true,
+ inputs: [],
+ name: 'name',
+ outputs: [
+ {
+ name: '',
+ type: 'string',
+ },
+ ],
+ payable: false,
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ constant: false,
+ inputs: [
+ {
+ name: '_spender',
+ type: 'address',
+ },
+ {
+ name: '_value',
+ type: 'uint256',
+ },
+ ],
+ name: 'approve',
+ outputs: [
+ {
+ name: '',
+ type: 'bool',
+ },
+ ],
+ payable: false,
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ constant: true,
+ inputs: [],
+ name: 'totalSupply',
+ outputs: [
+ {
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ payable: false,
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ constant: false,
+ inputs: [
+ {
+ name: '_from',
+ type: 'address',
+ },
+ {
+ name: '_to',
+ type: 'address',
+ },
+ {
+ name: '_value',
+ type: 'uint256',
+ },
+ ],
+ name: 'transferFrom',
+ outputs: [
+ {
+ name: '',
+ type: 'bool',
+ },
+ ],
+ payable: false,
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ constant: true,
+ inputs: [],
+ name: 'decimals',
+ outputs: [
+ {
+ name: '',
+ type: 'uint8',
+ },
+ ],
+ payable: false,
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ constant: true,
+ inputs: [
+ {
+ name: '_owner',
+ type: 'address',
+ },
+ ],
+ name: 'balanceOf',
+ outputs: [
+ {
+ name: 'balance',
+ type: 'uint256',
+ },
+ ],
+ payable: false,
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ constant: true,
+ inputs: [],
+ name: 'symbol',
+ outputs: [
+ {
+ name: '',
+ type: 'string',
+ },
+ ],
+ payable: false,
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ constant: false,
+ inputs: [
+ {
+ name: '_to',
+ type: 'address',
+ },
+ {
+ name: '_value',
+ type: 'uint256',
+ },
+ ],
+ name: 'transfer',
+ outputs: [
+ {
+ name: '',
+ type: 'bool',
+ },
+ ],
+ payable: false,
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ constant: true,
+ inputs: [
+ {
+ name: '_owner',
+ type: 'address',
+ },
+ {
+ name: '_spender',
+ type: 'address',
+ },
+ ],
+ name: 'allowance',
+ outputs: [
+ {
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ payable: false,
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ payable: true,
+ stateMutability: 'payable',
+ type: 'fallback',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ name: 'owner',
+ type: 'address',
+ },
+ {
+ indexed: true,
+ name: 'spender',
+ type: 'address',
+ },
+ {
+ indexed: false,
+ name: 'value',
+ type: 'uint256',
+ },
+ ],
+ name: 'Approval',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ name: 'from',
+ type: 'address',
+ },
+ {
+ indexed: true,
+ name: 'to',
+ type: 'address',
+ },
+ {
+ indexed: false,
+ name: 'value',
+ type: 'uint256',
+ },
+ ],
+ name: 'Transfer',
+ type: 'event',
+ },
+] as const
diff --git a/packages/ovault-evm/src/contracts/ERC4626.ts b/packages/ovault-evm/src/contracts/ERC4626.ts
new file mode 100644
index 0000000000..0ed23275e1
--- /dev/null
+++ b/packages/ovault-evm/src/contracts/ERC4626.ts
@@ -0,0 +1,795 @@
+export const ERC4626_ABI = [
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'spender',
+ type: 'address',
+ },
+ {
+ internalType: 'uint256',
+ name: 'allowance',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'needed',
+ type: 'uint256',
+ },
+ ],
+ name: 'ERC20InsufficientAllowance',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'sender',
+ type: 'address',
+ },
+ {
+ internalType: 'uint256',
+ name: 'balance',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'needed',
+ type: 'uint256',
+ },
+ ],
+ name: 'ERC20InsufficientBalance',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'approver',
+ type: 'address',
+ },
+ ],
+ name: 'ERC20InvalidApprover',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'receiver',
+ type: 'address',
+ },
+ ],
+ name: 'ERC20InvalidReceiver',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'sender',
+ type: 'address',
+ },
+ ],
+ name: 'ERC20InvalidSender',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'spender',
+ type: 'address',
+ },
+ ],
+ name: 'ERC20InvalidSpender',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'receiver',
+ type: 'address',
+ },
+ {
+ internalType: 'uint256',
+ name: 'assets',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'max',
+ type: 'uint256',
+ },
+ ],
+ name: 'ERC4626ExceededMaxDeposit',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'receiver',
+ type: 'address',
+ },
+ {
+ internalType: 'uint256',
+ name: 'shares',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'max',
+ type: 'uint256',
+ },
+ ],
+ name: 'ERC4626ExceededMaxMint',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'owner',
+ type: 'address',
+ },
+ {
+ internalType: 'uint256',
+ name: 'shares',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'max',
+ type: 'uint256',
+ },
+ ],
+ name: 'ERC4626ExceededMaxRedeem',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'owner',
+ type: 'address',
+ },
+ {
+ internalType: 'uint256',
+ name: 'assets',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'max',
+ type: 'uint256',
+ },
+ ],
+ name: 'ERC4626ExceededMaxWithdraw',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'token',
+ type: 'address',
+ },
+ ],
+ name: 'SafeERC20FailedOperation',
+ type: 'error',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: 'address',
+ name: 'owner',
+ type: 'address',
+ },
+ {
+ indexed: true,
+ internalType: 'address',
+ name: 'spender',
+ type: 'address',
+ },
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'value',
+ type: 'uint256',
+ },
+ ],
+ name: 'Approval',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: 'address',
+ name: 'sender',
+ type: 'address',
+ },
+ {
+ indexed: true,
+ internalType: 'address',
+ name: 'owner',
+ type: 'address',
+ },
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'assets',
+ type: 'uint256',
+ },
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'shares',
+ type: 'uint256',
+ },
+ ],
+ name: 'Deposit',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: 'address',
+ name: 'from',
+ type: 'address',
+ },
+ {
+ indexed: true,
+ internalType: 'address',
+ name: 'to',
+ type: 'address',
+ },
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'value',
+ type: 'uint256',
+ },
+ ],
+ name: 'Transfer',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: 'address',
+ name: 'sender',
+ type: 'address',
+ },
+ {
+ indexed: true,
+ internalType: 'address',
+ name: 'receiver',
+ type: 'address',
+ },
+ {
+ indexed: true,
+ internalType: 'address',
+ name: 'owner',
+ type: 'address',
+ },
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'assets',
+ type: 'uint256',
+ },
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'shares',
+ type: 'uint256',
+ },
+ ],
+ name: 'Withdraw',
+ type: 'event',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'owner',
+ type: 'address',
+ },
+ {
+ internalType: 'address',
+ name: 'spender',
+ type: 'address',
+ },
+ ],
+ name: 'allowance',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'spender',
+ type: 'address',
+ },
+ {
+ internalType: 'uint256',
+ name: 'value',
+ type: 'uint256',
+ },
+ ],
+ name: 'approve',
+ outputs: [
+ {
+ internalType: 'bool',
+ name: '',
+ type: 'bool',
+ },
+ ],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'asset',
+ outputs: [
+ {
+ internalType: 'address',
+ name: '',
+ type: 'address',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'account',
+ type: 'address',
+ },
+ ],
+ name: 'balanceOf',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: 'shares',
+ type: 'uint256',
+ },
+ ],
+ name: 'convertToAssets',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: 'assets',
+ type: 'uint256',
+ },
+ ],
+ name: 'convertToShares',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'decimals',
+ outputs: [
+ {
+ internalType: 'uint8',
+ name: '',
+ type: 'uint8',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: 'assets',
+ type: 'uint256',
+ },
+ {
+ internalType: 'address',
+ name: 'receiver',
+ type: 'address',
+ },
+ ],
+ name: 'deposit',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: '',
+ type: 'address',
+ },
+ ],
+ name: 'maxDeposit',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: '',
+ type: 'address',
+ },
+ ],
+ name: 'maxMint',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'owner',
+ type: 'address',
+ },
+ ],
+ name: 'maxRedeem',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'owner',
+ type: 'address',
+ },
+ ],
+ name: 'maxWithdraw',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: 'shares',
+ type: 'uint256',
+ },
+ {
+ internalType: 'address',
+ name: 'receiver',
+ type: 'address',
+ },
+ ],
+ name: 'mint',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'name',
+ outputs: [
+ {
+ internalType: 'string',
+ name: '',
+ type: 'string',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: 'assets',
+ type: 'uint256',
+ },
+ ],
+ name: 'previewDeposit',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: 'shares',
+ type: 'uint256',
+ },
+ ],
+ name: 'previewMint',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: 'shares',
+ type: 'uint256',
+ },
+ ],
+ name: 'previewRedeem',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: 'assets',
+ type: 'uint256',
+ },
+ ],
+ name: 'previewWithdraw',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: 'shares',
+ type: 'uint256',
+ },
+ {
+ internalType: 'address',
+ name: 'receiver',
+ type: 'address',
+ },
+ {
+ internalType: 'address',
+ name: 'owner',
+ type: 'address',
+ },
+ ],
+ name: 'redeem',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'symbol',
+ outputs: [
+ {
+ internalType: 'string',
+ name: '',
+ type: 'string',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'totalAssets',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'totalSupply',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'to',
+ type: 'address',
+ },
+ {
+ internalType: 'uint256',
+ name: 'value',
+ type: 'uint256',
+ },
+ ],
+ name: 'transfer',
+ outputs: [
+ {
+ internalType: 'bool',
+ name: '',
+ type: 'bool',
+ },
+ ],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'from',
+ type: 'address',
+ },
+ {
+ internalType: 'address',
+ name: 'to',
+ type: 'address',
+ },
+ {
+ internalType: 'uint256',
+ name: 'value',
+ type: 'uint256',
+ },
+ ],
+ name: 'transferFrom',
+ outputs: [
+ {
+ internalType: 'bool',
+ name: '',
+ type: 'bool',
+ },
+ ],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: 'assets',
+ type: 'uint256',
+ },
+ {
+ internalType: 'address',
+ name: 'receiver',
+ type: 'address',
+ },
+ {
+ internalType: 'address',
+ name: 'owner',
+ type: 'address',
+ },
+ ],
+ name: 'withdraw',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+] as const
diff --git a/packages/ovault-evm/src/contracts/OFT.ts b/packages/ovault-evm/src/contracts/OFT.ts
new file mode 100644
index 0000000000..ce1ef59b5c
--- /dev/null
+++ b/packages/ovault-evm/src/contracts/OFT.ts
@@ -0,0 +1,1868 @@
+export const OFTAbi = [
+ {
+ inputs: [
+ {
+ internalType: 'uint32',
+ name: '_ethEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'uint32',
+ name: '_arbitrumEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'uint32',
+ name: '_tonEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'uint32',
+ name: '_tronEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'address',
+ name: '_token',
+ type: 'address',
+ },
+ {
+ internalType: 'address',
+ name: '_lzEndpoint',
+ type: 'address',
+ },
+ {
+ internalType: 'address',
+ name: '_delegate',
+ type: 'address',
+ },
+ ],
+ stateMutability: 'nonpayable',
+ type: 'constructor',
+ },
+ {
+ inputs: [],
+ name: 'ComposeNotSupported',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint32',
+ name: 'eid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'uint256',
+ name: 'credits',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'amountWithdraw',
+ type: 'uint256',
+ },
+ ],
+ name: 'InsufficientCredits',
+ type: 'error',
+ },
+ {
+ inputs: [],
+ name: 'InsufficientFeeBalance',
+ type: 'error',
+ },
+ {
+ inputs: [],
+ name: 'InvalidAmount',
+ type: 'error',
+ },
+ {
+ inputs: [],
+ name: 'InvalidDelegate',
+ type: 'error',
+ },
+ {
+ inputs: [],
+ name: 'InvalidEid',
+ type: 'error',
+ },
+ {
+ inputs: [],
+ name: 'InvalidEndpointCall',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint16',
+ name: 'feeBps',
+ type: 'uint16',
+ },
+ ],
+ name: 'InvalidFeeBps',
+ type: 'error',
+ },
+ {
+ inputs: [],
+ name: 'InvalidLocalDecimals',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint16',
+ name: 'msgType',
+ type: 'uint16',
+ },
+ ],
+ name: 'InvalidMsgType',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'bytes',
+ name: 'options',
+ type: 'bytes',
+ },
+ ],
+ name: 'InvalidOptions',
+ type: 'error',
+ },
+ {
+ inputs: [],
+ name: 'LzTokenUnavailable',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint32',
+ name: 'eid',
+ type: 'uint32',
+ },
+ ],
+ name: 'NoPeer',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: 'msgValue',
+ type: 'uint256',
+ },
+ ],
+ name: 'NotEnoughNative',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'addr',
+ type: 'address',
+ },
+ ],
+ name: 'OnlyEndpoint',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint32',
+ name: 'eid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'bytes32',
+ name: 'sender',
+ type: 'bytes32',
+ },
+ ],
+ name: 'OnlyPeer',
+ type: 'error',
+ },
+ {
+ inputs: [],
+ name: 'OnlyPlanner',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'owner',
+ type: 'address',
+ },
+ ],
+ name: 'OwnableInvalidOwner',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'account',
+ type: 'address',
+ },
+ ],
+ name: 'OwnableUnauthorizedAccount',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'token',
+ type: 'address',
+ },
+ ],
+ name: 'SafeERC20FailedOperation',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: 'amountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'minAmountLD',
+ type: 'uint256',
+ },
+ ],
+ name: 'SlippageExceeded',
+ type: 'error',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: 'bytes32',
+ name: 'guid',
+ type: 'bytes32',
+ },
+ {
+ indexed: false,
+ internalType: 'uint32',
+ name: 'srcEid',
+ type: 'uint32',
+ },
+ {
+ indexed: false,
+ internalType: 'bytes',
+ name: 'message',
+ type: 'bytes',
+ },
+ ],
+ name: 'CreditsReceived',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: 'uint32',
+ name: 'dstEid',
+ type: 'uint32',
+ },
+ {
+ indexed: false,
+ internalType: 'uint64',
+ name: 'creditsEth',
+ type: 'uint64',
+ },
+ {
+ indexed: false,
+ internalType: 'uint64',
+ name: 'creditsArbitrum',
+ type: 'uint64',
+ },
+ {
+ indexed: false,
+ internalType: 'uint64',
+ name: 'creditsTon',
+ type: 'uint64',
+ },
+ {
+ indexed: false,
+ internalType: 'uint64',
+ name: 'creditsTron',
+ type: 'uint64',
+ },
+ ],
+ name: 'CreditsSent',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ components: [
+ {
+ internalType: 'uint32',
+ name: 'eid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'uint16',
+ name: 'msgType',
+ type: 'uint16',
+ },
+ {
+ internalType: 'bytes',
+ name: 'options',
+ type: 'bytes',
+ },
+ ],
+ indexed: false,
+ internalType: 'struct EnforcedOptionParam[]',
+ name: '_enforcedOptions',
+ type: 'tuple[]',
+ },
+ ],
+ name: 'EnforcedOptionSet',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: 'uint16',
+ name: 'feeBps',
+ type: 'uint16',
+ },
+ ],
+ name: 'FeeBpsSet',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: 'address',
+ name: 'to',
+ type: 'address',
+ },
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'amount',
+ type: 'uint256',
+ },
+ ],
+ name: 'FeesWithdrawn',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'amount',
+ type: 'uint256',
+ },
+ ],
+ name: 'LocalDeposit',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: 'address',
+ name: 'to',
+ type: 'address',
+ },
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'amount',
+ type: 'uint256',
+ },
+ ],
+ name: 'LocalWithdrawn',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: 'bytes32',
+ name: 'guid',
+ type: 'bytes32',
+ },
+ {
+ indexed: false,
+ internalType: 'uint32',
+ name: 'srcEid',
+ type: 'uint32',
+ },
+ {
+ indexed: true,
+ internalType: 'address',
+ name: 'toAddress',
+ type: 'address',
+ },
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'amountReceivedLD',
+ type: 'uint256',
+ },
+ ],
+ name: 'OFTReceived',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: 'bytes32',
+ name: 'guid',
+ type: 'bytes32',
+ },
+ {
+ indexed: false,
+ internalType: 'uint32',
+ name: 'dstEid',
+ type: 'uint32',
+ },
+ {
+ indexed: true,
+ internalType: 'address',
+ name: 'fromAddress',
+ type: 'address',
+ },
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'amountSentLD',
+ type: 'uint256',
+ },
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'amountReceivedLD',
+ type: 'uint256',
+ },
+ ],
+ name: 'OFTSent',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: 'address',
+ name: 'previousOwner',
+ type: 'address',
+ },
+ {
+ indexed: true,
+ internalType: 'address',
+ name: 'newOwner',
+ type: 'address',
+ },
+ ],
+ name: 'OwnershipTransferred',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: 'uint32',
+ name: 'eid',
+ type: 'uint32',
+ },
+ {
+ indexed: false,
+ internalType: 'bytes32',
+ name: 'peer',
+ type: 'bytes32',
+ },
+ ],
+ name: 'PeerSet',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: 'address',
+ name: 'planner',
+ type: 'address',
+ },
+ ],
+ name: 'PlannerSet',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: 'bytes32',
+ name: 'guid',
+ type: 'bytes32',
+ },
+ {
+ indexed: false,
+ internalType: 'uint32',
+ name: 'srcEid',
+ type: 'uint32',
+ },
+ {
+ indexed: false,
+ internalType: 'address',
+ name: 'to',
+ type: 'address',
+ },
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'amount',
+ type: 'uint256',
+ },
+ ],
+ name: 'RemoteWithdrawReceived',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: 'uint32',
+ name: 'dstEid',
+ type: 'uint32',
+ },
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'amount',
+ type: 'uint256',
+ },
+ ],
+ name: 'RemoteWithdrawn',
+ type: 'event',
+ },
+ {
+ inputs: [],
+ name: 'ARBITRUM_EID',
+ outputs: [
+ {
+ internalType: 'uint32',
+ name: '',
+ type: 'uint32',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'BPS_DENOMINATOR',
+ outputs: [
+ {
+ internalType: 'uint16',
+ name: '',
+ type: 'uint16',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'ETH_EID',
+ outputs: [
+ {
+ internalType: 'uint32',
+ name: '',
+ type: 'uint32',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'LOCAL_EID',
+ outputs: [
+ {
+ internalType: 'uint32',
+ name: '',
+ type: 'uint32',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'SEND_CREDITS',
+ outputs: [
+ {
+ internalType: 'uint16',
+ name: '',
+ type: 'uint16',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'SEND_OFT',
+ outputs: [
+ {
+ internalType: 'uint16',
+ name: '',
+ type: 'uint16',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'TON_EID',
+ outputs: [
+ {
+ internalType: 'uint32',
+ name: '',
+ type: 'uint32',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'TRON_EID',
+ outputs: [
+ {
+ internalType: 'uint32',
+ name: '',
+ type: 'uint32',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'WITHDRAW_REMOTE',
+ outputs: [
+ {
+ internalType: 'uint16',
+ name: '',
+ type: 'uint16',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: 'uint32',
+ name: 'srcEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'bytes32',
+ name: 'sender',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'uint64',
+ name: 'nonce',
+ type: 'uint64',
+ },
+ ],
+ internalType: 'struct Origin',
+ name: 'origin',
+ type: 'tuple',
+ },
+ ],
+ name: 'allowInitializePath',
+ outputs: [
+ {
+ internalType: 'bool',
+ name: '',
+ type: 'bool',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'approvalRequired',
+ outputs: [
+ {
+ internalType: 'bool',
+ name: '',
+ type: 'bool',
+ },
+ ],
+ stateMutability: 'pure',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint32',
+ name: '_eid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'uint16',
+ name: '_msgType',
+ type: 'uint16',
+ },
+ {
+ internalType: 'bytes',
+ name: '_extraOptions',
+ type: 'bytes',
+ },
+ ],
+ name: 'combineOptions',
+ outputs: [
+ {
+ internalType: 'bytes',
+ name: '',
+ type: 'bytes',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint32',
+ name: 'eid',
+ type: 'uint32',
+ },
+ ],
+ name: 'credits',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: 'credits',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: '_amount',
+ type: 'uint256',
+ },
+ ],
+ name: 'depositLocal',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'endpoint',
+ outputs: [
+ {
+ internalType: 'contract ILayerZeroEndpointV2',
+ name: '',
+ type: 'address',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint32',
+ name: 'eid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'uint16',
+ name: 'msgType',
+ type: 'uint16',
+ },
+ ],
+ name: 'enforcedOptions',
+ outputs: [
+ {
+ internalType: 'bytes',
+ name: 'enforcedOption',
+ type: 'bytes',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'feeBalance',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'feeBps',
+ outputs: [
+ {
+ internalType: 'uint16',
+ name: '',
+ type: 'uint16',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: 'uint32',
+ name: 'srcEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'bytes32',
+ name: 'sender',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'uint64',
+ name: 'nonce',
+ type: 'uint64',
+ },
+ ],
+ internalType: 'struct Origin',
+ name: '',
+ type: 'tuple',
+ },
+ {
+ internalType: 'bytes',
+ name: '',
+ type: 'bytes',
+ },
+ {
+ internalType: 'address',
+ name: '_sender',
+ type: 'address',
+ },
+ ],
+ name: 'isComposeMsgSender',
+ outputs: [
+ {
+ internalType: 'bool',
+ name: '',
+ type: 'bool',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: 'uint32',
+ name: 'srcEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'bytes32',
+ name: 'sender',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'uint64',
+ name: 'nonce',
+ type: 'uint64',
+ },
+ ],
+ internalType: 'struct Origin',
+ name: '_origin',
+ type: 'tuple',
+ },
+ {
+ internalType: 'bytes32',
+ name: '_guid',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'bytes',
+ name: '_message',
+ type: 'bytes',
+ },
+ {
+ internalType: 'address',
+ name: '_executor',
+ type: 'address',
+ },
+ {
+ internalType: 'bytes',
+ name: '_extraData',
+ type: 'bytes',
+ },
+ ],
+ name: 'lzReceive',
+ outputs: [],
+ stateMutability: 'payable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint32',
+ name: '',
+ type: 'uint32',
+ },
+ {
+ internalType: 'bytes32',
+ name: '',
+ type: 'bytes32',
+ },
+ ],
+ name: 'nextNonce',
+ outputs: [
+ {
+ internalType: 'uint64',
+ name: 'nonce',
+ type: 'uint64',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'oAppVersion',
+ outputs: [
+ {
+ internalType: 'uint64',
+ name: 'senderVersion',
+ type: 'uint64',
+ },
+ {
+ internalType: 'uint64',
+ name: 'receiverVersion',
+ type: 'uint64',
+ },
+ ],
+ stateMutability: 'pure',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'oftVersion',
+ outputs: [
+ {
+ internalType: 'bytes4',
+ name: 'interfaceId',
+ type: 'bytes4',
+ },
+ {
+ internalType: 'uint64',
+ name: 'version',
+ type: 'uint64',
+ },
+ ],
+ stateMutability: 'pure',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'owner',
+ outputs: [
+ {
+ internalType: 'address',
+ name: '',
+ type: 'address',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint32',
+ name: 'eid',
+ type: 'uint32',
+ },
+ ],
+ name: 'peers',
+ outputs: [
+ {
+ internalType: 'bytes32',
+ name: 'peer',
+ type: 'bytes32',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'planner',
+ outputs: [
+ {
+ internalType: 'address',
+ name: '',
+ type: 'address',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: 'uint32',
+ name: 'dstEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'bytes32',
+ name: 'to',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'uint256',
+ name: 'amountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'minAmountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'bytes',
+ name: 'extraOptions',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'composeMsg',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'oftCmd',
+ type: 'bytes',
+ },
+ ],
+ internalType: 'struct SendParam',
+ name: '_sendParam',
+ type: 'tuple',
+ },
+ ],
+ name: 'quoteOFT',
+ outputs: [
+ {
+ components: [
+ {
+ internalType: 'uint256',
+ name: 'minAmountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'maxAmountLD',
+ type: 'uint256',
+ },
+ ],
+ internalType: 'struct OFTLimit',
+ name: 'oftLimit',
+ type: 'tuple',
+ },
+ {
+ components: [
+ {
+ internalType: 'int256',
+ name: 'feeAmountLD',
+ type: 'int256',
+ },
+ {
+ internalType: 'string',
+ name: 'description',
+ type: 'string',
+ },
+ ],
+ internalType: 'struct OFTFeeDetail[]',
+ name: 'oftFeeDetails',
+ type: 'tuple[]',
+ },
+ {
+ components: [
+ {
+ internalType: 'uint256',
+ name: 'amountSentLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'amountReceivedLD',
+ type: 'uint256',
+ },
+ ],
+ internalType: 'struct OFTReceipt',
+ name: 'oftReceipt',
+ type: 'tuple',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: 'uint32',
+ name: 'dstEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'bytes32',
+ name: 'to',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'uint256',
+ name: 'amountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'minAmountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'bytes',
+ name: 'extraOptions',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'composeMsg',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'oftCmd',
+ type: 'bytes',
+ },
+ ],
+ internalType: 'struct SendParam',
+ name: '_sendParam',
+ type: 'tuple',
+ },
+ {
+ internalType: 'bool',
+ name: '_payInLzToken',
+ type: 'bool',
+ },
+ ],
+ name: 'quoteSend',
+ outputs: [
+ {
+ components: [
+ {
+ internalType: 'uint256',
+ name: 'nativeFee',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'lzTokenFee',
+ type: 'uint256',
+ },
+ ],
+ internalType: 'struct MessagingFee',
+ name: 'msgFee',
+ type: 'tuple',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint32',
+ name: '_dstEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'uint64',
+ name: '_creditsEth',
+ type: 'uint64',
+ },
+ {
+ internalType: 'uint64',
+ name: '_creditsArbitrum',
+ type: 'uint64',
+ },
+ {
+ internalType: 'uint64',
+ name: '_creditsTon',
+ type: 'uint64',
+ },
+ {
+ internalType: 'uint64',
+ name: '_creditsTron',
+ type: 'uint64',
+ },
+ {
+ internalType: 'bytes',
+ name: '_extraOptions',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bool',
+ name: '_payInLzToken',
+ type: 'bool',
+ },
+ ],
+ name: 'quoteSendCredits',
+ outputs: [
+ {
+ components: [
+ {
+ internalType: 'uint256',
+ name: 'nativeFee',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'lzTokenFee',
+ type: 'uint256',
+ },
+ ],
+ internalType: 'struct MessagingFee',
+ name: 'msgFee',
+ type: 'tuple',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: 'uint32',
+ name: 'dstEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'bytes32',
+ name: 'to',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'uint256',
+ name: 'amountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'minAmountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'bytes',
+ name: 'extraOptions',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'composeMsg',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'oftCmd',
+ type: 'bytes',
+ },
+ ],
+ internalType: 'struct SendParam',
+ name: '_sendParam',
+ type: 'tuple',
+ },
+ {
+ internalType: 'bool',
+ name: '_payInLzToken',
+ type: 'bool',
+ },
+ ],
+ name: 'quoteWithdrawRemote',
+ outputs: [
+ {
+ components: [
+ {
+ internalType: 'uint256',
+ name: 'nativeFee',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'lzTokenFee',
+ type: 'uint256',
+ },
+ ],
+ internalType: 'struct MessagingFee',
+ name: 'msgFee',
+ type: 'tuple',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'renounceOwnership',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: 'uint32',
+ name: 'dstEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'bytes32',
+ name: 'to',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'uint256',
+ name: 'amountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'minAmountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'bytes',
+ name: 'extraOptions',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'composeMsg',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'oftCmd',
+ type: 'bytes',
+ },
+ ],
+ internalType: 'struct SendParam',
+ name: '_sendParam',
+ type: 'tuple',
+ },
+ {
+ components: [
+ {
+ internalType: 'uint256',
+ name: 'nativeFee',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'lzTokenFee',
+ type: 'uint256',
+ },
+ ],
+ internalType: 'struct MessagingFee',
+ name: '_fee',
+ type: 'tuple',
+ },
+ {
+ internalType: 'address',
+ name: '_refundAddress',
+ type: 'address',
+ },
+ ],
+ name: 'send',
+ outputs: [
+ {
+ components: [
+ {
+ internalType: 'bytes32',
+ name: 'guid',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'uint64',
+ name: 'nonce',
+ type: 'uint64',
+ },
+ {
+ components: [
+ {
+ internalType: 'uint256',
+ name: 'nativeFee',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'lzTokenFee',
+ type: 'uint256',
+ },
+ ],
+ internalType: 'struct MessagingFee',
+ name: 'fee',
+ type: 'tuple',
+ },
+ ],
+ internalType: 'struct MessagingReceipt',
+ name: 'msgReceipt',
+ type: 'tuple',
+ },
+ {
+ components: [
+ {
+ internalType: 'uint256',
+ name: 'amountSentLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'amountReceivedLD',
+ type: 'uint256',
+ },
+ ],
+ internalType: 'struct OFTReceipt',
+ name: 'oftReceipt',
+ type: 'tuple',
+ },
+ ],
+ stateMutability: 'payable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint32',
+ name: '_dstEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'uint64',
+ name: '_creditsEth',
+ type: 'uint64',
+ },
+ {
+ internalType: 'uint64',
+ name: '_creditsArbitrum',
+ type: 'uint64',
+ },
+ {
+ internalType: 'uint64',
+ name: '_creditsTon',
+ type: 'uint64',
+ },
+ {
+ internalType: 'uint64',
+ name: '_creditsTron',
+ type: 'uint64',
+ },
+ {
+ internalType: 'bytes',
+ name: '_extraOptions',
+ type: 'bytes',
+ },
+ {
+ components: [
+ {
+ internalType: 'uint256',
+ name: 'nativeFee',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'lzTokenFee',
+ type: 'uint256',
+ },
+ ],
+ internalType: 'struct MessagingFee',
+ name: '_fee',
+ type: 'tuple',
+ },
+ ],
+ name: 'sendCredits',
+ outputs: [
+ {
+ components: [
+ {
+ internalType: 'bytes32',
+ name: 'guid',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'uint64',
+ name: 'nonce',
+ type: 'uint64',
+ },
+ {
+ components: [
+ {
+ internalType: 'uint256',
+ name: 'nativeFee',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'lzTokenFee',
+ type: 'uint256',
+ },
+ ],
+ internalType: 'struct MessagingFee',
+ name: 'fee',
+ type: 'tuple',
+ },
+ ],
+ internalType: 'struct MessagingReceipt',
+ name: 'msgReceipt',
+ type: 'tuple',
+ },
+ ],
+ stateMutability: 'payable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: '_delegate',
+ type: 'address',
+ },
+ ],
+ name: 'setDelegate',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: 'uint32',
+ name: 'eid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'uint16',
+ name: 'msgType',
+ type: 'uint16',
+ },
+ {
+ internalType: 'bytes',
+ name: 'options',
+ type: 'bytes',
+ },
+ ],
+ internalType: 'struct EnforcedOptionParam[]',
+ name: '_enforcedOptions',
+ type: 'tuple[]',
+ },
+ ],
+ name: 'setEnforcedOptions',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint16',
+ name: '_feeBps',
+ type: 'uint16',
+ },
+ ],
+ name: 'setFeeBps',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint32',
+ name: '_eid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'bytes32',
+ name: '_peer',
+ type: 'bytes32',
+ },
+ ],
+ name: 'setPeer',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: '_planner',
+ type: 'address',
+ },
+ ],
+ name: 'setPlanner',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'sharedDecimals',
+ outputs: [
+ {
+ internalType: 'uint8',
+ name: '',
+ type: 'uint8',
+ },
+ ],
+ stateMutability: 'pure',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'token',
+ outputs: [
+ {
+ internalType: 'address',
+ name: '',
+ type: 'address',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'newOwner',
+ type: 'address',
+ },
+ ],
+ name: 'transferOwnership',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'tvl',
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: '_to',
+ type: 'address',
+ },
+ {
+ internalType: 'uint256',
+ name: '_amount',
+ type: 'uint256',
+ },
+ ],
+ name: 'withdrawFees',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: '_to',
+ type: 'address',
+ },
+ {
+ internalType: 'uint256',
+ name: '_amount',
+ type: 'uint256',
+ },
+ ],
+ name: 'withdrawLocal',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: 'uint32',
+ name: 'dstEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'bytes32',
+ name: 'to',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'uint256',
+ name: 'amountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'minAmountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'bytes',
+ name: 'extraOptions',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'composeMsg',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'oftCmd',
+ type: 'bytes',
+ },
+ ],
+ internalType: 'struct SendParam',
+ name: '_sendParam',
+ type: 'tuple',
+ },
+ {
+ components: [
+ {
+ internalType: 'uint256',
+ name: 'nativeFee',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'lzTokenFee',
+ type: 'uint256',
+ },
+ ],
+ internalType: 'struct MessagingFee',
+ name: '_fee',
+ type: 'tuple',
+ },
+ {
+ internalType: 'address',
+ name: '_refundAddress',
+ type: 'address',
+ },
+ ],
+ name: 'withdrawRemote',
+ outputs: [
+ {
+ components: [
+ {
+ internalType: 'bytes32',
+ name: 'guid',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'uint64',
+ name: 'nonce',
+ type: 'uint64',
+ },
+ {
+ components: [
+ {
+ internalType: 'uint256',
+ name: 'nativeFee',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'lzTokenFee',
+ type: 'uint256',
+ },
+ ],
+ internalType: 'struct MessagingFee',
+ name: 'fee',
+ type: 'tuple',
+ },
+ ],
+ internalType: 'struct MessagingReceipt',
+ name: 'msgReceipt',
+ type: 'tuple',
+ },
+ ],
+ stateMutability: 'payable',
+ type: 'function',
+ },
+] as const
diff --git a/packages/ovault-evm/src/contracts/OVaultComposerSync.ts b/packages/ovault-evm/src/contracts/OVaultComposerSync.ts
new file mode 100644
index 0000000000..4a914175a9
--- /dev/null
+++ b/packages/ovault-evm/src/contracts/OVaultComposerSync.ts
@@ -0,0 +1,527 @@
+export const OVaultComposerSyncAbi = [
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: '_ovault',
+ type: 'address',
+ },
+ {
+ internalType: 'address',
+ name: '_assetOFT',
+ type: 'address',
+ },
+ {
+ internalType: 'address',
+ name: '_shareOFT',
+ type: 'address',
+ },
+ ],
+ stateMutability: 'nonpayable',
+ type: 'constructor',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'assetERC20',
+ type: 'address',
+ },
+ {
+ internalType: 'address',
+ name: 'vaultAsset',
+ type: 'address',
+ },
+ ],
+ name: 'AssetTokenNotVaultAsset',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: 'expectedMsgValue',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'actualMsgValue',
+ type: 'uint256',
+ },
+ ],
+ name: 'InsufficientMsgValue',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'caller',
+ type: 'address',
+ },
+ ],
+ name: 'OnlyEndpoint',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'caller',
+ type: 'address',
+ },
+ ],
+ name: 'OnlySelf',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'caller',
+ type: 'address',
+ },
+ ],
+ name: 'OnlyValidComposeCaller',
+ type: 'error',
+ },
+ {
+ inputs: [],
+ name: 'ReentrancyGuardReentrantCall',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'token',
+ type: 'address',
+ },
+ ],
+ name: 'SafeERC20FailedOperation',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'shareOFT',
+ type: 'address',
+ },
+ ],
+ name: 'ShareOFTNotAdapter',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'shareERC20',
+ type: 'address',
+ },
+ {
+ internalType: 'address',
+ name: 'vault',
+ type: 'address',
+ },
+ ],
+ name: 'ShareTokenNotVault',
+ type: 'error',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: 'amountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'minAmountLD',
+ type: 'uint256',
+ },
+ ],
+ name: 'SlippageExceeded',
+ type: 'error',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: 'bytes32',
+ name: 'guid',
+ type: 'bytes32',
+ },
+ ],
+ name: 'Refunded',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: 'bytes32',
+ name: 'guid',
+ type: 'bytes32',
+ },
+ ],
+ name: 'Sent',
+ type: 'event',
+ },
+ {
+ inputs: [],
+ name: 'ASSET_ERC20',
+ outputs: [
+ {
+ internalType: 'address',
+ name: '',
+ type: 'address',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'ASSET_OFT',
+ outputs: [
+ {
+ internalType: 'address',
+ name: '',
+ type: 'address',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'ENDPOINT',
+ outputs: [
+ {
+ internalType: 'address',
+ name: '',
+ type: 'address',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'SHARE_ERC20',
+ outputs: [
+ {
+ internalType: 'address',
+ name: '',
+ type: 'address',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'SHARE_OFT',
+ outputs: [
+ {
+ internalType: 'address',
+ name: '',
+ type: 'address',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'VAULT',
+ outputs: [
+ {
+ internalType: 'contract IERC4626',
+ name: '',
+ type: 'address',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'VAULT_EID',
+ outputs: [
+ {
+ internalType: 'uint32',
+ name: '',
+ type: 'uint32',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: '_assetAmount',
+ type: 'uint256',
+ },
+ {
+ components: [
+ {
+ internalType: 'uint32',
+ name: 'dstEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'bytes32',
+ name: 'to',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'uint256',
+ name: 'amountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'minAmountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'bytes',
+ name: 'extraOptions',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'composeMsg',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'oftCmd',
+ type: 'bytes',
+ },
+ ],
+ internalType: 'struct SendParam',
+ name: '_sendParam',
+ type: 'tuple',
+ },
+ {
+ internalType: 'address',
+ name: '_refundAddress',
+ type: 'address',
+ },
+ ],
+ name: 'depositAndSend',
+ outputs: [],
+ stateMutability: 'payable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: '_oftIn',
+ type: 'address',
+ },
+ {
+ internalType: 'bytes32',
+ name: '_composeFrom',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'bytes',
+ name: '_composeMsg',
+ type: 'bytes',
+ },
+ {
+ internalType: 'uint256',
+ name: '_amount',
+ type: 'uint256',
+ },
+ ],
+ name: 'handleCompose',
+ outputs: [],
+ stateMutability: 'payable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: '_composeCaller',
+ type: 'address',
+ },
+ {
+ internalType: 'bytes32',
+ name: '_guid',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'bytes',
+ name: '_message',
+ type: 'bytes',
+ },
+ {
+ internalType: 'address',
+ name: '',
+ type: 'address',
+ },
+ {
+ internalType: 'bytes',
+ name: '',
+ type: 'bytes',
+ },
+ ],
+ name: 'lzCompose',
+ outputs: [],
+ stateMutability: 'payable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'address',
+ name: '_oft',
+ type: 'address',
+ },
+ {
+ internalType: 'uint256',
+ name: '_vaultInAmount',
+ type: 'uint256',
+ },
+ {
+ components: [
+ {
+ internalType: 'uint32',
+ name: 'dstEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'bytes32',
+ name: 'to',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'uint256',
+ name: 'amountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'minAmountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'bytes',
+ name: 'extraOptions',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'composeMsg',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'oftCmd',
+ type: 'bytes',
+ },
+ ],
+ internalType: 'struct SendParam',
+ name: '_sendParam',
+ type: 'tuple',
+ },
+ ],
+ name: 'quoteSend',
+ outputs: [
+ {
+ components: [
+ {
+ internalType: 'uint256',
+ name: 'nativeFee',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'lzTokenFee',
+ type: 'uint256',
+ },
+ ],
+ internalType: 'struct MessagingFee',
+ name: '',
+ type: 'tuple',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'uint256',
+ name: '_shareAmount',
+ type: 'uint256',
+ },
+ {
+ components: [
+ {
+ internalType: 'uint32',
+ name: 'dstEid',
+ type: 'uint32',
+ },
+ {
+ internalType: 'bytes32',
+ name: 'to',
+ type: 'bytes32',
+ },
+ {
+ internalType: 'uint256',
+ name: 'amountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'uint256',
+ name: 'minAmountLD',
+ type: 'uint256',
+ },
+ {
+ internalType: 'bytes',
+ name: 'extraOptions',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'composeMsg',
+ type: 'bytes',
+ },
+ {
+ internalType: 'bytes',
+ name: 'oftCmd',
+ type: 'bytes',
+ },
+ ],
+ internalType: 'struct SendParam',
+ name: '_sendParam',
+ type: 'tuple',
+ },
+ {
+ internalType: 'address',
+ name: '_refundAddress',
+ type: 'address',
+ },
+ ],
+ name: 'redeemAndSend',
+ outputs: [],
+ stateMutability: 'payable',
+ type: 'function',
+ },
+ {
+ stateMutability: 'payable',
+ type: 'receive',
+ },
+] as const
diff --git a/packages/ovault-evm/src/index.ts b/packages/ovault-evm/src/index.ts
new file mode 100644
index 0000000000..a312b7c8eb
--- /dev/null
+++ b/packages/ovault-evm/src/index.ts
@@ -0,0 +1 @@
+export * from './oVaultSync'
diff --git a/packages/ovault-evm/src/oVaultSync/index.ts b/packages/ovault-evm/src/oVaultSync/index.ts
new file mode 100644
index 0000000000..abf143906f
--- /dev/null
+++ b/packages/ovault-evm/src/oVaultSync/index.ts
@@ -0,0 +1,2 @@
+export * from './transfer'
+export * from './tracking'
diff --git a/packages/ovault-evm/src/oVaultSync/tracking.ts b/packages/ovault-evm/src/oVaultSync/tracking.ts
new file mode 100644
index 0000000000..eca4564fbd
--- /dev/null
+++ b/packages/ovault-evm/src/oVaultSync/tracking.ts
@@ -0,0 +1,404 @@
+import { Chain, createPublicClient, decodeEventLog, http, PublicClient } from 'viem'
+import { OVaultFailureReason, OVaultTransactionStep } from '../types'
+import { V2 as scanClient, V2Types } from '@layerzerolabs/scan-client-v2'
+import { OVaultComposerSyncAbi } from '../contracts/OVaultComposerSync'
+
+async function getTxStatus(txHash: `0x${string}`, client: PublicClient) {
+ const receipt = await client.getTransactionReceipt({ hash: txHash })
+ if (receipt.status === 'reverted') {
+ return {
+ success: false,
+ error: OVaultFailureReason.UNKNOWN,
+ }
+ } else if (receipt.status === 'success') {
+ return {
+ success: true,
+ }
+ }
+
+ return {
+ success: false,
+ }
+}
+
+async function isRefunded(txHash: `0x${string}`, client: PublicClient) {
+ const receipt = await client.waitForTransactionReceipt({
+ hash: txHash,
+ })
+
+ if (receipt.status !== 'success') {
+ return false
+ }
+
+ for (const log of receipt.logs) {
+ try {
+ const values = decodeEventLog({
+ abi: OVaultComposerSyncAbi,
+ data: log.data as `0x${string}`,
+ topics: log.topics,
+ })
+
+ if (values.eventName === 'Refunded') {
+ return true
+ }
+ } catch (e) {
+ // Ignore errors in decoding logs, they might not be OFT events
+ }
+ }
+
+ return false
+}
+
+async function getLzTxStatus(txHash: `0x${string}`) {
+ const messages = await scanClient.getMessagesBySrcTxHash(txHash)
+ return messages
+}
+
+async function trackBBB(
+ txHash: `0x${string}`,
+ viemConfigs: {
+ sourceChain: Chain
+ hubChain: Chain
+ dstChain: Chain
+ }
+) {
+ const { sourceChain } = viemConfigs
+
+ const sourceClient = createPublicClient({
+ chain: sourceChain,
+ transport: http(),
+ })
+
+ const sourceTx = await getTxStatus(txHash, sourceClient)
+
+ // In a BBB transaction, the source chain transaction is the only transaction.
+ // And if the source chain transaction fails, the transaction is refunded.
+ return {
+ step: sourceTx.success ? OVaultTransactionStep.COMPLETED : OVaultTransactionStep.HUB_CHAIN_TRANSACTION,
+ refunded: sourceTx.error ? true : undefined,
+ failureReason: sourceTx.error,
+ }
+}
+
+async function trackABB(
+ txHash: `0x${string}`,
+ viemConfigs: {
+ sourceChain: Chain
+ hubChain: Chain
+ dstChain: Chain
+ }
+) {
+ const { sourceChain, hubChain } = viemConfigs
+
+ const sourceClient = createPublicClient({
+ chain: sourceChain,
+ transport: http(),
+ })
+
+ const hubClient = createPublicClient({
+ chain: hubChain,
+ transport: http(),
+ })
+
+ const sourceTx = await getTxStatus(txHash, sourceClient)
+
+ if (sourceTx.error) {
+ return {
+ step: OVaultTransactionStep.SOURCE_CHAIN_TRANSACTION,
+ failureReason: OVaultFailureReason.UNKNOWN,
+ }
+ } else if (!sourceTx.success) {
+ // Transaction is still in progress
+ return {
+ step: OVaultTransactionStep.SOURCE_CHAIN_TRANSACTION,
+ }
+ }
+
+ // Source Tx is successful, now we need to track the hub chain transaction.
+ const sourceToHubMessages = await getLzTxStatus(txHash)
+
+ if (sourceToHubMessages.length === 0) {
+ return {
+ step: OVaultTransactionStep.SOURCE_TO_HUB_LZ_TRANSACTION,
+ }
+ }
+
+ const sourceToHubMessage: V2Types.ScanAPIMessage = sourceToHubMessages[0]
+
+ if (sourceToHubMessage.status.name === 'INFLIGHT' || sourceToHubMessage.status.name === 'CONFIRMING') {
+ // Transaction is still in progress
+ return {
+ step: OVaultTransactionStep.SOURCE_TO_HUB_LZ_TRANSACTION,
+ }
+ }
+
+ if (sourceToHubMessage.status.name !== 'DELIVERED') {
+ return {
+ step: OVaultTransactionStep.SOURCE_TO_HUB_LZ_TRANSACTION,
+ failureReason: OVaultFailureReason.UNKNOWN,
+ }
+ }
+
+ // Track hub chain transaction
+ const executorDst = sourceToHubMessage.destination as V2Types.ExecutorTx
+ const composeTxHash = executorDst?.lzCompose?.txs?.[0]?.txHash as `0x${string}`
+ const failedCompose = executorDst?.lzCompose?.failedTx?.[0]?.txHash as `0x${string}`
+ if (failedCompose) {
+ return {
+ step: OVaultTransactionStep.HUB_CHAIN_TRANSACTION,
+ failureReason: OVaultFailureReason.UNKNOWN,
+ refunded: false,
+ }
+ }
+ if (!composeTxHash) {
+ // Waiting for the compose tx to be created
+ return {
+ step: OVaultTransactionStep.HUB_CHAIN_TRANSACTION,
+ }
+ }
+ const hubTx = await getTxStatus(composeTxHash, hubClient)
+
+ const refunded = await isRefunded(composeTxHash, hubClient)
+
+ return {
+ step: hubTx.success ? OVaultTransactionStep.COMPLETED : OVaultTransactionStep.HUB_CHAIN_TRANSACTION,
+ refunded: hubTx.error || refunded ? true : undefined,
+ failureReason: hubTx.error || (refunded ? OVaultFailureReason.UNKNOWN : undefined),
+ }
+}
+
+async function trackBBA(
+ txHash: `0x${string}`,
+ viemConfigs: {
+ sourceChain: Chain
+ hubChain: Chain
+ dstChain: Chain
+ }
+) {
+ const { sourceChain, dstChain } = viemConfigs
+
+ const sourceClient = createPublicClient({
+ chain: sourceChain,
+ transport: http(),
+ })
+
+ const dstClient = createPublicClient({
+ chain: dstChain,
+ transport: http(),
+ })
+
+ const sourceTx = await getTxStatus(txHash, sourceClient)
+
+ if (sourceTx.error) {
+ return {
+ step: OVaultTransactionStep.SOURCE_CHAIN_TRANSACTION,
+ failureReason: OVaultFailureReason.UNKNOWN,
+ }
+ } else if (!sourceTx.success) {
+ // Transaction is still in progress
+ return {
+ step: OVaultTransactionStep.SOURCE_CHAIN_TRANSACTION,
+ }
+ }
+
+ const hubToDstMessages = await getLzTxStatus(txHash)
+
+ if (hubToDstMessages.length === 0) {
+ return {
+ step: OVaultTransactionStep.HUB_TO_DST_LZ_TRANSACTION,
+ }
+ }
+
+ const hubToDstMessage: V2Types.ScanAPIMessage = hubToDstMessages[0]
+
+ if (hubToDstMessage.status.name === 'INFLIGHT' || hubToDstMessage.status.name === 'CONFIRMING') {
+ return {
+ step: OVaultTransactionStep.HUB_TO_DST_LZ_TRANSACTION,
+ }
+ }
+
+ if (hubToDstMessage.status.name !== 'DELIVERED') {
+ return {
+ step: OVaultTransactionStep.HUB_TO_DST_LZ_TRANSACTION,
+ failureReason: OVaultFailureReason.UNKNOWN,
+ }
+ }
+
+ // Track dst chain transaction
+ const dstTxHash = hubToDstMessage.destination?.tx?.txHash as `0x${string}`
+ if (!dstTxHash) {
+ return {
+ step: OVaultTransactionStep.DST_CHAIN_TRANSACTION,
+ }
+ }
+
+ const dstTx = await getTxStatus(dstTxHash, dstClient)
+
+ return {
+ step: dstTx.success ? OVaultTransactionStep.COMPLETED : OVaultTransactionStep.DST_CHAIN_TRANSACTION,
+ refunded: false,
+ failureReason: dstTx.error,
+ }
+}
+
+async function trackABA(
+ txHash: `0x${string}`,
+ viemConfigs: {
+ sourceChain: Chain
+ hubChain: Chain
+ dstChain: Chain
+ }
+) {
+ const { sourceChain, hubChain, dstChain } = viemConfigs
+
+ const sourceClient = createPublicClient({
+ chain: sourceChain,
+ transport: http(),
+ })
+
+ const hubClient = createPublicClient({
+ chain: hubChain,
+ transport: http(),
+ })
+
+ const dstClient = createPublicClient({
+ chain: dstChain,
+ transport: http(),
+ })
+
+ const sourceTx = await getTxStatus(txHash, sourceClient)
+
+ if (sourceTx.error) {
+ return {
+ step: OVaultTransactionStep.SOURCE_CHAIN_TRANSACTION,
+ failureReason: OVaultFailureReason.UNKNOWN,
+ }
+ } else if (!sourceTx.success) {
+ // Transaction is still in progress
+ return {
+ step: OVaultTransactionStep.SOURCE_CHAIN_TRANSACTION,
+ }
+ }
+
+ const sourceToHubMessages = await getLzTxStatus(txHash)
+
+ if (sourceToHubMessages.length === 0) {
+ return {
+ step: OVaultTransactionStep.SOURCE_TO_HUB_LZ_TRANSACTION,
+ }
+ }
+
+ const sourceToHubMessage: V2Types.ScanAPIMessage = sourceToHubMessages[0]
+
+ if (sourceToHubMessage.status.name === 'INFLIGHT' || sourceToHubMessage.status.name === 'CONFIRMING') {
+ return {
+ step: OVaultTransactionStep.SOURCE_TO_HUB_LZ_TRANSACTION,
+ }
+ }
+
+ if (sourceToHubMessage.status.name !== 'DELIVERED') {
+ return {
+ step: OVaultTransactionStep.SOURCE_TO_HUB_LZ_TRANSACTION,
+ failureReason: OVaultFailureReason.UNKNOWN,
+ }
+ }
+
+ // Track hub chain transaction
+ const executorDst = sourceToHubMessage.destination as V2Types.ExecutorTx
+ const composeTxHash = executorDst?.lzCompose?.txs?.[0]?.txHash as `0x${string}`
+ const failedCompose = executorDst?.lzCompose?.failedTx?.[0]?.txHash as `0x${string}`
+ if (failedCompose) {
+ return {
+ step: OVaultTransactionStep.HUB_CHAIN_TRANSACTION,
+ failureReason: OVaultFailureReason.UNKNOWN,
+ refunded: false,
+ }
+ }
+ if (!composeTxHash) {
+ return {
+ step: OVaultTransactionStep.HUB_CHAIN_TRANSACTION,
+ }
+ }
+ const hubTx = await getTxStatus(composeTxHash, hubClient)
+
+ const refunded = await isRefunded(composeTxHash, hubClient)
+
+ if (hubTx.success && refunded) {
+ // Something went wrong on the hub chain, but the funds were refunded.
+ return {
+ step: OVaultTransactionStep.HUB_CHAIN_TRANSACTION,
+ refunded: true,
+ failureReason: OVaultFailureReason.UNKNOWN,
+ }
+ }
+
+ // Track hub to dst chain transaction
+ const hubToDstLzMessages = await getLzTxStatus(composeTxHash)
+ if (hubToDstLzMessages.length === 0) {
+ return {
+ step: OVaultTransactionStep.HUB_TO_DST_LZ_TRANSACTION,
+ }
+ }
+
+ const hubToDstMessage: V2Types.ScanAPIMessage = hubToDstLzMessages[0]
+
+ if (hubToDstMessage.status.name === 'INFLIGHT' || hubToDstMessage.status.name === 'CONFIRMING') {
+ return {
+ step: OVaultTransactionStep.HUB_TO_DST_LZ_TRANSACTION,
+ }
+ }
+
+ if (hubToDstMessage.status.name !== 'DELIVERED') {
+ return {
+ step: OVaultTransactionStep.HUB_TO_DST_LZ_TRANSACTION,
+ failureReason: OVaultFailureReason.UNKNOWN,
+ }
+ }
+
+ // Track dst chain transaction
+ const dstTxHash = hubToDstMessage.destination?.tx?.txHash as `0x${string}`
+ if (!dstTxHash) {
+ // Waiting for the dst tx to be created
+ return {
+ step: OVaultTransactionStep.DST_CHAIN_TRANSACTION,
+ }
+ }
+
+ const dstTx = await getTxStatus(dstTxHash, dstClient)
+
+ return {
+ step: dstTx.success ? OVaultTransactionStep.COMPLETED : OVaultTransactionStep.DST_CHAIN_TRANSACTION,
+ refunded: false,
+ failureReason: dstTx.error,
+ }
+}
+
+/**
+ * Track the OVault transaction
+ * There are 4 possible scenarios:
+ * 1. BBB - source chain, hub chain, dst chain are the same
+ * 2. BBA - source chain, hub chain are the same, dst chain is different
+ * 3. ABB - hub chain, dst chain are the same, source chain is different
+ * 4. ABA - source chain, hub chain, dst chain are different. Source chain can optionally be the same as the dst chain.
+ *
+ * @param txHash - The hash of the transaction to track on the source chain.
+ */
+export async function trackOVaultSyncTransaction(
+ txHash: `0x${string}`,
+ viemConfigs: {
+ sourceChain: Chain
+ hubChain: Chain
+ dstChain: Chain
+ }
+) {
+ const { sourceChain, hubChain, dstChain } = viemConfigs
+ if (sourceChain.id === hubChain.id && sourceChain.id === dstChain.id) {
+ return trackBBB(txHash, viemConfigs)
+ } else if (sourceChain.id === hubChain.id && hubChain.id !== dstChain.id) {
+ return trackBBA(txHash, viemConfigs)
+ } else if (sourceChain.id !== hubChain.id && hubChain.id === dstChain.id) {
+ return trackABB(txHash, viemConfigs)
+ } else {
+ return trackABA(txHash, viemConfigs)
+ }
+}
diff --git a/packages/ovault-evm/src/oVaultSync/transfer.ts b/packages/ovault-evm/src/oVaultSync/transfer.ts
new file mode 100644
index 0000000000..ab96672b8b
--- /dev/null
+++ b/packages/ovault-evm/src/oVaultSync/transfer.ts
@@ -0,0 +1,349 @@
+import { createPublicClient, encodeAbiParameters, http, pad } from 'viem'
+import { OFTAbi } from '../contracts/OFT'
+import { OVaultComposerSyncAbi } from '../contracts/OVaultComposerSync'
+import { ERC4626_ABI } from '../contracts/ERC4626'
+import { Options } from '@layerzerolabs/lz-v2-utilities'
+import { ERC20Abi } from '../contracts/ERC20'
+import {
+ OVaultSyncInputs,
+ SendParams,
+ SendParamsInput,
+ GenerateOVaultSyncInputsProps,
+ OVaultSyncOperations,
+} from '../types'
+
+export class OVaultSyncMessageBuilder {
+ static async buildComposeArgument(input: SendParamsInput, messageFee: bigint) {
+ // For the default OVault, the compose argument is just the hub to dst chain send params
+ // However, if you are using a custom OVault, you can have a custom compose argument
+ return encodeAbiParameters(
+ [
+ {
+ type: 'tuple',
+ name: 'sendParams',
+ components: [
+ { name: 'dstEid', type: 'uint32' },
+ { name: 'to', type: 'bytes32' },
+ { name: 'amountLD', type: 'uint256' },
+ { name: 'minAmountLD', type: 'uint256' },
+ { name: 'extraOptions', type: 'bytes' },
+ { name: 'composeMsg', type: 'bytes' },
+ { name: 'oftCmd', type: 'bytes' },
+ ],
+ },
+ {
+ type: 'uint256',
+ name: 'minMsgValue',
+ },
+ ],
+ [await this.buildHubToDstChainSendParams(input), messageFee]
+ )
+ }
+
+ /**
+ * Build the send params for the hub chain to the dst chain.
+ *
+ * @param input - The input parameters for the OVault.
+ * @returns The send params for the hub chain to the dst chain.
+ */
+ static async buildHubToDstChainSendParams(input: SendParamsInput) {
+ const { dstEid, dstAddress, dstAmount, minDstAmount } = input
+
+ // This is for a basic OFT send, so the enforced options should be enough
+ const options = Options.newOptions()
+ return {
+ dstEid: dstEid,
+ to: pad(dstAddress, { size: 32 }),
+ amountLD: dstAmount,
+ minAmountLD: minDstAmount,
+ extraOptions: options.toHex() as `0x${string}`,
+ composeMsg: '0x' as `0x${string}`,
+ oftCmd: '0x' as `0x${string}`,
+ }
+ }
+
+ /**
+ * Quote the amount of shares or assets that will be received from the OVault.
+ *
+ * @param input - The input parameters for the OVault.
+ * @returns The amount of shares or assets that will be received from the OVault.
+ */
+ static async quoteOVaultOutput(input: GenerateOVaultSyncInputsProps): Promise<{
+ dstAmount: bigint
+ minDstAmount: bigint
+ }> {
+ const { operation, amount, vaultAddress, hubChain, slippage } = input
+
+ const client = createPublicClient({
+ chain: hubChain,
+ transport: http(),
+ })
+
+ const outputAmount = await client.readContract({
+ address: vaultAddress,
+ abi: ERC4626_ABI,
+ functionName: operation === OVaultSyncOperations.DEPOSIT ? 'previewDeposit' : 'previewRedeem',
+ args: [amount],
+ })
+
+ if (slippage < 0.001) {
+ throw new Error('Slippage must be greater than 0.001(0.1%)')
+ }
+
+ const slippageAmount = (outputAmount * BigInt(Number(slippage.toFixed(3)) * 1000)) / 1000n
+
+ return {
+ dstAmount: outputAmount,
+ minDstAmount: outputAmount - slippageAmount,
+ }
+ }
+
+ /**
+ * Calculate the message fee for the hub chain. This is the fee that it costs to send a message from the hub chain to the dst chain.
+ *
+ * @param input - The input parameters for the OVault.
+ * @returns The message fee for the hub chain.
+ */
+ static async calculateHubChainFee(input: SendParamsInput) {
+ const { operation, amount, composerAddress, hubChain, dstEid, hubEid } = input
+
+ // If the dst chain is the same as the hub chain, then we don't need to calculate the fee
+ // as we are already on the hub chain, so "send" on the OFT will not be called.
+ if (dstEid === hubEid) {
+ return {
+ nativeFee: 0n,
+ lzTokenFee: 0n,
+ }
+ }
+
+ const client = createPublicClient({
+ chain: hubChain,
+ transport: http(),
+ })
+
+ const hubOftAddress = await client.readContract({
+ address: composerAddress,
+ abi: OVaultComposerSyncAbi,
+ functionName: operation === OVaultSyncOperations.DEPOSIT ? 'SHARE_OFT' : 'ASSET_OFT',
+ args: [],
+ })
+
+ const hubSendParams = await this.buildHubToDstChainSendParams(input)
+
+ const messageFee = await client.readContract({
+ address: composerAddress,
+ abi: OVaultComposerSyncAbi,
+ functionName: 'quoteSend',
+ args: [hubOftAddress, amount, hubSendParams],
+ })
+
+ return messageFee
+ }
+
+ static async getMessageFee(sendParams: SendParams, input: SendParamsInput) {
+ const { tokenAddress, sourceChain, srcEid, hubEid } = input
+
+ const client = createPublicClient({
+ chain: sourceChain,
+ transport: http(),
+ })
+
+ // If the src chain is the same as the hub chain, then the way to calculate the message fee is the same
+ // as calculating the hub chain fee as we are already on the hub chain.
+ if (srcEid === hubEid) {
+ return this.calculateHubChainFee(input)
+ }
+
+ // If we are not on the hub chain, then we need to call the OFT's quoteSend function to get the message fee.
+ const messageFee = await client.readContract({
+ address: tokenAddress,
+ abi: OFTAbi,
+ functionName: 'quoteSend',
+ args: [sendParams as never, false],
+ })
+
+ return messageFee
+ }
+
+ static async buildSendParams(input: SendParamsInput) {
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ const { amount, srcEid, dstEid, composerAddress, hubEid, dstAmount, minDstAmount, dstAddress } = input
+
+ const options = Options.newOptions()
+
+ const srcIsHubChain = srcEid === hubEid
+ const dstIsHubChain = dstEid === hubEid
+
+ if (srcIsHubChain) {
+ return await this.buildHubToDstChainSendParams(input)
+ }
+
+ // If the src chain is not the same as the hub chain, then the first message will be an LzCompose
+ // so we need to add the executor option
+ const hubMessageFee = await this.calculateHubChainFee({
+ ...input,
+ dstAmount,
+ minDstAmount,
+ })
+
+ const gasLimit = input.hubLzComposeGasLimit ?? (dstIsHubChain ? 175_000n : 375_000n)
+ options.addExecutorComposeOption(0, gasLimit, hubMessageFee.nativeFee)
+
+ return {
+ // If the src chain is not the same as the hub chain, then the first message will be to the hub chain
+ // so we need to set the dstEid to the hub chain EID
+ dstEid: hubEid,
+ to: pad(composerAddress, { size: 32 }),
+ amountLD: amount,
+ minAmountLD: amount, // This is an OFT transfer so there should be no slippage
+ extraOptions: options.toHex() as `0x${string}`,
+ composeMsg: await this.buildComposeArgument(input, hubMessageFee.nativeFee),
+ oftCmd: '0x' as `0x${string}`,
+ }
+ }
+
+ static async buildApproval(input: SendParamsInput) {
+ const {
+ tokenAddress,
+ sourceChain,
+ composerAddress,
+ srcEid,
+ hubEid,
+ dstEid,
+ amount,
+ walletAddress,
+ vaultAddress,
+ } = input
+
+ // If we are sending from a spoke chain we don't need to approve. This is because we will be calling "send", which is a function
+ // on the OFT. The OFT is the spender in this case, so no approval is needed.
+ if (srcEid !== hubEid) {
+ return
+ }
+
+ const useVault = srcEid === hubEid && dstEid === hubEid
+ const spender = useVault ? vaultAddress : composerAddress
+
+ if (tokenAddress === spender) {
+ return
+ }
+
+ const client = createPublicClient({
+ chain: sourceChain,
+ transport: http(),
+ })
+
+ const allowance = await client.readContract({
+ address: tokenAddress,
+ abi: ERC20Abi,
+ functionName: 'allowance',
+ args: [walletAddress, spender],
+ })
+
+ if (allowance >= amount) {
+ // We have enough allowance, so we don't need to approve
+ return
+ }
+
+ return {
+ tokenAddress,
+ amount,
+ spender,
+ }
+ }
+
+ /**
+ * Generate the inputs for the OVault.
+ *
+ * @param input - The input parameters for the OVault.
+ * @returns Inputs to call contracts to perform Deposit or Redeem on the OVault.
+ *
+ */
+ static async generateOVaultInputs(input: GenerateOVaultSyncInputsProps): Promise {
+ const {
+ srcEid,
+ hubEid: hubEid,
+ operation,
+ amount,
+ dstAddress,
+ walletAddress: refundAddress,
+ tokenAddress,
+ composerAddress,
+ oftAddress,
+ dstEid,
+ vaultAddress,
+ } = input
+ const outputAmount = await this.quoteOVaultOutput(input)
+
+ const fullInputParams = {
+ ...input,
+ dstAmount: outputAmount.dstAmount,
+ minDstAmount: outputAmount.minDstAmount,
+ tokenAddress: tokenAddress ?? oftAddress,
+ dstAddress: dstAddress ?? refundAddress,
+ }
+
+ const sendParams = await this.buildSendParams(fullInputParams)
+ const messageFee = await this.getMessageFee(sendParams, fullInputParams)
+
+ const srcIsHubChain = srcEid === hubEid
+ const dstIsHubChain = dstEid === hubEid
+
+ if (srcIsHubChain && dstIsHubChain) {
+ if (operation === OVaultSyncOperations.DEPOSIT) {
+ return {
+ messageFee,
+ dstAmount: {
+ amount: outputAmount.dstAmount,
+ minAmount: outputAmount.minDstAmount,
+ },
+ txArgs: [amount, dstAddress ?? refundAddress],
+ contractFunctionName: 'deposit',
+ contractAddress: vaultAddress,
+ abi: ERC4626_ABI,
+ approval: await this.buildApproval(fullInputParams),
+ }
+ }
+
+ return {
+ messageFee,
+ dstAmount: {
+ amount: outputAmount.dstAmount,
+ minAmount: outputAmount.minDstAmount,
+ },
+ txArgs: [amount, dstAddress ?? refundAddress, refundAddress],
+ contractFunctionName: 'redeem',
+ contractAddress: vaultAddress,
+ abi: ERC4626_ABI,
+ approval: await this.buildApproval(fullInputParams),
+ }
+ }
+
+ if (!srcIsHubChain) {
+ return {
+ messageFee,
+ dstAmount: {
+ amount: outputAmount.dstAmount,
+ minAmount: outputAmount.minDstAmount,
+ },
+ txArgs: [sendParams, messageFee, refundAddress],
+ contractFunctionName: 'send',
+ contractAddress: oftAddress,
+ abi: OFTAbi,
+ }
+ }
+
+ return {
+ messageFee,
+ dstAmount: {
+ amount: outputAmount.dstAmount,
+ minAmount: outputAmount.minDstAmount,
+ },
+ approval: await this.buildApproval(fullInputParams),
+ txArgs: [amount, sendParams, refundAddress ?? dstAddress],
+ contractFunctionName: operation === OVaultSyncOperations.DEPOSIT ? 'depositAndSend' : 'redeemAndSend',
+ contractAddress: composerAddress,
+ abi: OVaultComposerSyncAbi,
+ }
+ }
+}
diff --git a/packages/ovault-evm/src/types.ts b/packages/ovault-evm/src/types.ts
new file mode 100644
index 0000000000..73718e2313
--- /dev/null
+++ b/packages/ovault-evm/src/types.ts
@@ -0,0 +1,157 @@
+import { Chain as ViemChain } from 'viem'
+import { OFTAbi } from './contracts/OFT'
+import { OVaultComposerSyncAbi } from './contracts/OVaultComposerSync'
+import { ERC4626_ABI } from './contracts/ERC4626'
+
+export enum OVaultSyncOperations {
+ DEPOSIT = 'deposit',
+ REDEEM = 'redeem',
+}
+
+export interface SendParamsInput {
+ srcEid: number
+ hubEid: number
+ dstEid: number
+ dstAddress: `0x${string}`
+ walletAddress: `0x${string}`
+
+ vaultAddress: `0x${string}`
+ composerAddress: `0x${string}`
+
+ // The Viem chain object for the hub chain. Require user to pass in the hub chain object so that
+ // not every viem chain needs to be bundled with the SDK.
+ hubChain: ViemChain
+
+ // The Viem chain object for the source chain
+ sourceChain: ViemChain
+
+ // Deposit or redeem
+ operation: OVaultSyncOperations
+
+ // This is the amount of tokens to send
+ amount: bigint
+
+ dstAmount: bigint
+ // This is the minimum amount of tokens to receive. If you are sending the OFT Asset,
+ // then this is the minimum amount of shares to receive.
+ minDstAmount: bigint
+
+ slippage: number // How much slippage to allow for the redemption. This is a percentage, so 0.01 = 1%
+
+ oftAddress: `0x${string}`
+ tokenAddress: `0x${string}`
+
+ // The gas limit for the hub chain. Only needed if the hub chain is not the same as the source chain.
+ // Defaults to 375_000 for cross chain operations and 175_000 for same chain operations.
+ hubLzComposeGasLimit?: bigint
+}
+
+export type GenerateOVaultSyncInputsProps = Omit<
+ SendParamsInput,
+ 'dstAmount' | 'minDstAmount' | 'tokenAddress' | 'dstAddress'
+> & {
+ tokenAddress?: `0x${string}`
+ dstAddress?: `0x${string}`
+}
+
+/**
+ * The send parameters for the OVault. Pass this to the OFT or OVaultComposer to send the tokens.
+ *
+ * @typedef {Object} SendParams
+ * @property {number} dstEid - The destination chain ID.
+ * @property {`0x${string}`} to - The address of the destination contract.
+ * @property {bigint} amountLD - The amount of tokens to send.
+ * @property {bigint} minAmountLD - The minimum amount of tokens to receive.
+ * @property {`0x${string}`} extraOptions - The extra options for the OVault.
+ * @property {`0x${string}`} composeMsg - The compose message for the OVault.
+ * @property {`0x${string}`} oftCmd - The OFT command for the OVault.
+ */
+export interface SendParams {
+ dstEid: number
+ to: `0x${string}`
+ amountLD: bigint
+ minAmountLD: bigint
+ extraOptions: `0x${string}`
+ composeMsg: `0x${string}`
+ oftCmd: `0x${string}`
+}
+
+/**
+ * The message fee for the OVault.
+ *
+ * @typedef {Object} MessageFee
+ * @property {bigint} nativeFee - The native fee for the OVault.
+ * @property {bigint} lzTokenFee - The LZ token fee for the OVault.
+ */
+export interface MessageFee {
+ nativeFee: bigint
+ lzTokenFee: bigint
+}
+
+/**
+ * The inputs for the OVault.
+ *
+ * @typedef {Object} OVaultInputs
+ * @property {MessageFee} messageFee - The message fee for the OVault.
+ * @property {`0x${string}`} contractAddress - The address of the contract to call.
+ * @property {Object} dstAmount - The amount of tokens to send.
+ * @property {Object} approval - The approval parameters for the OVault. If undefined, then no approval is needed.
+ * @property {Object} txArgs - The transaction arguments for the OVault.
+ */
+export type OVaultSyncInputs = {
+ messageFee: MessageFee
+ contractAddress: `0x${string}`
+ dstAmount: {
+ amount: bigint
+ minAmount: bigint
+ }
+ approval?: {
+ tokenAddress: `0x${string}`
+ amount: bigint
+ spender: `0x${string}`
+ }
+} & (
+ | {
+ txArgs: [SendParams, MessageFee, `0x${string}`]
+ contractFunctionName: 'send'
+ abi: typeof OFTAbi
+ }
+ | {
+ txArgs: [bigint, SendParams, `0x${string}`]
+ contractFunctionName: 'depositAndSend' | 'redeemAndSend'
+ abi: typeof OVaultComposerSyncAbi
+ }
+ | {
+ txArgs: [bigint, `0x${string}`]
+ contractFunctionName: 'deposit'
+ abi: typeof ERC4626_ABI
+ }
+ | {
+ txArgs: [bigint, `0x${string}`, `0x${string}`]
+ contractFunctionName: 'redeem'
+ abi: typeof ERC4626_ABI
+ }
+)
+
+export enum OVaultTransactionStep {
+ SOURCE_CHAIN_TRANSACTION = 'sourceChainTransaction',
+ SOURCE_TO_HUB_LZ_TRANSACTION = 'sourceToHubLzTransaction',
+ HUB_CHAIN_TRANSACTION = 'hubChainTransaction',
+ HUB_TO_DST_LZ_TRANSACTION = 'hubToDstLzTransaction',
+ DST_CHAIN_TRANSACTION = 'dstChainTransaction',
+ COMPLETED = 'completed',
+}
+
+export enum OVaultFailureReason {
+ UNKNOWN = 'unknown',
+}
+
+export interface OVaultTransactionStatus {
+ step: OVaultTransactionStep
+
+ // If the transaction failed, this will be set
+ failureReason?: OVaultFailureReason
+
+ // If the transaction was refunded, this will be set
+ refunded?: boolean
+}
diff --git a/packages/ovault-evm/test/mocks/MockERC20.sol b/packages/ovault-evm/test/mocks/MockERC20.sol
new file mode 100644
index 0000000000..a2c029eabc
--- /dev/null
+++ b/packages/ovault-evm/test/mocks/MockERC20.sol
@@ -0,0 +1,16 @@
+// SPDX-License-Identifier: AGPL-3.0-only
+pragma solidity >=0.8.0;
+
+import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
+
+contract MockERC20 is ERC20 {
+ constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {}
+
+ function mint(address to, uint256 value) public virtual {
+ _mint(to, value);
+ }
+
+ function burn(address from, uint256 value) public virtual {
+ _burn(from, value);
+ }
+}
diff --git a/packages/ovault-evm/test/mocks/MockOFT.sol b/packages/ovault-evm/test/mocks/MockOFT.sol
new file mode 100644
index 0000000000..a1bda95699
--- /dev/null
+++ b/packages/ovault-evm/test/mocks/MockOFT.sol
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: AGPL-3.0-only
+pragma solidity >=0.8.0;
+
+import { OFT } from "@layerzerolabs/oft-evm/contracts/OFT.sol";
+import { OFTAdapter } from "@layerzerolabs/oft-evm/contracts/OFTAdapter.sol";
+
+import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
+
+contract MockOFT is OFT {
+ constructor(
+ string memory _name,
+ string memory _symbol,
+ address _lzEndpoint,
+ address _delegate
+ ) OFT(_name, _symbol, _lzEndpoint, _delegate) Ownable(_delegate) {}
+
+ function mint(address to, uint256 value) public virtual {
+ _mint(to, value);
+ }
+
+ function burn(address from, uint256 value) public virtual {
+ _burn(from, value);
+ }
+}
+
+contract MockOFTAdapter is OFTAdapter {
+ constructor(
+ address _token,
+ address _lzEndpoint,
+ address _delegate
+ ) OFTAdapter(_token, _lzEndpoint, _delegate) Ownable(msg.sender) {}
+}
diff --git a/packages/ovault-evm/test/mocks/MockVault.sol b/packages/ovault-evm/test/mocks/MockVault.sol
new file mode 100644
index 0000000000..8847e2d606
--- /dev/null
+++ b/packages/ovault-evm/test/mocks/MockVault.sol
@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: AGPL-3.0-only
+pragma solidity >=0.8.0;
+
+import { IERC20, ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
+import { ERC4626 } from "@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol";
+
+contract MockVault is ERC4626 {
+ constructor(
+ string memory _name,
+ string memory _symbol,
+ address _asset
+ ) ERC4626(IERC20(_asset)) ERC20(_name, _symbol) {}
+
+ function totalAssets() public view override returns (uint256) {
+ return IERC20(asset()).balanceOf(address(this));
+ }
+
+ function mint(address to, uint256 amount) public {
+ _mint(to, amount);
+ }
+
+ function burn(address from, uint256 amount) public {
+ _burn(from, amount);
+ }
+}
diff --git a/packages/ovault-evm/test/sdk/tracker.test.ts b/packages/ovault-evm/test/sdk/tracker.test.ts
new file mode 100644
index 0000000000..61fe9df013
--- /dev/null
+++ b/packages/ovault-evm/test/sdk/tracker.test.ts
@@ -0,0 +1,17 @@
+import { describe, it } from 'mocha'
+import { arbitrumSepolia, baseSepolia } from 'viem/chains'
+import { trackOVaultSyncTransaction } from '../../src/oVaultSync'
+
+import 'dotenv/config'
+
+describe('trackOVaultTransaction', function () {
+ it('should track a transaction', async function () {
+ const txHash = '0xccbe4b23f487afa694c3f23ba783dbb40fd327f17b2892f9f03d5b8ad1718f8a'
+ const result = await trackOVaultSyncTransaction(txHash, {
+ sourceChain: arbitrumSepolia,
+ hubChain: arbitrumSepolia,
+ dstChain: baseSepolia,
+ })
+ console.log(result)
+ })
+})
diff --git a/packages/ovault-evm/test/sdk/transfer.test.ts b/packages/ovault-evm/test/sdk/transfer.test.ts
new file mode 100644
index 0000000000..11e64542e8
--- /dev/null
+++ b/packages/ovault-evm/test/sdk/transfer.test.ts
@@ -0,0 +1,171 @@
+import { describe, it } from 'mocha'
+import { Chain, createWalletClient, http, publicActions } from 'viem'
+import { arbitrumSepolia, baseSepolia } from 'viem/chains'
+import { privateKeyToAccount } from 'viem/accounts'
+
+import { ERC20Abi } from '../../src/contracts/ERC20'
+
+import { OVaultSyncOperations } from '../../src/types'
+
+import { OVaultSyncMessageBuilder } from '../../src/oVaultSync'
+
+import 'dotenv/config'
+
+interface ChainConfig {
+ eid: number
+ chain: Chain
+ asset: `0x${string}`
+ share: `0x${string}`
+ shareErc20?: `0x${string}`
+ composer?: `0x${string}`
+ vault?: `0x${string}`
+}
+
+const chainInputs: Record = {
+ 'base-sepolia': {
+ eid: 40245,
+ chain: baseSepolia,
+ asset: '0x14253aC703071965Df2f211E706ec89dab034Ea4',
+ share: '0x9843622e2D6941896C1c41019857ca332Cac2e79',
+ },
+ 'arbitrum-sepolia': {
+ eid: 40231,
+ chain: arbitrumSepolia,
+ asset: '0x79C3E533cec4Be2d91a9301967948969b1dBE14A',
+ share: '0x4DecE3D89e74589efC8e23432459C95C1Ad0D864',
+ shareErc20: '0xCf9434De1d9E57e46D6118386dB3A38Cf61088de',
+ composer: '0x40dcBD0c323D166EC09815ae19aAF4BeC62FEC8E',
+ vault: '0xCf9434De1d9E57e46D6118386dB3A38Cf61088de',
+ },
+} as const
+
+const walletAddress = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`).address as `0x${string}`
+
+const generateInput = async (
+ srcChain: (typeof chainInputs)['base-sepolia'],
+ dstChain: (typeof chainInputs)['base-sepolia'],
+ operation: OVaultSyncOperations
+) => {
+ return {
+ srcEid: srcChain.eid,
+ hubEid: chainInputs['arbitrum-sepolia']!.eid,
+ dstEid: dstChain.eid,
+ walletAddress: walletAddress as `0x${string}`,
+ vaultAddress: chainInputs['arbitrum-sepolia']!.vault as `0x${string}`,
+ composerAddress: chainInputs['arbitrum-sepolia']!.composer as `0x${string}`,
+ hubChain: arbitrumSepolia,
+ sourceChain: srcChain.chain,
+ operation: operation,
+ amount: BigInt('100000000000000000'),
+ slippage: 0.01, // 1% slippage
+ oftAddress: operation === OVaultSyncOperations.DEPOSIT ? srcChain.asset : srcChain.share,
+ tokenAddress: operation === OVaultSyncOperations.DEPOSIT ? srcChain.asset : srcChain.shareErc20,
+ }
+}
+
+describe.skip('generateOVaultInputs', function () {
+ // Increase timeout due to the time it takes to execute the transactions
+ this.timeout(10_000)
+
+ async function executeTransaction(
+ srcChain: (typeof chainInputs)['arbitrum-sepolia'],
+ dstChain: (typeof chainInputs)['arbitrum-sepolia'],
+ operation: OVaultSyncOperations
+ ) {
+ const input = await generateInput(srcChain, dstChain, operation)
+
+ const inputs = await OVaultSyncMessageBuilder.generateOVaultInputs(input)
+ const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`)
+
+ const walletClient = createWalletClient({
+ account,
+ chain: srcChain.chain,
+ transport: http(),
+ }).extend(publicActions)
+
+ if (inputs.approval) {
+ console.log('Approval Required. Approving...')
+ const approvalTx = await walletClient.writeContract({
+ address: inputs.approval.tokenAddress,
+ abi: ERC20Abi,
+ functionName: 'approve',
+ args: [inputs.approval.spender, inputs.approval.amount],
+ })
+ await walletClient.waitForTransactionReceipt({ hash: approvalTx })
+ console.log('Approval Completed. Hash: ', approvalTx)
+ }
+
+ const tx = await walletClient.writeContract({
+ address: inputs.contractAddress,
+ abi: inputs.abi,
+ value: inputs.messageFee.nativeFee,
+ functionName: inputs.contractFunctionName,
+ args: inputs.txArgs as any,
+ })
+
+ console.log('Transaction Submitted. Hash: ', tx)
+ }
+
+ /**
+ * Deposit
+ */
+ it('Deposit B->B->B', async () => {
+ const srcChain = chainInputs['arbitrum-sepolia']!
+ const dstChain = chainInputs['arbitrum-sepolia']!
+
+ await executeTransaction(srcChain, dstChain, OVaultSyncOperations.DEPOSIT)
+ })
+
+ it('Deposit A->B->A', async () => {
+ const srcChain = chainInputs['base-sepolia']!
+ const dstChain = chainInputs['base-sepolia']!
+
+ await executeTransaction(srcChain, dstChain, OVaultSyncOperations.DEPOSIT)
+ })
+
+ it('Deposit B->B->A', async () => {
+ const srcChain = chainInputs['arbitrum-sepolia']!
+ const dstChain = chainInputs['base-sepolia']!
+
+ await executeTransaction(srcChain, dstChain, OVaultSyncOperations.DEPOSIT)
+ })
+
+ it('Deposit A->B->B', async () => {
+ const srcChain = chainInputs['base-sepolia']!
+ const dstChain = chainInputs['arbitrum-sepolia']!
+
+ await executeTransaction(srcChain, dstChain, OVaultSyncOperations.DEPOSIT)
+ })
+
+ /**
+ * Redeem
+ */
+
+ it('Redeem B->B->B', async () => {
+ const srcChain = chainInputs['arbitrum-sepolia']!
+ const dstChain = chainInputs['arbitrum-sepolia']!
+
+ await executeTransaction(srcChain, dstChain, OVaultSyncOperations.REDEEM)
+ })
+
+ it('Redeem A->B->A', async () => {
+ const srcChain = chainInputs['base-sepolia']!
+ const dstChain = chainInputs['base-sepolia']!
+
+ await executeTransaction(srcChain, dstChain, OVaultSyncOperations.REDEEM)
+ })
+
+ it('Redeem B->B->A', async () => {
+ const srcChain = chainInputs['arbitrum-sepolia']!
+ const dstChain = chainInputs['base-sepolia']!
+
+ await executeTransaction(srcChain, dstChain, OVaultSyncOperations.REDEEM)
+ })
+
+ it('Redeem A->B->B', async () => {
+ const srcChain = chainInputs['base-sepolia']!
+ const dstChain = chainInputs['arbitrum-sepolia']!
+
+ await executeTransaction(srcChain, dstChain, OVaultSyncOperations.REDEEM)
+ })
+})
diff --git a/packages/ovault-evm/test/vault-sync/VaultComposerSync_Base.t.sol b/packages/ovault-evm/test/vault-sync/VaultComposerSync_Base.t.sol
new file mode 100644
index 0000000000..3b6d166eea
--- /dev/null
+++ b/packages/ovault-evm/test/vault-sync/VaultComposerSync_Base.t.sol
@@ -0,0 +1,215 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.20;
+
+// OApp imports
+import { OptionsBuilder } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol";
+
+// OFT imports
+import { OFTComposeMsgCodec } from "@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol";
+import { SendParam } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+import { EnforcedOptionParam } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol";
+
+import { VaultComposerSync } from "../../contracts/VaultComposerSync.sol";
+
+import { MockOFT } from "../mocks/MockOFT.sol";
+import { MockOFTAdapter } from "../mocks/MockOFT.sol";
+import { MockVault } from "../mocks/MockVault.sol";
+
+// Forge imports
+import "forge-std/console.sol";
+
+// DevTools imports
+import { TestHelperOz5 } from "@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol";
+
+contract VaultComposerSyncBaseTest is TestHelperOz5 {
+ using OptionsBuilder for bytes;
+
+ uint8 subMeshSize = 3;
+
+ uint32 public constant ETH_EID = 1;
+ uint32 public constant ARB_EID = 2;
+ uint32 public constant POL_EID = 3;
+ uint32 public constant BAD_EID = 101;
+
+ MockOFT public assetOFT_arb;
+ MockOFTAdapter public shareOFT_arb;
+
+ MockOFT public assetOFT_eth;
+ MockOFT public shareOFT_eth;
+
+ MockOFT public assetOFT_pol;
+ MockOFT public shareOFT_pol;
+
+ MockVault public vault_arb;
+ VaultComposerSync public VaultComposerSyncArb;
+
+ address public userA = makeAddr("userA");
+ address public userB = makeAddr("userB");
+
+ address public arbEndpoint;
+ address public arbExecutor = makeAddr("arbExecutor");
+ bytes public OPTIONS_LZRECEIVE_100k = OptionsBuilder.newOptions().addExecutorLzReceiveOption(100_000, 0);
+
+ uint256 public constant INITIAL_BALANCE = 100 ether;
+ uint256 public constant TOKENS_TO_SEND = 1 ether;
+
+ uint256 public constant msgValueToFail = 100_000 wei;
+ uint256 public constant msgValueToPass = 250_000_000 wei;
+
+ function setUp() public virtual override {
+ super.setUp();
+ setUpEndpoints(subMeshSize, LibraryType.UltraLightNode);
+
+ arbEndpoint = address(endpoints[ARB_EID]);
+
+ /// @dev Deploy the Asset OFT (we can expect them to exist before we deploy the VaultComposerSync)
+ assetOFT_arb = new MockOFT("arbAsset", "arbAsset", address(endpoints[ARB_EID]), address(this));
+ assetOFT_eth = new MockOFT("ethAsset", "ethAsset", address(endpoints[ETH_EID]), address(this));
+ assetOFT_pol = new MockOFT("polAsset", "polAsset", address(endpoints[POL_EID]), address(this));
+
+ // config and wire the ofts
+ address[] memory assetOFTs = new address[](subMeshSize);
+ assetOFTs[0] = address(assetOFT_eth);
+ assetOFTs[1] = address(assetOFT_arb);
+ assetOFTs[2] = address(assetOFT_pol);
+ this.wireOApps(assetOFTs);
+
+ /// Now the "expansion" is for the arb vault and share ofts on other networks.
+ vault_arb = new MockVault("arbShare", "arbShare", address(assetOFT_arb));
+ shareOFT_arb = new MockOFTAdapter(address(vault_arb), address(endpoints[ARB_EID]), address(this));
+ VaultComposerSyncArb = new VaultComposerSync(address(vault_arb), address(assetOFT_arb), address(shareOFT_arb));
+
+ /// Deploy the Share OFTs on other networks - these are NOT lockbox adapters.
+ shareOFT_eth = new MockOFT("ethShare", "ethShare", address(endpoints[ETH_EID]), address(this));
+ shareOFT_pol = new MockOFT("polShare", "polShare", address(endpoints[POL_EID]), address(this));
+
+ address[] memory shareOFTs = new address[](subMeshSize);
+ shareOFTs[0] = address(shareOFT_eth);
+ shareOFTs[1] = address(shareOFT_arb);
+ shareOFTs[2] = address(shareOFT_pol);
+ this.wireOApps(shareOFTs);
+
+ vm.label(address(assetOFT_arb), "AssetOFT::arb");
+ vm.label(address(assetOFT_eth), "AssetOFT::eth");
+ vm.label(address(assetOFT_pol), "AssetOFT::pol");
+
+ vm.label(address(shareOFT_arb), "ShareOFTAdapter::arb");
+ vm.label(address(shareOFT_eth), "ShareOFT::eth");
+ vm.label(address(shareOFT_pol), "ShareOFT::pol");
+
+ vm.label(address(vault_arb), "Vault::arb");
+ vm.label(address(VaultComposerSyncArb), "VaultComposerSync::arb");
+
+ deal(arbExecutor, INITIAL_BALANCE);
+ deal(arbEndpoint, INITIAL_BALANCE);
+
+ EnforcedOptionParam[] memory enforcedOptions = new EnforcedOptionParam[](3);
+ enforcedOptions[0] = EnforcedOptionParam({ eid: POL_EID, msgType: 1, options: OPTIONS_LZRECEIVE_100k });
+ enforcedOptions[1] = EnforcedOptionParam({ eid: ARB_EID, msgType: 1, options: OPTIONS_LZRECEIVE_100k });
+ enforcedOptions[2] = EnforcedOptionParam({ eid: ETH_EID, msgType: 1, options: OPTIONS_LZRECEIVE_100k });
+
+ assetOFT_arb.setEnforcedOptions(enforcedOptions);
+ assetOFT_eth.setEnforcedOptions(enforcedOptions);
+ assetOFT_pol.setEnforcedOptions(enforcedOptions);
+
+ shareOFT_arb.setEnforcedOptions(enforcedOptions);
+ shareOFT_eth.setEnforcedOptions(enforcedOptions);
+ shareOFT_pol.setEnforcedOptions(enforcedOptions);
+ }
+
+ function _removeDustWithOffset(uint256 _amount, int128 _offset) internal pure returns (uint256, uint256) {
+ uint256 amountWithOffset = _amount;
+ if (_offset < 0) {
+ uint256 modOffset = uint128(-1 * _offset);
+ // If offset is negative, we need to ensure we don't underflow
+ require(_amount >= modOffset, "Offset too large");
+ amountWithOffset = _amount - modOffset;
+ } else {
+ // If offset is positive, we can safely add it
+ amountWithOffset = _amount + uint128(_offset);
+ }
+ return _removeDust(amountWithOffset);
+ }
+
+ function _removeDust(uint256 _amount) internal pure returns (uint256, uint256) {
+ uint256 dust = _amount % 10 ** 12;
+ return (_amount - dust, dust);
+ }
+
+ function _createComposePayload(
+ uint32 _srcEid,
+ SendParam memory _sendParam,
+ uint256 _minMsgValue,
+ uint256 _amount,
+ address _msgSender
+ ) internal pure returns (bytes memory composeMsg) {
+ composeMsg = OFTComposeMsgCodec.encode(
+ 0,
+ _srcEid,
+ _amount,
+ abi.encodePacked(addressToBytes32(_msgSender), abi.encode(_sendParam, _minMsgValue))
+ );
+ }
+
+ function _createComposePayload(
+ uint32 _srcEid,
+ bytes memory _composeMsg,
+ uint256 _amount,
+ address _msgSender
+ ) internal pure returns (bytes memory composeMsg) {
+ composeMsg = OFTComposeMsgCodec.encode(
+ 0,
+ _srcEid,
+ _amount,
+ abi.encodePacked(addressToBytes32(_msgSender), _composeMsg)
+ );
+ }
+
+ function _setTradeRatioAssetToShare(
+ uint256 _assetNum,
+ uint256 _shareNum
+ ) internal returns (uint256 mintAssets, uint256 mintShares) {
+ mintAssets = _assetNum * TOKENS_TO_SEND;
+ mintShares = _shareNum * TOKENS_TO_SEND;
+
+ vault_arb.mint(address(0xbeef), mintShares);
+ assetOFT_arb.mint(address(vault_arb), mintAssets);
+ }
+
+ function _createSendParam(uint256 _amount, bool skipMint) internal returns (SendParam memory) {
+ if (!skipMint) {
+ vault_arb.mint(address(VaultComposerSyncArb), _amount);
+ }
+
+ SendParam memory sendParam;
+ sendParam.dstEid = POL_EID;
+ sendParam.to = addressToBytes32(userB);
+ sendParam.amountLD = _amount;
+ return sendParam;
+ }
+
+ function _randomGUID() internal view returns (bytes32) {
+ return bytes32(vm.randomBytes(32));
+ }
+
+ function assertEq(uint256 term1, uint256 term2, uint256 term3) internal pure {
+ assertEq(term1, term2, "term1 != term2");
+ assertEq(term1, term3, "term1 != term3");
+ }
+
+ function assertEmpty(SendParam memory _sendParam) internal pure {
+ assertEq(_sendParam.dstEid, 0, "dstEid should be empty");
+ assertEq(_sendParam.to, bytes32(0), "to should be empty");
+ assertEq(_sendParam.amountLD, 0, "amountLD should be empty");
+ assertEq(_sendParam.minAmountLD, 0, "minAmountLD should be empty");
+ assertEq(_sendParam.extraOptions, bytes(""), "extraOptions should be empty");
+ }
+
+ function assertEq(SendParam memory _term1, SendParam memory _term2) internal pure {
+ assertEq(_term1.dstEid, _term2.dstEid, "dstEid should be equal");
+ assertEq(_term1.to, _term2.to, "to should be equal");
+ assertEq(_term1.amountLD, _term2.amountLD, "amountLD should be equal");
+ assertEq(_term1.minAmountLD, _term2.minAmountLD, "minAmountLD should be equal");
+ assertEq(_term1.extraOptions, _term2.extraOptions, "extraOptions should be equal");
+ }
+}
diff --git a/packages/ovault-evm/test/vault-sync/VaultComposerSync_E2E.t.sol b/packages/ovault-evm/test/vault-sync/VaultComposerSync_E2E.t.sol
new file mode 100644
index 0000000000..f47bcc7c07
--- /dev/null
+++ b/packages/ovault-evm/test/vault-sync/VaultComposerSync_E2E.t.sol
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.20;
+
+// OApp imports
+import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+import { IERC4626 } from "@openzeppelin/contracts/interfaces/IERC4626.sol";
+
+import { ILayerZeroEndpointV2 } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";
+import { IOAppCore } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol";
+import { IOFT } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+
+import { OptionsBuilder } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol";
+import { SendParam, MessagingFee } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+import { OFTComposeMsgCodec } from "@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol";
+
+import { IVaultComposerSync } from "../../contracts/interfaces/IVaultComposerSync.sol";
+import { VaultComposerSync } from "../../contracts/VaultComposerSync.sol";
+import { VaultComposerSyncBaseTest } from "./VaultComposerSync_Base.t.sol";
+
+import { console } from "forge-std/console.sol";
+
+contract VaultComposerSyncE2ETest is VaultComposerSyncBaseTest {
+ using OptionsBuilder for bytes;
+
+ /// @dev Not profiled
+ uint128 constant lzReceiveGasValue = 800_000;
+ uint128 constant lzComposeGasValue = 800_000;
+
+ /// @dev Seems to consume about 2.2 gwei
+ uint128 constant lzComposeMsgValue = 0.000025 ether;
+
+ function setUp() public virtual override {
+ super.setUp();
+
+ vm.deal(userA, 1000 ether);
+ }
+
+ function test_E2E_ethereum_to_polygon() public {
+ (uint256 shareTokensToReceive, ) = _removeDustWithOffset(TOKENS_TO_SEND * 2, -1);
+
+ deal(address(assetOFT_eth), userA, TOKENS_TO_SEND);
+
+ (uint256 mintAssets, ) = _setTradeRatioAssetToShare(1, 2);
+
+ address composerAddress = address(VaultComposerSyncArb);
+ uint256 initialPolygonBalance = shareOFT_pol.balanceOf(userA);
+
+ /// @dev This is the send param that is passed as the compose payload to the final OFT
+ SendParam memory arbToPolSendParam = SendParam(
+ POL_EID,
+ addressToBytes32(userA),
+ 0,
+ shareTokensToReceive,
+ OptionsBuilder.newOptions().addExecutorLzReceiveOption(lzReceiveGasValue, 0),
+ "",
+ ""
+ );
+ bytes memory composePayload = abi.encode(arbToPolSendParam);
+
+ /// @dev Building the NativeMesh ETH -> NativeMesh Arb send param
+ bytes memory options = OptionsBuilder
+ .newOptions()
+ .addExecutorLzReceiveOption(lzReceiveGasValue, 0)
+ .addExecutorLzComposeOption(0, lzComposeGasValue, lzComposeMsgValue);
+
+ SendParam memory ethToArbSendParam = SendParam(
+ ARB_EID,
+ addressToBytes32(composerAddress),
+ TOKENS_TO_SEND,
+ (TOKENS_TO_SEND * 9995) / 10000,
+ options,
+ composePayload,
+ ""
+ );
+
+ MessagingFee memory fee = assetOFT_eth.quoteSend(ethToArbSendParam, false);
+
+ vm.startPrank(userA);
+ assetOFT_eth.send{ value: fee.nativeFee }(ethToArbSendParam, fee, payable(address(this)));
+ vm.stopPrank();
+
+ assertEq(assetOFT_arb.balanceOf(address(vault_arb)), assetOFT_arb.totalSupply(), mintAssets);
+
+ verifyPackets(ARB_EID, addressToBytes32(address(assetOFT_arb)));
+
+ assertEq(
+ assetOFT_arb.balanceOf(composerAddress) + assetOFT_arb.balanceOf(address(vault_arb)),
+ assetOFT_arb.totalSupply(),
+ mintAssets + TOKENS_TO_SEND
+ );
+
+ bytes memory composeMsg = OFTComposeMsgCodec.encode(
+ 0,
+ ETH_EID,
+ TOKENS_TO_SEND,
+ abi.encodePacked(addressToBytes32(userA), composePayload)
+ );
+
+ vm.prank(arbEndpoint);
+ vm.deal(address(arbEndpoint), 1000 ether);
+ VaultComposerSyncArb.lzCompose{ value: lzComposeMsgValue, gas: lzComposeGasValue }(
+ address(assetOFT_arb),
+ addressToBytes32(address(assetOFT_arb)),
+ composeMsg,
+ address(this),
+ ""
+ );
+
+ assertEq(
+ assetOFT_arb.balanceOf(composerAddress),
+ 0,
+ "composerAddress should have the no tokens after lzCompose on arb"
+ );
+
+ verifyPackets(POL_EID, addressToBytes32(address(shareOFT_pol)));
+ uint256 finalPolygonBalance = shareOFT_pol.balanceOf(userA);
+
+ assertEq(
+ finalPolygonBalance - initialPolygonBalance,
+ shareTokensToReceive,
+ "userA should have all tokens after lzReceive on polygon share oft"
+ );
+ }
+}
diff --git a/packages/ovault-evm/test/vault-sync/VaultComposerSync_ProxySend.t.sol b/packages/ovault-evm/test/vault-sync/VaultComposerSync_ProxySend.t.sol
new file mode 100644
index 0000000000..12c84be5f5
--- /dev/null
+++ b/packages/ovault-evm/test/vault-sync/VaultComposerSync_ProxySend.t.sol
@@ -0,0 +1,152 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.20;
+
+import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+import { IERC4626 } from "@openzeppelin/contracts/interfaces/IERC4626.sol";
+
+import { IOFT } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+import { IOAppCore } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol";
+import { OptionsBuilder } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol";
+import { SendParam, MessagingFee } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+
+import { IVaultComposerSync } from "../../contracts/interfaces/IVaultComposerSync.sol";
+import { VaultComposerSync } from "../../contracts/VaultComposerSync.sol";
+import { VaultComposerSyncBaseTest } from "./VaultComposerSync_Base.t.sol";
+
+import { console } from "forge-std/console.sol";
+
+contract VaultComposerSyncProxySendTest is VaultComposerSyncBaseTest {
+ using OptionsBuilder for bytes;
+
+ function setUp() public virtual override {
+ super.setUp();
+ vm.deal(userA, 100 ether);
+ }
+
+ function test_target_is_hub_reverts_when_msg_value_provided() public {
+ SendParam memory sendParam = SendParam(ARB_EID, addressToBytes32(userA), TOKENS_TO_SEND, 0, "", "", "");
+ assetOFT_arb.mint(address(userA), TOKENS_TO_SEND);
+ vault_arb.mint(address(userA), TOKENS_TO_SEND);
+
+ vm.startPrank(userA);
+ assetOFT_arb.approve(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ vault_arb.approve(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+
+ vm.expectRevert(IVaultComposerSync.NoMsgValueExpected.selector);
+ VaultComposerSyncArb.depositAndSend{ value: 1 wei }(TOKENS_TO_SEND, sendParam, userA);
+
+ vm.expectRevert(IVaultComposerSync.NoMsgValueExpected.selector);
+ VaultComposerSyncArb.redeemAndSend{ value: 2 wei }(TOKENS_TO_SEND, sendParam, userA);
+ vm.stopPrank();
+ }
+
+ function test_depositSend_target_hub() public {
+ SendParam memory sendParam = SendParam(ARB_EID, addressToBytes32(userA), TOKENS_TO_SEND, 0, "", "", "");
+ assetOFT_arb.mint(address(userA), TOKENS_TO_SEND);
+
+ vm.startPrank(userA);
+ assetOFT_arb.approve(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ VaultComposerSyncArb.depositAndSend(TOKENS_TO_SEND, sendParam, userA);
+ vm.stopPrank();
+
+ assertEq(vault_arb.balanceOf(userA), TOKENS_TO_SEND);
+ assertEq(assetOFT_arb.balanceOf(userA), 0);
+ }
+
+ function test_depositSend_target_hub_can_have_dust() public {
+ uint256 amountWithDust = TOKENS_TO_SEND + 1; // 1 extra token to test dust handling
+
+ SendParam memory sendParam = SendParam(ARB_EID, addressToBytes32(userA), amountWithDust, 0, "", "", "");
+ assetOFT_arb.mint(address(userA), amountWithDust);
+
+ vm.startPrank(userA);
+ assetOFT_arb.approve(address(VaultComposerSyncArb), amountWithDust);
+ VaultComposerSyncArb.depositAndSend(amountWithDust, sendParam, userA);
+ vm.stopPrank();
+
+ assertEq(vault_arb.balanceOf(userA), amountWithDust);
+ assertEq(assetOFT_arb.balanceOf(userA), 0);
+ }
+
+ function test_redeemSend_target_hub() public {
+ SendParam memory sendParam = SendParam(ARB_EID, addressToBytes32(userA), TOKENS_TO_SEND, 0, "", "", "");
+ assetOFT_arb.mint(address(vault_arb), TOKENS_TO_SEND);
+ vault_arb.mint(address(userA), TOKENS_TO_SEND);
+
+ vm.startPrank(userA);
+ vault_arb.approve(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ VaultComposerSyncArb.redeemAndSend(TOKENS_TO_SEND, sendParam, userA);
+ vm.stopPrank();
+
+ assertEq(vault_arb.balanceOf(userA), 0);
+ assertEq(assetOFT_arb.balanceOf(userA), TOKENS_TO_SEND);
+ }
+
+ function test_redeemSend_target_hub_can_have_dust() public {
+ uint256 amountWithDust = TOKENS_TO_SEND + 1; // 1 extra token to test dust handling
+
+ SendParam memory sendParam = SendParam(ARB_EID, addressToBytes32(userA), amountWithDust, 0, "", "", "");
+ assetOFT_arb.mint(address(vault_arb), amountWithDust);
+ vault_arb.mint(address(userA), amountWithDust);
+
+ vm.startPrank(userA);
+ vault_arb.approve(address(VaultComposerSyncArb), amountWithDust);
+ VaultComposerSyncArb.redeemAndSend(amountWithDust, sendParam, userA);
+ vm.stopPrank();
+
+ assertEq(vault_arb.balanceOf(userA), 0);
+ assertEq(assetOFT_arb.balanceOf(userA), amountWithDust);
+ }
+
+ function test_depositSend_target_not_hub() public {
+ SendParam memory sendParam = SendParam(POL_EID, addressToBytes32(userA), TOKENS_TO_SEND, 0, "", "", "");
+ assetOFT_arb.mint(address(userA), TOKENS_TO_SEND);
+
+ MessagingFee memory fee = VaultComposerSyncArb.quoteSend(
+ userA,
+ address(shareOFT_arb),
+ TOKENS_TO_SEND,
+ sendParam
+ );
+
+ vm.startPrank(userA);
+ assetOFT_arb.approve(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ VaultComposerSyncArb.depositAndSend{ value: fee.nativeFee }(TOKENS_TO_SEND, sendParam, userA);
+ vm.stopPrank();
+
+ assertEq(assetOFT_arb.totalSupply(), assetOFT_arb.balanceOf(address(vault_arb)), TOKENS_TO_SEND);
+ assertEq(vault_arb.totalSupply(), TOKENS_TO_SEND);
+ assertEq(shareOFT_pol.balanceOf(userA), 0);
+
+ verifyPackets(POL_EID, address(shareOFT_pol));
+ assertEq(shareOFT_pol.balanceOf(userA), TOKENS_TO_SEND);
+ assertEq(vault_arb.balanceOf(userA), 0);
+ }
+
+ function test_redeemSend_target_not_hub() public {
+ SendParam memory sendParam = SendParam(ETH_EID, addressToBytes32(userA), TOKENS_TO_SEND, 0, "", "", "");
+ assetOFT_arb.mint(address(vault_arb), TOKENS_TO_SEND);
+ vault_arb.mint(address(userA), TOKENS_TO_SEND);
+
+ MessagingFee memory fee = VaultComposerSyncArb.quoteSend(
+ userA,
+ address(assetOFT_arb),
+ TOKENS_TO_SEND,
+ sendParam
+ );
+
+ vm.startPrank(userA);
+ vault_arb.approve(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ VaultComposerSyncArb.redeemAndSend{ value: fee.nativeFee }(TOKENS_TO_SEND, sendParam, userA);
+ vm.stopPrank();
+
+ assertEq(vault_arb.totalSupply(), 0, "redeem burns the share tokens");
+ assertEq(assetOFT_arb.balanceOf(userA), 0);
+ assertEq(assetOFT_eth.balanceOf(userA), 0);
+
+ verifyPackets(ETH_EID, address(assetOFT_eth));
+ assertEq(assetOFT_eth.balanceOf(userA), TOKENS_TO_SEND);
+ assertEq(assetOFT_arb.balanceOf(userA), 0);
+ assertEq(vault_arb.balanceOf(userA), 0);
+ }
+}
diff --git a/packages/ovault-evm/test/vault-sync/VaultComposerSync_Unit.t.sol b/packages/ovault-evm/test/vault-sync/VaultComposerSync_Unit.t.sol
new file mode 100644
index 0000000000..5fbeeb24f0
--- /dev/null
+++ b/packages/ovault-evm/test/vault-sync/VaultComposerSync_Unit.t.sol
@@ -0,0 +1,240 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.20;
+
+import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
+import { IERC4626 } from "@openzeppelin/contracts/interfaces/IERC4626.sol";
+
+import { IOFT } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+import { IOAppCore } from "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol";
+import { OptionsBuilder } from "@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol";
+import { SendParam } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol";
+import { Errors } from "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol";
+
+import { IVaultComposerSync } from "../../contracts/interfaces/IVaultComposerSync.sol";
+import { VaultComposerSync } from "../../contracts/VaultComposerSync.sol";
+import { VaultComposerSyncBaseTest } from "./VaultComposerSync_Base.t.sol";
+
+import { console } from "forge-std/console.sol";
+
+contract VaultComposerSyncUnitTest is VaultComposerSyncBaseTest {
+ using OptionsBuilder for bytes;
+
+ function setUp() public virtual override {
+ super.setUp();
+ }
+
+ function test_deployment() public view {
+ assertEq(address(VaultComposerSyncArb.VAULT()), address(vault_arb));
+ assertEq(VaultComposerSyncArb.SHARE_OFT(), address(shareOFT_arb));
+ assertEq(VaultComposerSyncArb.ASSET_OFT(), address(assetOFT_arb));
+ }
+
+ function test_onlyEndpoint() public {
+ vm.expectRevert(abi.encodeWithSelector(IVaultComposerSync.OnlyEndpoint.selector, address(this)));
+ VaultComposerSyncArb.lzCompose(address(assetOFT_arb), _randomGUID(), "", userA, "");
+ }
+
+ function test_onlyOFT(address _oft) public {
+ vm.assume(_oft != address(assetOFT_arb) && _oft != address(shareOFT_arb));
+
+ vm.expectRevert(abi.encodeWithSelector(IVaultComposerSync.OnlyValidComposeCaller.selector, _oft));
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose{ value: 1 ether }(_oft, _randomGUID(), "", arbExecutor, "");
+ }
+
+ function test_lzCompose_pass_dst_not_hub() public {
+ bytes32 guid = _randomGUID();
+ assetOFT_arb.mint(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+
+ SendParam memory internalSendParam = SendParam(POL_EID, addressToBytes32(userA), TOKENS_TO_SEND, 0, "", "", "");
+
+ bytes memory composeMsg = _createComposePayload(ETH_EID, internalSendParam, 1 ether, TOKENS_TO_SEND, userA);
+
+ vm.expectEmit(true, true, true, true, address(assetOFT_arb));
+ emit IERC20.Transfer(address(VaultComposerSyncArb), address(vault_arb), TOKENS_TO_SEND);
+
+ vm.expectEmit(true, true, true, true, address(vault_arb));
+ emit IERC20.Transfer(address(0), address(VaultComposerSyncArb), TOKENS_TO_SEND);
+
+ vm.expectEmit(true, true, true, true, address(vault_arb));
+ emit IERC4626.Deposit(
+ address(VaultComposerSyncArb),
+ address(VaultComposerSyncArb),
+ TOKENS_TO_SEND,
+ TOKENS_TO_SEND
+ );
+
+ vm.expectEmit(true, true, true, true, address(VaultComposerSyncArb));
+ emit IVaultComposerSync.Sent(guid);
+
+ assertEq(assetOFT_arb.totalSupply(), assetOFT_arb.balanceOf(address(VaultComposerSyncArb)), TOKENS_TO_SEND);
+ assertEq(vault_arb.totalSupply(), 0);
+
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose{ value: 1 ether }(address(assetOFT_arb), guid, composeMsg, arbExecutor, "");
+
+ assertEq(assetOFT_arb.totalSupply(), assetOFT_arb.balanceOf(address(vault_arb)), TOKENS_TO_SEND);
+ assertEq(vault_arb.totalSupply(), vault_arb.balanceOf(address(shareOFT_arb)), TOKENS_TO_SEND);
+ }
+
+ function test_lzCompose_pass_dst_is_hub() public {
+ bytes32 guid = _randomGUID();
+ assetOFT_arb.mint(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+
+ SendParam memory internalSendParam = SendParam(
+ VaultComposerSyncArb.VAULT_EID(),
+ addressToBytes32(userA),
+ TOKENS_TO_SEND,
+ 0,
+ "",
+ "",
+ ""
+ );
+
+ bytes memory composeMsg = _createComposePayload(ETH_EID, internalSendParam, 0, TOKENS_TO_SEND, userA);
+
+ vm.expectEmit(true, true, true, true, address(assetOFT_arb));
+ emit IERC20.Transfer(address(VaultComposerSyncArb), address(vault_arb), TOKENS_TO_SEND);
+
+ vm.expectEmit(true, true, true, true, address(vault_arb));
+ emit IERC20.Transfer(address(0), address(VaultComposerSyncArb), TOKENS_TO_SEND);
+
+ vm.expectEmit(true, true, true, true, address(vault_arb));
+ emit IERC4626.Deposit(
+ address(VaultComposerSyncArb),
+ address(VaultComposerSyncArb),
+ TOKENS_TO_SEND,
+ TOKENS_TO_SEND
+ );
+
+ vm.expectEmit(true, true, true, true, address(VaultComposerSyncArb));
+ emit IVaultComposerSync.Sent(guid);
+
+ assertEq(assetOFT_arb.totalSupply(), assetOFT_arb.balanceOf(address(VaultComposerSyncArb)), TOKENS_TO_SEND);
+ assertEq(vault_arb.totalSupply(), 0);
+
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose(address(assetOFT_arb), guid, composeMsg, arbExecutor, "");
+
+ assertEq(assetOFT_arb.totalSupply(), assetOFT_arb.balanceOf(address(vault_arb)), TOKENS_TO_SEND);
+ assertEq(vault_arb.totalSupply(), vault_arb.balanceOf(address(userA)), TOKENS_TO_SEND);
+ }
+
+ function test_lzCompose_pass_dst_is_hub_no_msgValue_causes_refund() public {
+ bytes32 guid = _randomGUID();
+ assetOFT_arb.mint(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ uint256 userABalanceEth = assetOFT_eth.balanceOf(userA);
+
+ SendParam memory internalSendParam = SendParam(
+ VaultComposerSyncArb.VAULT_EID(),
+ addressToBytes32(userA),
+ TOKENS_TO_SEND,
+ 0,
+ "",
+ "",
+ ""
+ );
+
+ bytes memory composeMsg = _createComposePayload(ETH_EID, internalSendParam, 1 wei, TOKENS_TO_SEND, userA);
+
+ /// @dev Internal revert on try...catch
+ /// vm.expectRevert(abi.encodeWithSelector(IVaultComposerSync.NoMsgValueExpected.selector));
+
+ vm.expectEmit(true, true, true, true, address(VaultComposerSyncArb));
+ emit IVaultComposerSync.Refunded(guid);
+
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose{ value: 1 ether }(address(assetOFT_arb), guid, composeMsg, arbExecutor, "");
+
+ verifyPackets(ETH_EID, address(assetOFT_eth));
+ assertEq(
+ assetOFT_eth.balanceOf(userA),
+ userABalanceEth + TOKENS_TO_SEND,
+ "userA should have received refund on Ethereum"
+ );
+ }
+
+ function test_lzCompose_fail_invalid_payload_auto_refunds() public {
+ bytes32 guid = _randomGUID();
+ assetOFT_arb.mint(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ uint256 userABalanceEth = assetOFT_eth.balanceOf(userA);
+
+ bytes memory invalidComposeMsg = abi.encode(bytes("0x1234"), 5);
+ bytes memory composeMsg = _createComposePayload(ETH_EID, invalidComposeMsg, TOKENS_TO_SEND, userA);
+
+ vm.expectEmit(true, true, true, true, address(VaultComposerSyncArb));
+ emit IVaultComposerSync.Refunded(guid);
+
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose{ value: 1 ether }(address(assetOFT_arb), guid, composeMsg, arbExecutor, "");
+
+ verifyPackets(ETH_EID, address(assetOFT_eth));
+ assertEq(
+ assetOFT_eth.balanceOf(userA),
+ userABalanceEth + TOKENS_TO_SEND,
+ "userA should have received refund on Ethereum"
+ );
+ }
+
+ function test_lzCompose_slippage_causes_refund() public {
+ bytes32 guid = _randomGUID();
+ assetOFT_arb.mint(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+ uint256 userABalanceEth = assetOFT_eth.balanceOf(userA);
+
+ SendParam memory internalSendParam = SendParam(
+ POL_EID,
+ addressToBytes32(userB),
+ TOKENS_TO_SEND,
+ TOKENS_TO_SEND + 1, // More than we can provide, causing slippage
+ "",
+ "",
+ ""
+ );
+
+ bytes memory composePayload = abi.encode(internalSendParam);
+ bytes memory composeMsg = _createComposePayload(ETH_EID, composePayload, TOKENS_TO_SEND, userA);
+
+ vm.expectEmit(true, true, true, true, address(VaultComposerSyncArb));
+ emit IVaultComposerSync.Refunded(guid);
+
+ assertEq(assetOFT_arb.totalSupply(), assetOFT_arb.balanceOf(address(VaultComposerSyncArb)), TOKENS_TO_SEND);
+ assertEq(vault_arb.totalSupply(), 0);
+
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose{ value: 1 ether }(address(assetOFT_arb), guid, composeMsg, arbExecutor, "");
+
+ // The operation should be refunded since slippage was too high
+ verifyPackets(ETH_EID, address(assetOFT_eth));
+ assertEq(
+ assetOFT_eth.balanceOf(userA),
+ userABalanceEth + TOKENS_TO_SEND,
+ "userA should have received refund on Ethereum"
+ );
+ assertEq(vault_arb.totalSupply(), 0, "No shares should be minted due to refund");
+ }
+
+ function test_InsufficientMsgValue_causes_revert_no_refund() public {
+ bytes32 guid = _randomGUID();
+ assetOFT_arb.mint(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+
+ SendParam memory internalSendParam = SendParam(POL_EID, addressToBytes32(userB), TOKENS_TO_SEND, 0, "", "", "");
+ bytes memory composeMsg = _createComposePayload(ETH_EID, internalSendParam, 10 ether, msgValueToFail, userA);
+
+ vm.expectRevert(abi.encodeWithSelector(IVaultComposerSync.InsufficientMsgValue.selector, 10 ether, 1 ether));
+
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose{ value: 1 ether }(address(assetOFT_arb), guid, composeMsg, arbExecutor, "");
+ }
+
+ function test_lzCompose_fail_not_enough_value_for_refund_complete_revert() public {
+ bytes32 guid = _randomGUID();
+ assetOFT_arb.mint(address(VaultComposerSyncArb), TOKENS_TO_SEND);
+
+ SendParam memory internalSendParam = SendParam(POL_EID, addressToBytes32(userA), TOKENS_TO_SEND, 0, "", "", "");
+ bytes memory composeMsg = _createComposePayload(ETH_EID, internalSendParam, 0, TOKENS_TO_SEND, userA);
+
+ vm.expectRevert(abi.encodeWithSelector(Errors.LZ_InsufficientFee.selector, 200110716, 1, 0, 0)); /// @dev 200110716 is quoteSend value
+ vm.prank(arbEndpoint);
+ VaultComposerSyncArb.lzCompose{ value: 1 wei }(address(assetOFT_arb), guid, composeMsg, arbExecutor, "");
+ }
+}
diff --git a/packages/ovault-evm/tsconfig.json b/packages/ovault-evm/tsconfig.json
new file mode 100644
index 0000000000..2c65164454
--- /dev/null
+++ b/packages/ovault-evm/tsconfig.json
@@ -0,0 +1,114 @@
+{
+ "compilerOptions": {
+ /* Visit https://aka.ms/tsconfig to read more about this file */
+
+ /* Projects */
+ // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
+ // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
+ // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
+ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
+ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
+ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
+
+ /* Language and Environment */
+ "target": "ESNext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
+ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
+ // "jsx": "preserve", /* Specify what JSX code is generated. */
+ // "libReplacement": true, /* Enable lib replacement. */
+ // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
+ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
+ // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
+ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
+ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
+ // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
+ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
+ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
+ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
+
+ /* Modules */
+ "module": "ESNext" /* Specify what module code is generated. */,
+ "rootDir": "./src" /* Specify the root folder within your source files. */,
+ "moduleResolution": "bundler" /* Specify how TypeScript looks up a file from a given module specifier. */,
+ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
+ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
+ // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
+ // "types": [], /* Specify type package names to be included without being referenced in a source file. */
+ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
+ // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
+ // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
+ // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */
+ // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
+ // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
+ // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
+ // "noUncheckedSideEffectImports": true, /* Check side effect imports. */
+ // "resolveJsonModule": true, /* Enable importing .json files. */
+ // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
+ // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
+
+ /* JavaScript Support */
+ // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
+ // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
+ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
+
+ /* Emit */
+ "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */,
+ "declarationMap": true /* Create sourcemaps for d.ts files. */,
+ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
+ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
+ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
+ // "noEmit": true, /* Disable emitting files from a compilation. */
+ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
+ "outDir": "./dist" /* Specify an output folder for all emitted files. */,
+ // "removeComments": true, /* Disable emitting comments. */
+ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
+ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
+ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
+ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
+ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
+ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
+ // "newLine": "crlf", /* Set the newline character for emitting files. */
+ // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
+ // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
+ // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
+ // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
+ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
+
+ /* Interop Constraints */
+ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
+ // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
+ // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
+ // "erasableSyntaxOnly": true, /* Do not allow runtime constructs that are not part of ECMAScript. */
+ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
+ "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */,
+ // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
+ "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
+
+ /* Type Checking */
+ "strict": true /* Enable all strict type-checking options. */,
+ "noImplicitAny": true /* Enable error reporting for expressions and declarations with an implied 'any' type. */,
+ // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
+ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
+ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
+ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
+ // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */
+ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
+ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
+ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
+ // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
+ // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
+ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
+ // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
+ // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
+ // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
+ // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
+ // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
+ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
+ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
+
+ /* Completeness */
+ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
+ "skipLibCheck": true /* Skip type checking all .d.ts files. */
+ },
+ "include": ["src/**/*"],
+ "exclude": ["node_modules", "dist", "test/**/*"]
+}
diff --git a/packages/ovault-evm/tsconfig.test.json b/packages/ovault-evm/tsconfig.test.json
new file mode 100644
index 0000000000..8c0fd472f7
--- /dev/null
+++ b/packages/ovault-evm/tsconfig.test.json
@@ -0,0 +1,10 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "noEmit": true
+ },
+ "include": ["test/**/*", "src/**/*"],
+ "exclude": ["node_modules", "dist"]
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e346333d21..b360aa95a4 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -3019,6 +3019,141 @@ importers:
specifier: ^5.4.4
version: 5.5.3
+ examples/ovault-evm:
+ devDependencies:
+ '@babel/core':
+ specifier: ^7.23.9
+ version: 7.23.9
+ '@layerzerolabs/devtools-evm-hardhat':
+ specifier: ^3.0.0
+ version: 3.1.0(@ethersproject/abi@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@ethersproject/contracts@5.7.0)(@ethersproject/providers@5.7.2)(@layerzerolabs/devtools-evm@2.0.1)(@layerzerolabs/devtools@1.0.1)(@layerzerolabs/io-devtools@packages+io-devtools)(@layerzerolabs/lz-definitions@3.0.86)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.7.2)(fp-ts@2.16.2)(hardhat-deploy@0.12.4)(hardhat@2.22.12)
+ '@layerzerolabs/eslint-config-next':
+ specifier: ~2.3.39
+ version: 2.3.44(typescript@5.5.3)
+ '@layerzerolabs/io-devtools':
+ specifier: ~0.3.0
+ version: link:../../packages/io-devtools
+ '@layerzerolabs/lz-definitions':
+ specifier: ^3.0.59
+ version: 3.0.86
+ '@layerzerolabs/lz-evm-messagelib-v2':
+ specifier: ^3.0.12
+ version: 3.0.86(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.86)(@layerzerolabs/lz-evm-v1-0.7@3.0.86)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-protocol-v2':
+ specifier: ^3.0.12
+ version: 3.0.86(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-sdk-v2':
+ specifier: ^3.0.75
+ version: 3.0.75
+ '@layerzerolabs/lz-evm-v1-0.7':
+ specifier: ^3.0.12
+ version: 3.0.86(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)
+ '@layerzerolabs/lz-v2-utilities':
+ specifier: ^3.0.12
+ version: 3.0.86
+ '@layerzerolabs/metadata-tools':
+ specifier: ^2.0.0
+ version: 2.0.0(@layerzerolabs/devtools-evm-hardhat@3.1.0)(@layerzerolabs/ua-devtools@4.0.0)
+ '@layerzerolabs/oapp-evm':
+ specifier: ^0.3.1
+ version: link:../../packages/oapp-evm
+ '@layerzerolabs/oft-evm':
+ specifier: ^3.1.2
+ version: link:../../packages/oft-evm
+ '@layerzerolabs/ovault-evm':
+ specifier: ^0.0.1
+ version: link:../../packages/ovault-evm
+ '@layerzerolabs/prettier-config-next':
+ specifier: ^2.3.39
+ version: 2.3.44
+ '@layerzerolabs/script-devtools-evm-foundry':
+ specifier: ^1.0.0
+ version: link:../../packages/script-devtools-evm-foundry
+ '@layerzerolabs/solhint-config':
+ specifier: ^3.0.12
+ version: 3.0.12(typescript@5.5.3)
+ '@layerzerolabs/test-devtools-evm-foundry':
+ specifier: ~6.0.2
+ version: 6.0.3(@layerzerolabs/lz-evm-messagelib-v2@3.0.86)(@layerzerolabs/lz-evm-protocol-v2@3.0.86)(@layerzerolabs/lz-evm-v1-0.7@3.0.86)(@layerzerolabs/oapp-evm@packages+oapp-evm)(@layerzerolabs/oft-evm@packages+oft-evm)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)
+ '@layerzerolabs/toolbox-foundry':
+ specifier: ~0.1.12
+ version: link:../../packages/toolbox-foundry
+ '@layerzerolabs/toolbox-hardhat':
+ specifier: ~0.6.10
+ version: link:../../packages/toolbox-hardhat
+ '@nomicfoundation/hardhat-ethers':
+ specifier: ^3.0.5
+ version: 3.0.5(ethers@5.7.2)(hardhat@2.22.12)
+ '@nomiclabs/hardhat-ethers':
+ specifier: ^2.2.3
+ version: 2.2.3(ethers@5.7.2)(hardhat@2.22.12)
+ '@openzeppelin/contracts':
+ specifier: ^5.0.2
+ version: 5.1.0
+ '@openzeppelin/contracts-upgradeable':
+ specifier: ^5.0.2
+ version: 5.1.0(@openzeppelin/contracts@5.1.0)
+ '@rushstack/eslint-patch':
+ specifier: ^1.7.0
+ version: 1.7.0
+ '@types/chai':
+ specifier: ^4.3.11
+ version: 4.3.20
+ '@types/mocha':
+ specifier: ^10.0.6
+ version: 10.0.6
+ '@types/node':
+ specifier: ~18.18.14
+ version: 18.18.14
+ chai:
+ specifier: ^4.4.1
+ version: 4.5.0
+ concurrently:
+ specifier: ~9.1.0
+ version: 9.1.0
+ dotenv:
+ specifier: ^16.4.1
+ version: 16.4.7
+ eslint:
+ specifier: ^8.55.0
+ version: 8.57.1
+ eslint-plugin-jest-extended:
+ specifier: ~2.0.0
+ version: 2.0.0(eslint@8.57.1)(typescript@5.5.3)
+ ethers:
+ specifier: ^5.7.2
+ version: 5.7.2
+ hardhat:
+ specifier: ^2.22.10
+ version: 2.22.12(ts-node@10.9.2)(typescript@5.5.3)
+ hardhat-contract-sizer:
+ specifier: ^2.10.0
+ version: 2.10.0(hardhat@2.22.12)
+ hardhat-deploy:
+ specifier: ^0.12.1
+ version: 0.12.4
+ inquirer:
+ specifier: ^12.3.3
+ version: 12.4.1(@types/node@18.18.14)
+ mocha:
+ specifier: ^10.2.0
+ version: 10.2.0
+ prettier:
+ specifier: ^3.2.5
+ version: 3.2.5
+ solhint:
+ specifier: ^4.1.1
+ version: 4.1.1(typescript@5.5.3)
+ solidity-bytes-utils:
+ specifier: ^0.8.2
+ version: 0.8.2
+ ts-node:
+ specifier: ^10.9.2
+ version: 10.9.2(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3)
+ typescript:
+ specifier: ^5.4.4
+ version: 5.5.3
+
examples/uniswap-read:
devDependencies:
'@babel/core':
@@ -4048,7 +4183,7 @@ importers:
version: 2.16.2
jest:
specifier: ^29.6.2
- version: 29.7.0(@types/node@18.18.14)
+ version: 29.7.0(@types/node@18.18.14)(ts-node@10.9.2)
tsup:
specifier: ~8.0.1
version: 8.0.1(@swc/core@1.4.0)(typescript@5.5.3)
@@ -4233,7 +4368,7 @@ importers:
version: 29.5.12
jest:
specifier: ^29.7.0
- version: 29.7.0(@types/node@18.18.14)
+ version: 29.7.0(@types/node@18.18.14)(ts-node@10.9.2)
tslib:
specifier: ~2.6.2
version: 2.6.3
@@ -4611,6 +4746,76 @@ importers:
specifier: ^6.0.1
version: 6.0.1
+ packages/ovault-evm:
+ dependencies:
+ '@layerzerolabs/lz-definitions':
+ specifier: ^3.0.75
+ version: 3.0.86
+ '@layerzerolabs/lz-v2-utilities':
+ specifier: ^3.0.75
+ version: 3.0.86
+ '@layerzerolabs/scan-client-v2':
+ specifier: ^0.0.1
+ version: 0.0.1(redaxios@0.5.1)
+ redaxios:
+ specifier: ^0.5.1
+ version: 0.5.1
+ viem:
+ specifier: ^2.33.1
+ version: 2.33.3(typescript@5.5.3)
+ devDependencies:
+ '@layerzerolabs/lz-evm-messagelib-v2':
+ specifier: ^3.0.75
+ version: 3.0.86(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.86)(@layerzerolabs/lz-evm-v1-0.7@3.0.86)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-protocol-v2':
+ specifier: ^3.0.75
+ version: 3.0.86(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-v1-0.7':
+ specifier: ^3.0.75
+ version: 3.0.86(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)
+ '@layerzerolabs/oapp-evm':
+ specifier: ^0.3.2
+ version: link:../oapp-evm
+ '@layerzerolabs/oft-evm':
+ specifier: ^3.1.4
+ version: link:../oft-evm
+ '@layerzerolabs/test-devtools-evm-foundry':
+ specifier: ~6.0.3
+ version: 6.0.3(@layerzerolabs/lz-evm-messagelib-v2@3.0.86)(@layerzerolabs/lz-evm-protocol-v2@3.0.86)(@layerzerolabs/lz-evm-v1-0.7@3.0.86)(@layerzerolabs/oapp-evm@packages+oapp-evm)(@layerzerolabs/oft-evm@packages+oft-evm)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)
+ '@layerzerolabs/toolbox-foundry':
+ specifier: ^0.1.12
+ version: link:../toolbox-foundry
+ '@openzeppelin/contracts':
+ specifier: ^5.0.2
+ version: 5.1.0
+ '@openzeppelin/contracts-upgradeable':
+ specifier: ^5.0.2
+ version: 5.1.0(@openzeppelin/contracts@5.1.0)
+ '@types/mocha':
+ specifier: ^10.0.10
+ version: 10.0.10
+ '@types/node':
+ specifier: ^24.1.0
+ version: 24.2.0
+ mocha:
+ specifier: ^11.7.1
+ version: 11.7.1
+ rimraf:
+ specifier: ^5.0.5
+ version: 5.0.9
+ ts-mocha:
+ specifier: ^11.1.0
+ version: 11.1.0(mocha@11.7.1)(ts-node@10.9.2)
+ ts-node:
+ specifier: ^10.9.2
+ version: 10.9.2(@types/node@24.2.0)(typescript@5.5.3)
+ tsx:
+ specifier: ^4.20.3
+ version: 4.20.3
+ typescript:
+ specifier: ^5.4.4
+ version: 5.5.3
+
packages/protocol-devtools:
devDependencies:
'@layerzerolabs/devtools':
@@ -4761,13 +4966,13 @@ importers:
version: 3.0.75
'@layerzerolabs/lz-solana-sdk-v2':
specifier: ^3.0.0
- version: 3.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.5.3)
+ version: 3.0.0(typescript@5.5.3)
'@layerzerolabs/lz-v2-utilities':
specifier: ^3.0.75
version: 3.0.75
'@layerzerolabs/oft-v2-solana-sdk':
specifier: ^3.0.38
- version: 3.0.38(@swc/core@1.4.0)(@types/node@18.18.14)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.5.3)
+ version: 3.0.38(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3)
'@layerzerolabs/protocol-devtools':
specifier: ~3.0.0
version: link:../protocol-devtools
@@ -5428,13 +5633,13 @@ importers:
version: 3.0.75
'@layerzerolabs/lz-solana-sdk-v2':
specifier: ^3.0.59
- version: 3.0.66(@swc/core@1.4.0)(@types/node@18.18.14)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.5.3)
+ version: 3.0.66(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3)
'@layerzerolabs/lz-v2-utilities':
specifier: ^3.0.75
version: 3.0.75
'@layerzerolabs/oft-v2-solana-sdk':
specifier: ^3.0.59
- version: 3.0.66(@swc/core@1.4.0)(@types/node@18.18.14)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.5.3)
+ version: 3.0.66(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3)
'@layerzerolabs/protocol-devtools':
specifier: ~3.0.0
version: link:../protocol-devtools
@@ -5539,7 +5744,7 @@ importers:
version: 12.6.1
jest:
specifier: ^29.7.0
- version: 29.7.0(@types/node@18.18.14)
+ version: 29.7.0(@types/node@18.18.14)(ts-node@10.9.2)
tsup:
specifier: ^8.0.1
version: 8.0.1(@swc/core@1.4.0)(typescript@5.5.3)
@@ -6309,6 +6514,10 @@ packages:
resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==}
dev: true
+ /@adraffy/ens-normalize@1.11.0:
+ resolution: {integrity: sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==}
+ dev: false
+
/@ampproject/remapping@2.2.1:
resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
engines: {node: '>=6.0.0'}
@@ -6681,7 +6890,7 @@ packages:
'@babel/helper-split-export-declaration': 7.22.6
'@babel/parser': 7.26.8
'@babel/types': 7.26.8
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
globals: 11.12.0
transitivePeerDependencies:
- supports-color
@@ -7600,7 +7809,7 @@ packages:
ethers: ^5.7.2
dependencies:
'@ethereum-waffle/provider': 4.0.5(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(ethers@5.7.2)
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
ethers: 5.7.2
json-bigint: 1.0.0
transitivePeerDependencies:
@@ -7665,7 +7874,7 @@ packages:
dependencies:
'@ethereum-waffle/ens': 4.0.3(@ensdomains/ens@0.4.5)(@ensdomains/resolver@0.2.4)(ethers@5.7.2)
'@ganache/ethereum-options': 0.1.4
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
ethers: 5.7.2
ganache: 7.4.3
transitivePeerDependencies:
@@ -7689,7 +7898,7 @@ packages:
'@ethereumjs/block': 3.6.3
'@ethereumjs/common': 2.6.5
'@ethereumjs/ethash': 1.1.0
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
ethereumjs-util: 7.1.5
level-mem: 5.0.1
lru-cache: 5.1.1
@@ -9076,6 +9285,47 @@ packages:
- utf-8-validate
dev: true
+ /@layerzerolabs/devtools-evm-hardhat@3.1.0(@ethersproject/abi@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@ethersproject/contracts@5.7.0)(@ethersproject/providers@5.7.2)(@layerzerolabs/devtools-evm@2.0.1)(@layerzerolabs/devtools@1.0.1)(@layerzerolabs/io-devtools@packages+io-devtools)(@layerzerolabs/lz-definitions@3.0.86)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.7.2)(fp-ts@2.16.2)(hardhat-deploy@0.12.4)(hardhat@2.22.12):
+ resolution: {integrity: sha512-DS6KZyyUnwNB8aMnwwAAuGVHKYIxv4W24y+d/5QId/WqMcnDXHVY76SijEv9DJJoebYhuq4I7OHkDMmr+h15nA==}
+ peerDependencies:
+ '@ethersproject/abi': ^5.7.0
+ '@ethersproject/abstract-signer': ^5.7.0
+ '@ethersproject/contracts': ^5.7.0
+ '@ethersproject/providers': ^5.7.0
+ '@layerzerolabs/devtools': ~1.0.0
+ '@layerzerolabs/devtools-evm': ~2.0.0
+ '@layerzerolabs/io-devtools': ~0.2.0
+ '@layerzerolabs/lz-definitions': ^3.0.75
+ '@nomiclabs/hardhat-ethers': ^2.2.3
+ fp-ts: ^2.16.2
+ hardhat: ^2.22.10
+ hardhat-deploy: ^0.12.1
+ dependencies:
+ '@ethersproject/abi': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/contracts': 5.7.0
+ '@ethersproject/providers': 5.7.2
+ '@layerzerolabs/devtools': 1.0.1(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@packages+io-devtools)(@layerzerolabs/lz-definitions@3.0.86)(zod@3.22.4)
+ '@layerzerolabs/devtools-evm': 2.0.1(@ethersproject/abi@5.7.0)(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.7.0)(@ethersproject/constants@5.7.0)(@ethersproject/contracts@5.7.0)(@ethersproject/providers@5.7.2)(@layerzerolabs/devtools@1.0.1)(@layerzerolabs/io-devtools@packages+io-devtools)(@layerzerolabs/lz-definitions@3.0.86)(fp-ts@2.16.2)(zod@3.22.4)
+ '@layerzerolabs/export-deployments': 0.0.16
+ '@layerzerolabs/io-devtools': link:packages/io-devtools
+ '@layerzerolabs/lz-definitions': 3.0.86
+ '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2)(hardhat@2.22.12)
+ '@safe-global/protocol-kit': 1.3.0(ethers@5.7.2)
+ fp-ts: 2.16.2
+ hardhat: 2.22.12(ts-node@10.9.2)(typescript@5.5.3)
+ hardhat-deploy: 0.12.4
+ micro-memoize: 4.1.2
+ p-memoize: 4.0.4
+ zod: 3.22.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - ethers
+ - supports-color
+ - utf-8-validate
+ dev: true
+
/@layerzerolabs/devtools-evm@1.0.6(@ethersproject/abi@5.7.0)(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.7.0)(@ethersproject/constants@5.7.0)(@ethersproject/contracts@5.7.0)(@ethersproject/providers@5.7.2)(@layerzerolabs/devtools@0.4.10)(@layerzerolabs/io-devtools@0.1.17)(@layerzerolabs/lz-definitions@3.0.86)(fp-ts@2.16.2)(zod@3.22.4):
resolution: {integrity: sha512-9sHP5l2IGu2ccZnMkyh5zu5sCQLBOYYlU+9gziMCH5CsrnVCeP9/MvOumxpVWxxi76sEaajJGsTgEkjJ17aBPA==}
peerDependencies:
@@ -9117,6 +9367,47 @@ packages:
- utf-8-validate
dev: true
+ /@layerzerolabs/devtools-evm@2.0.1(@ethersproject/abi@5.7.0)(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@ethersproject/address@5.7.0)(@ethersproject/bignumber@5.7.0)(@ethersproject/constants@5.7.0)(@ethersproject/contracts@5.7.0)(@ethersproject/providers@5.7.2)(@layerzerolabs/devtools@1.0.1)(@layerzerolabs/io-devtools@packages+io-devtools)(@layerzerolabs/lz-definitions@3.0.86)(fp-ts@2.16.2)(zod@3.22.4):
+ resolution: {integrity: sha512-Tt1I+QZu9/0Do8CXb4l3w3gNyPYbfYwU16DgrNtBorzeCNlud7irLE+VMvTzE5lWa8EakHg5cRkaxuumD1dAew==}
+ peerDependencies:
+ '@ethersproject/abi': ^5.7.0
+ '@ethersproject/abstract-provider': ^5.7.0
+ '@ethersproject/abstract-signer': ^5.7.0
+ '@ethersproject/address': ~5.7.0
+ '@ethersproject/bignumber': ^5.7.0
+ '@ethersproject/constants': ^5.7.0
+ '@ethersproject/contracts': ^5.7.0
+ '@ethersproject/providers': ^5.7.0
+ '@layerzerolabs/devtools': ~1.0.0
+ '@layerzerolabs/io-devtools': ~0.2.0
+ '@layerzerolabs/lz-definitions': ^3.0.75
+ fp-ts: ^2.16.2
+ zod: ^3.22.4
+ dependencies:
+ '@ethersproject/abi': 5.7.0
+ '@ethersproject/abstract-provider': 5.7.0
+ '@ethersproject/abstract-signer': 5.7.0
+ '@ethersproject/address': 5.7.0
+ '@ethersproject/bignumber': 5.7.0
+ '@ethersproject/constants': 5.7.0
+ '@ethersproject/contracts': 5.7.0
+ '@ethersproject/providers': 5.7.2
+ '@layerzerolabs/devtools': 1.0.1(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@packages+io-devtools)(@layerzerolabs/lz-definitions@3.0.86)(zod@3.22.4)
+ '@layerzerolabs/io-devtools': link:packages/io-devtools
+ '@layerzerolabs/lz-definitions': 3.0.86
+ '@safe-global/api-kit': 1.3.1
+ '@safe-global/protocol-kit': 1.3.0(ethers@5.7.2)
+ ethers: 5.7.2
+ fp-ts: 2.16.2
+ p-memoize: 4.0.4
+ zod: 3.22.4
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+ dev: true
+
/@layerzerolabs/devtools@0.4.10(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@0.1.17)(@layerzerolabs/lz-definitions@3.0.86)(zod@3.22.4):
resolution: {integrity: sha512-Y9kjUQuyNfm9Vs07+Mk0+KkqHPwHN2cLSzKhe5Tp+52R7d4fI5zsn33IaJsqqGWxSDL1sKq7gFMTdtglTdsA8A==}
peerDependencies:
@@ -9134,6 +9425,23 @@ packages:
zod: 3.22.4
dev: true
+ /@layerzerolabs/devtools@1.0.1(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@packages+io-devtools)(@layerzerolabs/lz-definitions@3.0.86)(zod@3.22.4):
+ resolution: {integrity: sha512-oz7zXqGSCkuTVe5wpoFF1gNtzQmJLBwCir+t32MbTlG7jamj6Zs9LL8x8/+LXvRNMOVOabTgdIpdEgWLRNVbhg==}
+ peerDependencies:
+ '@ethersproject/bytes': ~5.7.0
+ '@layerzerolabs/io-devtools': ~0.2.1
+ '@layerzerolabs/lz-definitions': ^3.0.75
+ zod: ^3.22.4
+ dependencies:
+ '@ethersproject/bytes': 5.7.0
+ '@layerzerolabs/io-devtools': link:packages/io-devtools
+ '@layerzerolabs/lz-definitions': 3.0.86
+ bs58: 6.0.0
+ exponential-backoff: 3.1.1
+ js-yaml: 4.1.0
+ zod: 3.22.4
+ dev: true
+
/@layerzerolabs/eslint-config-next@2.3.44(typescript@5.5.3):
resolution: {integrity: sha512-WlBSy47LGPILdrNgzPiRtQf/hAY62IN37ncUsQwcr8T7cyX1HZREx2qljuXpvduLDAKn5otsm0XIqHuCRUHEFg==}
dependencies:
@@ -10369,7 +10677,7 @@ packages:
- typescript
- utf-8-validate
- /@layerzerolabs/lz-solana-sdk-v2@3.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.5.3):
+ /@layerzerolabs/lz-solana-sdk-v2@3.0.0(typescript@5.5.3):
resolution: {integrity: sha512-sPvLXeQUO9QLpjOuWE7V+V8yfoI4E/NBYsH9lO2aPx0LYkQa+88ACgPq43B/zFROUD8238WuSb+doGrn3PKtJQ==}
dependencies:
'@ethersproject/abi': 5.7.0
@@ -10400,7 +10708,7 @@ packages:
- utf-8-validate
dev: true
- /@layerzerolabs/lz-solana-sdk-v2@3.0.66(@swc/core@1.4.0)(@types/node@18.18.14)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.5.3):
+ /@layerzerolabs/lz-solana-sdk-v2@3.0.66(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3):
resolution: {integrity: sha512-zyuqBYxaVtSa+STdcbO/uzzQV2kyxmBX3flNbvOq7kS2QHBivuaYd/XDbNLE54/egQ63yMtFcilqwy3VzNpclw==}
dependencies:
'@layerzerolabs/lz-corekit-solana': 3.0.66(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3)
@@ -10508,7 +10816,7 @@ packages:
- utf-8-validate
dev: true
- /@layerzerolabs/lz-solana-sdk-v2@3.0.86(@swc/core@1.4.0)(@types/node@18.18.14)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.5.3):
+ /@layerzerolabs/lz-solana-sdk-v2@3.0.86(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3):
resolution: {integrity: sha512-FfZLkFHIOPIFLkevQD0QSrfVR2UgREG6YF6oSR92XPViuVpAq0LAyCTXQi915bdiSdQ/Mwd+9eU/9ZPlk9f6sA==}
dependencies:
'@layerzerolabs/lz-corekit-solana': 3.0.86(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3)
@@ -10829,18 +11137,28 @@ packages:
'@layerzerolabs/ua-devtools': 3.0.6(@layerzerolabs/devtools@0.4.10)(@layerzerolabs/io-devtools@0.1.17)(@layerzerolabs/lz-definitions@3.0.86)(@layerzerolabs/lz-v2-utilities@3.0.86)(@layerzerolabs/protocol-devtools@1.1.7)(zod@3.22.4)
dev: true
+ /@layerzerolabs/metadata-tools@2.0.0(@layerzerolabs/devtools-evm-hardhat@3.1.0)(@layerzerolabs/ua-devtools@4.0.0):
+ resolution: {integrity: sha512-AkPoJIbVC5b4INVYlWtxr5ptMk5JGLYlickv4KmtOBZkRp/MMl5FXinFVmYoc+bfzD9VLS5ZNAvTOSoAMnNTgw==}
+ peerDependencies:
+ '@layerzerolabs/devtools-evm-hardhat': ~3.1.0
+ '@layerzerolabs/ua-devtools': ~4.0.0
+ dependencies:
+ '@layerzerolabs/devtools-evm-hardhat': 3.1.0(@ethersproject/abi@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@ethersproject/contracts@5.7.0)(@ethersproject/providers@5.7.2)(@layerzerolabs/devtools-evm@2.0.1)(@layerzerolabs/devtools@1.0.1)(@layerzerolabs/io-devtools@packages+io-devtools)(@layerzerolabs/lz-definitions@3.0.86)(@nomiclabs/hardhat-ethers@2.2.3)(ethers@5.7.2)(fp-ts@2.16.2)(hardhat-deploy@0.12.4)(hardhat@2.22.12)
+ '@layerzerolabs/ua-devtools': 4.0.0(@layerzerolabs/devtools@1.0.1)(@layerzerolabs/io-devtools@packages+io-devtools)(@layerzerolabs/lz-definitions@3.0.86)(@layerzerolabs/lz-v2-utilities@3.0.86)(@layerzerolabs/protocol-devtools@2.0.0)(zod@3.22.4)
+ dev: true
+
/@layerzerolabs/move-definitions@3.0.59:
resolution: {integrity: sha512-6cuvePiKpZ7OOgZEbX7keE0bQM3+HGzr7suqfb1LSYwfpcZKYICnB5fnbwXyC1Wa3qUx+/9ZlnhckKvUoUiwAA==}
dependencies:
'@layerzerolabs/lz-definitions': 3.0.75
dev: true
- /@layerzerolabs/oft-v2-solana-sdk@3.0.38(@swc/core@1.4.0)(@types/node@18.18.14)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.5.3):
+ /@layerzerolabs/oft-v2-solana-sdk@3.0.38(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3):
resolution: {integrity: sha512-P06/a5+ixph0u1AQkDZ0P0oFaIAdfGPl/UezMfWXUpiWLth428RT0rrMR6qI7z6X1uxqlUFNIotz2ET1fyFcpQ==}
dependencies:
'@ethersproject/bytes': 5.7.0
'@layerzerolabs/lz-foundation': 3.0.38(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3)
- '@layerzerolabs/lz-solana-sdk-v2': 3.0.86(@swc/core@1.4.0)(@types/node@18.18.14)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.5.3)
+ '@layerzerolabs/lz-solana-sdk-v2': 3.0.86(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3)
'@layerzerolabs/lz-v2-utilities': 3.0.86
'@metaplex-foundation/beet': 0.7.2
'@metaplex-foundation/beet-solana': 0.4.1
@@ -10866,12 +11184,12 @@ packages:
- utf-8-validate
dev: true
- /@layerzerolabs/oft-v2-solana-sdk@3.0.66(@swc/core@1.4.0)(@types/node@18.18.14)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.5.3):
+ /@layerzerolabs/oft-v2-solana-sdk@3.0.66(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3):
resolution: {integrity: sha512-ijbvj6/Gc4O4WLHfqnrBuKUtIhpaYws/ORj2apZFT1RKSgAX8CCJ9aZmn0ClamEG98i+PpXoroPPU46LMOMZyA==}
dependencies:
'@ethersproject/bytes': 5.7.0
'@layerzerolabs/lz-foundation': 3.0.66(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3)
- '@layerzerolabs/lz-solana-sdk-v2': 3.0.86(@swc/core@1.4.0)(@types/node@18.18.14)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.5.3)
+ '@layerzerolabs/lz-solana-sdk-v2': 3.0.86(@swc/core@1.4.0)(@types/node@18.18.14)(typescript@5.5.3)
'@layerzerolabs/lz-v2-utilities': 3.0.86
'@metaplex-foundation/beet': 0.7.2
'@metaplex-foundation/beet-solana': 0.4.1
@@ -10981,6 +11299,28 @@ packages:
zod: 3.22.4
dev: true
+ /@layerzerolabs/protocol-devtools@2.0.0(@layerzerolabs/devtools@1.0.1)(@layerzerolabs/io-devtools@packages+io-devtools)(@layerzerolabs/lz-definitions@3.0.86)(zod@3.22.4):
+ resolution: {integrity: sha512-Wae/QAZSvKQpL5EfzNMTFElI6msmJ2YwFofsmYLuQbfHWneuhWNhWB1iy655upiwstFq5Oer/Jft0y/YOgh1PQ==}
+ peerDependencies:
+ '@layerzerolabs/devtools': ~1.0.0
+ '@layerzerolabs/io-devtools': ~0.2.0
+ '@layerzerolabs/lz-definitions': ^3.0.75
+ zod: ^3.22.4
+ dependencies:
+ '@layerzerolabs/devtools': 1.0.1(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@packages+io-devtools)(@layerzerolabs/lz-definitions@3.0.86)(zod@3.22.4)
+ '@layerzerolabs/io-devtools': link:packages/io-devtools
+ '@layerzerolabs/lz-definitions': 3.0.86
+ zod: 3.22.4
+ dev: true
+
+ /@layerzerolabs/scan-client-v2@0.0.1(redaxios@0.5.1):
+ resolution: {integrity: sha512-eugkDt4ajC5hqEHq23oTXMf28d5HrltapT7F5FIybluS8qAwJ5nc2Bbu9JRgUDdO8LQTQpi8AoVqnMbRumD4lA==}
+ peerDependencies:
+ redaxios: ^0.5.1
+ dependencies:
+ redaxios: 0.5.1
+ dev: false
+
/@layerzerolabs/solhint-config@3.0.12(typescript@5.5.3):
resolution: {integrity: sha512-69li0+oU+sjeYVbB8qGCfmUm8aAng2esRISpofK67DOpqGTMI0+FTX6B0p3zowVoirHlPPRgsfAMxC92r/jNKA==}
dependencies:
@@ -11020,6 +11360,26 @@ packages:
- utf-8-validate
dev: false
+ /@layerzerolabs/test-devtools-evm-foundry@6.0.3(@layerzerolabs/lz-evm-messagelib-v2@3.0.86)(@layerzerolabs/lz-evm-protocol-v2@3.0.86)(@layerzerolabs/lz-evm-v1-0.7@3.0.86)(@layerzerolabs/oapp-evm@packages+oapp-evm)(@layerzerolabs/oft-evm@packages+oft-evm)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0):
+ resolution: {integrity: sha512-yJQzxcW2mVwnSB4vGmUfxDbR0K72f3jf+An6swmTXXrMvtZ5v9mKOUhN40c3mmrUq+/FJtvg+5sJCll37r369A==}
+ peerDependencies:
+ '@layerzerolabs/lz-evm-messagelib-v2': ^3.0.75
+ '@layerzerolabs/lz-evm-protocol-v2': ^3.0.75
+ '@layerzerolabs/lz-evm-v1-0.7': ^3.0.75
+ '@layerzerolabs/oapp-evm': ^0.3.2
+ '@layerzerolabs/oft-evm': ^3.1.3
+ '@openzeppelin/contracts': ^4.9.5 || ^5.0.0
+ '@openzeppelin/contracts-upgradeable': ^4.9.5 || ^5.0.0
+ dependencies:
+ '@layerzerolabs/lz-evm-messagelib-v2': 3.0.86(@axelar-network/axelar-gmp-sdk-solidity@5.10.0)(@chainlink/contracts-ccip@0.7.6)(@eth-optimism/contracts@0.6.0)(@layerzerolabs/lz-evm-protocol-v2@3.0.86)(@layerzerolabs/lz-evm-v1-0.7@3.0.86)(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-protocol-v2': 3.0.86(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)(solidity-bytes-utils@0.8.2)
+ '@layerzerolabs/lz-evm-v1-0.7': 3.0.86(@openzeppelin/contracts-upgradeable@5.1.0)(@openzeppelin/contracts@5.1.0)(hardhat-deploy@0.12.4)
+ '@layerzerolabs/oapp-evm': link:packages/oapp-evm
+ '@layerzerolabs/oft-evm': link:packages/oft-evm
+ '@openzeppelin/contracts': 5.1.0
+ '@openzeppelin/contracts-upgradeable': 5.1.0(@openzeppelin/contracts@5.1.0)
+ dev: true
+
/@layerzerolabs/ton@15.2.0-rc.3(@jest/globals@29.7.0)(@layerzerolabs/ton@15.2.0-rc.3)(@ton/core@0.59.0)(@ton/crypto@3.3.0)(@types/node@18.18.14)(chai@4.5.0)(typescript@5.5.3):
resolution: {integrity: sha512-Aq7htcWn31DxSYs8l0sJcQ76uAJRPy50lg6M2G+qNLSXpO01sPcUSb8oK/TmCKo+S+rDIFWUNKFjT0B/rll1YQ==}
peerDependencies:
@@ -11235,6 +11595,24 @@ packages:
zod: 3.22.4
dev: true
+ /@layerzerolabs/ua-devtools@4.0.0(@layerzerolabs/devtools@1.0.1)(@layerzerolabs/io-devtools@packages+io-devtools)(@layerzerolabs/lz-definitions@3.0.86)(@layerzerolabs/lz-v2-utilities@3.0.86)(@layerzerolabs/protocol-devtools@2.0.0)(zod@3.22.4):
+ resolution: {integrity: sha512-/qw4eGsE8sfg3v0yLu1vD3EXvwKCKC1AKuFAAOfSTYWraYqc8seFdC5rNEQfVj8DohiRbTLlul/qXqySr48atg==}
+ peerDependencies:
+ '@layerzerolabs/devtools': ~1.0.0
+ '@layerzerolabs/io-devtools': ~0.2.0
+ '@layerzerolabs/lz-definitions': ^3.0.75
+ '@layerzerolabs/lz-v2-utilities': ^3.0.75
+ '@layerzerolabs/protocol-devtools': ~2.0.0
+ zod: ^3.22.4
+ dependencies:
+ '@layerzerolabs/devtools': 1.0.1(@ethersproject/bytes@5.7.0)(@layerzerolabs/io-devtools@packages+io-devtools)(@layerzerolabs/lz-definitions@3.0.86)(zod@3.22.4)
+ '@layerzerolabs/io-devtools': link:packages/io-devtools
+ '@layerzerolabs/lz-definitions': 3.0.86
+ '@layerzerolabs/lz-v2-utilities': 3.0.86
+ '@layerzerolabs/protocol-devtools': 2.0.0(@layerzerolabs/devtools@1.0.1)(@layerzerolabs/io-devtools@packages+io-devtools)(@layerzerolabs/lz-definitions@3.0.86)(zod@3.22.4)
+ zod: 3.22.4
+ dev: true
+
/@ledgerhq/devices@8.4.4:
resolution: {integrity: sha512-sz/ryhe/R687RHtevIE9RlKaV8kkKykUV4k29e7GAVwzHX1gqG+O75cu1NCJUHLbp3eABV5FdvZejqRUlLis9A==}
dependencies:
@@ -11347,7 +11725,7 @@ packages:
'@nomiclabs/hardhat-docker': 2.0.2
chai: 4.5.0
chalk: 4.1.2
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
dockerode: 4.0.2
fs-extra: 11.2.0
hardhat: 2.22.12(ts-node@10.9.2)(typescript@5.5.3)
@@ -11405,7 +11783,7 @@ packages:
'@metaplex-foundation/beet': 0.7.2
'@solana/web3.js': 1.98.0
bs58: 5.0.0
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
transitivePeerDependencies:
- bufferutil
- encoding
@@ -11419,7 +11797,7 @@ packages:
'@metaplex-foundation/beet': 0.7.2
'@solana/web3.js': 1.98.0
bs58: 5.0.0
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
transitivePeerDependencies:
- bufferutil
- encoding
@@ -11445,7 +11823,7 @@ packages:
dependencies:
ansicolors: 0.3.2
bn.js: 5.2.1
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
dev: true
@@ -11482,7 +11860,7 @@ packages:
/@metaplex-foundation/rustbin@0.3.5:
resolution: {integrity: sha512-m0wkRBEQB/8krwMwKBvFugufZtYwMXiGHud2cTDAv+aGXK4M90y0Hx67/wpu+AqqoQfdV8VM9YezUOHKD+Z5kA==}
dependencies:
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
semver: 7.6.3
text-table: 0.2.0
toml: 3.0.0
@@ -11500,7 +11878,7 @@ packages:
'@solana/web3.js': 1.98.0
ansi-colors: 4.1.3
camelcase: 6.3.0
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
js-sha256: 0.9.0
prettier: 2.8.8
snake-case: 3.0.4
@@ -11663,6 +12041,11 @@ packages:
dependencies:
bs58: 6.0.0
+ /@noble/ciphers@1.3.0:
+ resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==}
+ engines: {node: ^14.21.3 || >=16}
+ dev: false
+
/@noble/curves@1.2.0:
resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==}
dependencies:
@@ -11680,6 +12063,13 @@ packages:
dependencies:
'@noble/hashes': 1.7.1
+ /@noble/curves@1.9.2:
+ resolution: {integrity: sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==}
+ engines: {node: ^14.21.3 || >=16}
+ dependencies:
+ '@noble/hashes': 1.8.0
+ dev: false
+
/@noble/ed25519@1.7.3:
resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==}
@@ -11703,6 +12093,11 @@ packages:
resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==}
engines: {node: ^14.21.3 || >=16}
+ /@noble/hashes@1.8.0:
+ resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+ engines: {node: ^14.21.3 || >=16}
+ dev: false
+
/@noble/secp256k1@1.7.1:
resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==}
@@ -12012,7 +12407,7 @@ packages:
'@ethersproject/address': 5.7.0
cbor: 8.1.0
chalk: 2.4.2
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
fs-extra: 7.0.1
hardhat: 2.22.12(ts-node@10.9.2)(typescript@5.5.3)
lodash: 4.17.21
@@ -12582,6 +12977,10 @@ packages:
/@scure/base@1.2.4:
resolution: {integrity: sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==}
+ /@scure/base@1.2.6:
+ resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==}
+ dev: false
+
/@scure/bip32@1.1.5:
resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==}
dependencies:
@@ -12604,6 +13003,14 @@ packages:
'@scure/base': 1.2.4
dev: true
+ /@scure/bip32@1.7.0:
+ resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==}
+ dependencies:
+ '@noble/curves': 1.9.2
+ '@noble/hashes': 1.8.0
+ '@scure/base': 1.2.6
+ dev: false
+
/@scure/bip39@1.1.1:
resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==}
dependencies:
@@ -12629,6 +13036,13 @@ packages:
'@scure/base': 1.2.4
dev: true
+ /@scure/bip39@1.6.0:
+ resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==}
+ dependencies:
+ '@noble/hashes': 1.8.0
+ '@scure/base': 1.2.6
+ dev: false
+
/@sentry/core@5.30.0:
resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==}
engines: {node: '>=6'}
@@ -13883,6 +14297,10 @@ packages:
'@types/node': 18.18.14
dev: true
+ /@types/mocha@10.0.10:
+ resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==}
+ dev: true
+
/@types/mocha@10.0.6:
resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==}
dev: true
@@ -13921,6 +14339,12 @@ packages:
undici-types: 6.19.8
dev: true
+ /@types/node@24.2.0:
+ resolution: {integrity: sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==}
+ dependencies:
+ undici-types: 7.10.0
+ dev: true
+
/@types/node@8.10.66:
resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==}
dev: false
@@ -14349,6 +14773,20 @@ packages:
web3-utils: 1.10.4
dev: true
+ /abitype@1.0.8(typescript@5.5.3):
+ resolution: {integrity: sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==}
+ peerDependencies:
+ typescript: '>=5.0.4'
+ zod: ^3 >=3.22.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ zod:
+ optional: true
+ dependencies:
+ typescript: 5.5.3
+ dev: false
+
/abort-controller@3.0.0:
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
engines: {node: '>=6.5'}
@@ -14421,7 +14859,7 @@ packages:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
engines: {node: '>= 6.0.0'}
dependencies:
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
@@ -16133,7 +16571,7 @@ packages:
dependencies:
ms: 2.1.3
- /debug@4.4.0:
+ /debug@4.4.0(supports-color@8.1.1):
resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
engines: {node: '>=6.0'}
peerDependencies:
@@ -16143,6 +16581,7 @@ packages:
optional: true
dependencies:
ms: 2.1.3
+ supports-color: 8.1.1
/decamelize@1.2.0:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
@@ -16343,6 +16782,11 @@ packages:
engines: {node: '>=0.3.1'}
dev: true
+ /diff@7.0.0:
+ resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==}
+ engines: {node: '>=0.3.1'}
+ dev: true
+
/dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -16366,7 +16810,7 @@ packages:
resolution: {integrity: sha512-89zhop5YVhcPEt5FpUFGr3cDyceGhq/F9J+ZndQ4KfqNvfbJpPMfgeixFgUj5OjCYAboElqODxY5Z1EBsSa6sg==}
engines: {node: '>= 8.0'}
dependencies:
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
readable-stream: 3.6.2
split-ca: 1.0.1
ssh2: 1.16.0
@@ -17316,7 +17760,7 @@ packages:
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.5
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
doctrine: 3.0.0
escape-string-regexp: 4.0.0
eslint-scope: 7.2.2
@@ -17918,7 +18362,7 @@ packages:
dependencies:
chalk: 4.1.2
commander: 5.1.0
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
dev: true
@@ -18324,6 +18768,12 @@ packages:
get-intrinsic: 1.2.2
dev: true
+ /get-tsconfig@4.10.1:
+ resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+ dev: true
+
/get-tsconfig@4.7.2:
resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==}
dependencies:
@@ -18370,6 +18820,18 @@ packages:
path-scurry: 1.10.1
dev: true
+ /glob@10.4.5:
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ hasBin: true
+ dependencies:
+ foreground-child: 3.1.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.0
+ path-scurry: 1.11.1
+ dev: true
+
/glob@11.0.1:
resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==}
engines: {node: 20 || >=22}
@@ -19644,6 +20106,14 @@ packages:
dependencies:
ws: 7.5.10
+ /isows@1.0.7(ws@8.18.2):
+ resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==}
+ peerDependencies:
+ ws: '*'
+ dependencies:
+ ws: 8.18.2
+ dev: false
+
/isstream@0.1.2:
resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
@@ -19687,7 +20157,7 @@ packages:
resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
engines: {node: '>=10'}
dependencies:
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
istanbul-lib-coverage: 3.2.2
source-map: 0.6.1
transitivePeerDependencies:
@@ -19742,6 +20212,14 @@ packages:
'@pkgjs/parseargs': 0.11.0
dev: true
+ /jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+ dev: true
+
/jackspeak@4.0.1:
resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==}
engines: {node: 20 || >=22}
@@ -19817,34 +20295,6 @@ packages:
- babel-plugin-macros
- supports-color
- /jest-cli@29.7.0(@types/node@18.18.14):
- resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- hasBin: true
- peerDependencies:
- node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
- peerDependenciesMeta:
- node-notifier:
- optional: true
- dependencies:
- '@jest/core': 29.7.0(ts-node@10.9.2)
- '@jest/test-result': 29.7.0
- '@jest/types': 29.6.3
- chalk: 4.1.2
- create-jest: 29.7.0(@types/node@18.18.14)(ts-node@10.9.2)
- exit: 0.1.2
- import-local: 3.1.0
- jest-config: 29.7.0(@types/node@18.18.14)(ts-node@10.9.2)
- jest-util: 29.7.0
- jest-validate: 29.7.0
- yargs: 17.7.2
- transitivePeerDependencies:
- - '@types/node'
- - babel-plugin-macros
- - supports-color
- - ts-node
- dev: true
-
/jest-cli@29.7.0(@types/node@18.18.14)(ts-node@10.9.2):
resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -20257,27 +20707,6 @@ packages:
merge-stream: 2.0.0
supports-color: 8.1.1
- /jest@29.7.0(@types/node@18.18.14):
- resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- hasBin: true
- peerDependencies:
- node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
- peerDependenciesMeta:
- node-notifier:
- optional: true
- dependencies:
- '@jest/core': 29.7.0(ts-node@10.9.2)
- '@jest/types': 29.6.3
- import-local: 3.1.0
- jest-cli: 29.7.0(@types/node@18.18.14)
- transitivePeerDependencies:
- - '@types/node'
- - babel-plugin-macros
- - supports-color
- - ts-node
- dev: true
-
/jest@29.7.0(@types/node@18.18.14)(ts-node@10.9.2):
resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -20822,6 +21251,10 @@ packages:
engines: {node: 14 || >=16.14}
dev: true
+ /lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+ dev: true
+
/lru-cache@11.0.0:
resolution: {integrity: sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==}
engines: {node: 20 || >=22}
@@ -21196,6 +21629,33 @@ packages:
yargs-parser: 20.2.4
yargs-unparser: 2.0.0
+ /mocha@11.7.1:
+ resolution: {integrity: sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ hasBin: true
+ dependencies:
+ browser-stdout: 1.3.1
+ chokidar: 4.0.3
+ debug: 4.4.0(supports-color@8.1.1)
+ diff: 7.0.0
+ escape-string-regexp: 4.0.0
+ find-up: 5.0.0
+ glob: 10.4.5
+ he: 1.2.0
+ js-yaml: 4.1.0
+ log-symbols: 4.1.0
+ minimatch: 9.0.5
+ ms: 2.1.3
+ picocolors: 1.1.1
+ serialize-javascript: 6.0.2
+ strip-json-comments: 3.1.1
+ supports-color: 8.1.1
+ workerpool: 9.3.3
+ yargs: 17.7.2
+ yargs-parser: 21.1.1
+ yargs-unparser: 2.0.0
+ dev: true
+
/mock-fs@4.14.0:
resolution: {integrity: sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==}
@@ -21619,6 +22079,27 @@ packages:
resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==}
dev: true
+ /ox@0.8.6(typescript@5.5.3):
+ resolution: {integrity: sha512-eiKcgiVVEGDtEpEdFi1EGoVVI48j6icXHce9nFwCNM7CKG3uoCXKdr4TPhS00Iy1TR2aWSF1ltPD0x/YgqIL9w==}
+ peerDependencies:
+ typescript: '>=5.4.0'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@adraffy/ens-normalize': 1.11.0
+ '@noble/ciphers': 1.3.0
+ '@noble/curves': 1.9.2
+ '@noble/hashes': 1.8.0
+ '@scure/bip32': 1.7.0
+ '@scure/bip39': 1.6.0
+ abitype: 1.0.8(typescript@5.5.3)
+ eventemitter3: 5.0.1
+ typescript: 5.5.3
+ transitivePeerDependencies:
+ - zod
+ dev: false
+
/p-cancelable@2.1.1:
resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
engines: {node: '>=8'}
@@ -21840,6 +22321,14 @@ packages:
minipass: 7.1.2
dev: true
+ /path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+ dev: true
+
/path-scurry@2.0.0:
resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
engines: {node: 20 || >=22}
@@ -22292,7 +22781,7 @@ packages:
dependencies:
'@assemblyscript/loader': 0.9.4
bl: 5.1.0
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
minimist: 1.2.8
node-fetch: 2.7.0
readable-stream: 3.6.2
@@ -22449,6 +22938,10 @@ packages:
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
engines: {node: '>= 12.13.0'}
+ /redaxios@0.5.1:
+ resolution: {integrity: sha512-FSD2AmfdbkYwl7KDExYQlVvIrFz6Yd83pGfaGjBzM9F6rpq8g652Q4Yq5QD4c+nf4g2AgeElv1y+8ajUPiOYMg==}
+ dev: false
+
/reduce-flatten@2.0.0:
resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==}
engines: {node: '>=6'}
@@ -22941,6 +23434,12 @@ packages:
dependencies:
randombytes: 2.1.0
+ /serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+ dependencies:
+ randombytes: 2.1.0
+ dev: true
+
/serve-static@1.15.0:
resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
engines: {node: '>= 0.8.0'}
@@ -24103,6 +24602,22 @@ packages:
typescript: 5.5.3
yargs-parser: 21.1.1
+ /ts-mocha@11.1.0(mocha@11.7.1)(ts-node@10.9.2):
+ resolution: {integrity: sha512-yT7FfzNRCu8ZKkYvAOiH01xNma/vLq6Vit7yINKYFNVP8e5UyrYXSOMIipERTpzVKJQ4Qcos5bQo1tNERNZevQ==}
+ engines: {node: '>= 6.X.X'}
+ hasBin: true
+ peerDependencies:
+ mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X
+ ts-node: ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X
+ tsconfig-paths: ^4.X.X
+ peerDependenciesMeta:
+ tsconfig-paths:
+ optional: true
+ dependencies:
+ mocha: 11.7.1
+ ts-node: 10.9.2(@types/node@24.2.0)(typescript@5.5.3)
+ dev: true
+
/ts-morph@21.0.1:
resolution: {integrity: sha512-dbDtVdEAncKctzrVZ+Nr7kHpHkv+0JDJb2MjjpBaj8bFeCkePU9rHfMklmhuLFnpeq/EJZk2IhStY6NzqgjOkg==}
dependencies:
@@ -24171,6 +24686,37 @@ packages:
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
+ /ts-node@10.9.2(@types/node@24.2.0)(typescript@5.5.3):
+ resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.9
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 24.2.0
+ acorn: 8.11.3
+ acorn-walk: 8.3.2
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.5.3
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+ dev: true
+
/tsconfig-paths@3.15.0:
resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
dependencies:
@@ -24299,7 +24845,7 @@ packages:
cac: 6.7.14
chokidar: 4.0.3
consola: 3.4.2
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
esbuild: 0.25.3
joycon: 3.1.1
picocolors: 1.1.1
@@ -24329,6 +24875,17 @@ packages:
typescript: 5.5.3
dev: true
+ /tsx@4.20.3:
+ resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+ dependencies:
+ esbuild: 0.25.3
+ get-tsconfig: 4.10.1
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
/tunnel-agent@0.6.0:
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
dependencies:
@@ -24461,7 +25018,7 @@ packages:
typescript: '>=4.3.0'
dependencies:
'@types/prettier': 2.7.3
- debug: 4.4.0
+ debug: 4.4.0(supports-color@8.1.1)
fs-extra: 7.0.1
glob: 7.1.7
js-sha3: 0.8.0
@@ -24567,6 +25124,10 @@ packages:
/undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+ /undici-types@7.10.0:
+ resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==}
+ dev: true
+
/undici@5.28.2:
resolution: {integrity: sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==}
engines: {node: '>=14.0'}
@@ -24730,6 +25291,29 @@ packages:
core-util-is: 1.0.2
extsprintf: 1.3.0
+ /viem@2.33.3(typescript@5.5.3):
+ resolution: {integrity: sha512-aWDr6i6r3OfNCs0h9IieHFhn7xQJJ8YsuA49+9T5JRyGGAkWhLgcbLq2YMecgwM7HdUZpx1vPugZjsShqNi7Gw==}
+ peerDependencies:
+ typescript: '>=5.0.4'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@noble/curves': 1.9.2
+ '@noble/hashes': 1.8.0
+ '@scure/bip32': 1.7.0
+ '@scure/bip39': 1.6.0
+ abitype: 1.0.8(typescript@5.5.3)
+ isows: 1.0.7(ws@8.18.2)
+ ox: 0.8.6(typescript@5.5.3)
+ typescript: 5.5.3
+ ws: 8.18.2
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+ - zod
+ dev: false
+
/walker@1.0.8:
resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
dependencies:
@@ -25156,6 +25740,10 @@ packages:
/workerpool@6.2.1:
resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==}
+ /workerpool@9.3.3:
+ resolution: {integrity: sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw==}
+ dev: true
+
/wrap-ansi@2.1.0:
resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==}
engines: {node: '>=0.10.0'}
@@ -25286,6 +25874,19 @@ packages:
bufferutil: 4.0.8
utf-8-validate: 5.0.10
+ /ws@8.18.2:
+ resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ dev: false
+
/xhr-request-promise@0.1.3:
resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==}
dependencies:
diff --git a/turbo.json b/turbo.json
index 3e1145ebdd..74ae93e62c 100644
--- a/turbo.json
+++ b/turbo.json
@@ -60,6 +60,7 @@
"LZ_ENABLE_UPGRADEABLE_EXAMPLE",
"LZ_ENABLE_ALT_EXAMPLE",
"LZ_ENABLE_MIGRATION_EXAMPLE",
+ "LZ_ENABLE_OVAULT_EXAMPLE",
"LZ_METADATA_URL",
"LZ_ENABLE_EXPERIMENTAL_APTOS_EXAMPLES",
"LZ_ENABLE_EXPERIMENTAL_MOVE_VM_EXAMPLES",