blocklock-js
Version:
A library for encrypting and decrypting data for the future
644 lines (642 loc) • 156 kB
text/typescript
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import {
Contract,
ContractFactory,
ContractTransactionResponse,
Interface,
} from "ethers";
import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers";
import type { NonPayableOverrides } from "../../common";
import type {
BlocklockTest,
BlocklockTestInterface,
} from "../../Blocklock.t.sol/BlocklockTest";
const _abi = [
{
type: "function",
name: "ADMIN_ROLE",
inputs: [],
outputs: [
{
name: "",
type: "bytes32",
internalType: "bytes32",
},
],
stateMutability: "view",
},
{
type: "function",
name: "IS_TEST",
inputs: [],
outputs: [
{
name: "",
type: "bool",
internalType: "bool",
},
],
stateMutability: "view",
},
{
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: "failed",
inputs: [],
outputs: [
{
name: "",
type: "bool",
internalType: "bool",
},
],
stateMutability: "view",
},
{
type: "function",
name: "setUp",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
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_CallsToBlocklockSender_ShouldRevert_IfBlocklockSenderAddressIsIncorrect",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "test_Deployment_Configurations",
inputs: [],
outputs: [],
stateMutability: "view",
},
{
type: "function",
name: "test_EstimatedRequestPrice_Increases_WithCallbackGasLimit",
inputs: [],
outputs: [],
stateMutability: "view",
},
{
type: "function",
name: "test_EstimatedRequestPrice_Increases_WithGasPrice",
inputs: [],
outputs: [],
stateMutability: "view",
},
{
type: "function",
name: "test_Update_SignatureScheme",
inputs: [],
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,
},
] as const;
const _bytecode =
"0x600c8054600160ff199182168117909255601f8054909116909117905560c0604052601360809081527f424e3235342d424c532d424c4f434b4c4f434b0000000000000000000000000060a0526023906100599082610234565b50604080516080810182527f2691d39ecc380bfa873911a0b848c77556ee948fb8ab649137d3d3e78153f6ca8183019081527f2863e20a5125b098108a5061b31f405e16a069e9ebff60022f57f4c4fd0237bf6060830152815281518083019092527f193513dbe180d700b189c529754f650b7b7882122c8a1e242a938d23ea9f765c82527f11c939ea560caf31f552c9c4879b15865d38ba1dfb0f7a7d2ac46a4f0cae25ba6020838101919091528101919091528051602490610120908290600261014a565b506020820151610136906002808401919061014a565b505050348015610144575f5ffd5b506102ee565b8260028101928215610178579160200282015b8281111561017857825182559160200191906001019061015d565b50610184929150610188565b5090565b5b80821115610184575f8155600101610189565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806101c457607f821691505b6020821081036101e257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561022f57805f5260205f20601f840160051c8101602085101561020d5750805b601f840160051c820191505b8181101561022c575f8155600101610219565b50505b505050565b81516001600160401b0381111561024d5761024d61019c565b6102618161025b84546101b0565b846101e8565b6020601f821160018114610293575f831561027c5750848201515b5f19600385901b1c1916600184901b17845561022c565b5f84815260208120601f198516915b828110156102c257878501518255602094850194600190920191016102a2565b50848210156102df57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6201135b80620002fd5f395ff3fe608060405234801561000f575f5ffd5b506004361061011c575f3560e01c80637b805258116100a9578063ba414fa61161006e578063ba414fa614610209578063e20c9f7114610221578063edf06c3814610229578063fa7626d414610231578063fcf6760e1461023e575f5ffd5b80637b805258146101c757806385226c81146101cf578063916a17c6146101e4578063b0464fdc146101f9578063b5508aa914610201575f5ffd5b80633f7286f4116100ef5780633f7286f41461016557806353aee9401461016d578063658e17261461017557806366d9a9a01461017d57806375b238fc14610192575f5ffd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b5f5ffd5b610128610246565b005b6101326102e5565b60405161013f919061294b565b60405180910390f35b610150610345565b60405161013f91906129c4565b610132610481565b6101326104df565b61012861053d565b610128610661565b610185610a06565b60405161013f9190612ad1565b6101b97fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b60405190815260200161013f565b610128610b6a565b6101d7610c79565b60405161013f9190612b4f565b6101ec610d44565b60405161013f9190612ba6565b6101ec610e25565b6101d7610f06565b610211610fd1565b604051901515815260200161013f565b61013261106b565b6101286110c9565b601f546102119060ff1681565b61012861175e565b61024e61194b565b610256611953565b602c80546001600160a01b03199081166001600160a01b0393841617909155602b8054821693831693909317909255602a8054831693821693909317909255602980548216938316939093179092556028805490921692169190911790556207a12062061a80620f4240622dc6c0620c3500600a6113886102dc87878787878787612061565b50505050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561033b57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161031d575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015610478575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610461578382905f5260205f200180546103d690612c1d565b80601f016020809104026020016040519081016040528092919081815260200182805461040290612c1d565b801561044d5780601f106104245761010080835404028352916020019161044d565b820191905f5260205f20905b81548152906001019060200180831161043057829003601f168201915b5050505050815260200190600101906103b9565b505050508152505081526020019060010190610368565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561033b57602002820191905f5260205f209081546001600160a01b0316815260019091019060200180831161031d575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561033b57602002820191905f5260205f209081546001600160a01b0316815260019091019060200180831161031d575050505050905090565b602b5460405163192ae22b60e11b8152620186a060048201819052606460248301819052909290915f916001600160a01b031690633255c45690604401602060405180830381865afa158015610595573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b99190612c55565b602b5460405163192ae22b60e11b815263ffffffff8616600482015260c860248201819052945091925061065c916001600160a01b0390911690633255c45690604401602060405180830381865afa158015610617573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063b9190612c55565b8210604051806080016040528060478152602001620112df60479139612163565b505050565b602a54601f54604051632474521560e21b81527fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177560048201526101009091046001600160a01b0390811660248301526107039216906391d1485490604401602060405180830381865afa1580156106da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106fe9190612c6c565b6121be565b6028546001600160a01b031661071b5761071b612c92565b6029546001600160a01b031661073357610733612c92565b602a546001600160a01b031661074b5761074b612c92565b602b546001600160a01b031661076357610763612c92565b602c546001600160a01b031661077b5761077b612c92565b602a546040805163e6b3ca7160e01b815290515f926001600160a01b03169163e6b3ca719160048083019260209291908290030181865afa1580156107c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107e69190612cba565b6001600160a01b0316036107fc576107fc612c92565b60295460408051632fbe3a9160e11b81529051610870926001600160a01b031691635f7c7522916004808301925f9291908290030181865afa158015610844573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261086b9190810190612ce9565b612214565b60295460408051632fbe3a9160e11b815290516108e4926001600160a01b031691635f7c7522916004808301925f9291908290030181865afa1580156108b8573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108df9190810190612ce9565b61225a565b602b546040805163235296f760e01b8152905161092c926001600160a01b03169163235296f7916004808301925f9291908290030181865afa1580156108b8573d5f5f3e3d5ffd5b602b5460408051631c613e8960e11b81529051610974926001600160a01b0316916338c27d12916004808301925f9291908290030181865afa1580156108b8573d5f5f3e3d5ffd5b602b54604080516339a87a2b60e11b815290516109bc926001600160a01b031691637350f456916004808301925f9291908290030181865afa1580156108b8573d5f5f3e3d5ffd5b602b54604080516367b276af60e01b81529051610a04926001600160a01b0316916367b276af916004808301925f9291908290030181865afa1580156108b8573d5f5f3e3d5ffd5b565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015610478578382905f5260205f2090600202016040518060400160405290815f82018054610a5990612c1d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8590612c1d565b8015610ad05780601f10610aa757610100808354040283529160200191610ad0565b820191905f5260205f20905b815481529060010190602001808311610ab357829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610b5257602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411610b145790505b50505050508152505081526020019060010190610a29565b602b54604051634b16093560e01b8152620186a060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015610bb8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdc9190612c55565b602b54604051634b16093560e01b815262030d40600482018190529450919250610c75916001600160a01b0390911690634b16093590602401602060405180830381865afa158015610c30573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c549190612c55565b82106040518060800160405280604781526020016201121360479139612163565b5050565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015610478578382905f5260205f20018054610cb990612c1d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce590612c1d565b8015610d305780601f10610d0757610100808354040283529160200191610d30565b820191905f5260205f20905b815481529060010190602001808311610d1357829003601f168201915b505050505081526020019060010190610c9c565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015610478575f8481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015610e0d57602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411610dcf5790505b50505050508152505081526020019060010190610d67565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015610478575f8481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015610eee57602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411610eb05790505b50505050508152505081526020019060010190610e48565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015610478578382905f5260205f20018054610f4690612c1d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7290612c1d565b8015610fbd5780601f10610f9457610100808354040283529160200191610fbd565b820191905f5260205f20905b815481529060010190602001808311610fa057829003601f168201915b505050505081526020019060010190610f29565b6008545f9060ff1615610fe8575060085460ff1690565b604051630667f9d760e41b81525f5160206201116b5f395f51905f52600482018190526519985a5b195960d21b60248301525f9163667f9d7090604401602060405180830381865afa158015611040573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110649190612c55565b1415905090565b6060601580548060200260200160405190810160405280929190818152602001828054801561033b57602002820191905f5260205f209081546001600160a01b0316815260019091019060200180831161031d575050505050905090565b60408051808201909152600581526410938c8d4d60da1b60208201525f6110ef8261229d565b90506111295f6001600160a01b0316826001600160a01b03161415604051806060016040528060258152602001620111ee60259139612163565b611158816001600160a01b03163b5f146040518060600160405280602381526020016201118b60239139612163565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156111ac575f5ffd5b505af11580156111be573d5f5f3e3d5ffd5b505060405163f28dceb360e01b81525f5160206201116b5f395f51905f52925063f28dceb391506111f190600401612d9c565b5f604051808303815f87803b158015611208575f5ffd5b505af115801561121a573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da91506112509085908590600401612de6565b5f604051808303815f87803b158015611267575f5ffd5b505af1158015611279573d5f5f3e3d5ffd5b50506029546040805160608101909152602d8082526001600160a01b0390921694506112b49350841515925090620112b26020830139612163565b6112e35f826001600160a01b03163b116040518060600160405280602381526020016201125a60239139612163565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611337575f5ffd5b505af1158015611349573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da915061137f9085908590600401612de6565b5f604051808303815f87803b158015611396575f5ffd5b505af11580156113a8573d5f5f3e3d5ffd5b5050602854604051630b76139f60e31b815261143293506001600160a01b03858116935090911690635bb09cf8906113e4908790600401612e0f565b602060405180830381865afa1580156113ff573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114239190612cba565b6001600160a01b0316146121be565b50602b54601f5460405163ca669fa760e01b81526001600160a01b03610100909204821660048201529116905f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561148e575f5ffd5b505af11580156114a0573d5f5f3e3d5ffd5b505060405163f28dceb360e01b815260206004820152602160248201527f536368656d6520616c726561647920616464656420666f7220736368656d65496044820152601160fa1b60648201525f5160206201116b5f395f51905f52925063f28dceb391506084015f604051808303815f87803b15801561151f575f5ffd5b505af1158015611531573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da91506115679085908590600401612de6565b5f604051808303815f87803b15801561157e575f5ffd5b505af1158015611590573d5f5f3e3d5ffd5b5050602854604051630b76139f60e31b815261163593506001600160a01b03858116935090911690635bb09cf8906115cc908790600401612e0f565b602060405180830381865afa1580156115e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160b9190612cba565b6001600160a01b031614156040518060600160405280603581526020016201127d60359139612163565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611689575f5ffd5b505af115801561169b573d5f5f3e3d5ffd5b505060405163f28dceb360e01b81525f5160206201116b5f395f51905f52925063f28dceb391506116ce90600401612d9c565b5f604051808303815f87803b1580156116e5575f5ffd5b505af11580156116f7573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da915061172d9085905f90600401612de6565b5f604051808303815f87803b158015611744575f5ffd5b505af1158015611756573d5f5f3e3d5ffd5b505050505050565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156117ae575f5ffd5b505af11580156117c0573d5f5f3e3d5ffd5b50505050601f60019054906101000a90046001600160a01b03166040516117e6906128a5565b6001600160a01b039091168152602001604051809103905ff08015801561180f573d5f5f3e3d5ffd5b50602c80546001600160a01b0319166001600160a01b0392831617905560205460405163ca669fa760e01b8152911660048201525f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611873575f5ffd5b505af1158015611885573d5f5f3e3d5ffd5b505050505f5160206201116b5f395f51905f526001600160a01b031663f48448146040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156118cf575f5ffd5b505af11580156118e1573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba75f6040518263ffffffff1660e01b81526004015f604051808303818588803b158015611932575f5ffd5b505af1158015611944573d5f5f3e3d5ffd5b5050505050565b610a046122ae565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f9081908190819081905f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156119b1575f5ffd5b505af11580156119c3573d5f5f3e3d5ffd5b505050505f6040516119d4906128b3565b604051809103905ff0801580156119ed573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611a45575f5ffd5b505af1158015611a57573d5f5f3e3d5ffd5b505050505f81604051611a69906128c1565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff080158015611aa0573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529095508591505f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611afb575f5ffd5b505af1158015611b0d573d5f5f3e3d5ffd5b505050505f604051611b1e906128cf565b604051809103905ff080158015611b37573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611b8f575f5ffd5b505af1158015611ba1573d5f5f3e3d5ffd5b505050505f81604051611bb3906128c1565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff080158015611bea573d5f5f3e3d5ffd5b5060205460405163ca669fa760e01b81526001600160a01b0390911660048201529096508691505f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611c41575f5ffd5b505af1158015611c53573d5f5f3e3d5ffd5b5050505080604051611c64906128a5565b6001600160a01b039091168152602001604051809103905ff080158015611c8d573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529095505f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611ce5575f5ffd5b505af1158015611cf7573d5f5f3e3d5ffd5b50505050601f60019054906101000a90046001600160a01b0316604051611d1d906128dd565b6001600160a01b039091168152602001604051809103905ff080158015611d46573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529099505f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611d9e575f5ffd5b505af1158015611db0573d5f5f3e3d5ffd5b50506040516024925060269150611dc6906128eb565b611dd1929190612e49565b604051809103905ff080158015611dea573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529098505f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611e42575f5ffd5b505af1158015611e54573d5f5f3e3d5ffd5b5050604051635d5c33ed60e11b81526001600160a01b038c16925063bab867da9150611e87906023908c90600401612e64565b5f604051808303815f87803b158015611e9e575f5ffd5b505af1158015611eb0573d5f5f3e3d5ffd5b5050601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201116b5f395f51905f52925063ca669fa791506024015f604051808303815f87803b158015611f08575f5ffd5b505af1158015611f1a573d5f5f3e3d5ffd5b5050601f5460405163485cc95560e01b81526101009091046001600160a01b0390811660048301528c811660248301528a16925063485cc95591506044015f604051808303815f87803b158015611f6f575f5ffd5b505af1158015611f81573d5f5f3e3d5ffd5b5050601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201116b5f395f51905f52925063ca669fa791506024015f604051808303815f87803b158015611fd9575f5ffd5b505af1158015611feb573d5f5f3e3d5ffd5b5050601f5460405163485cc95560e01b81526101009091046001600160a01b0390811660048301528a811660248301528916925063485cc95591506044015f604051808303815f87803b158015612040575f5ffd5b505af1158015612052573d5f5f3e3d5ffd5b50505050505050509091929394565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201116b5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156120b5575f5ffd5b505af11580156120c7573d5f5f3e3d5ffd5b5050602b5460405163117e90d560e21b815263ffffffff808c166004830152808b166024830152808a1660448301528089166064830152808816608483015260ff871660a4830152851660c48201526001600160a01b0390911692506345fa4354915060e4015f604051808303815f87803b158015612144575f5ffd5b505af1158015612156573d5f5f3e3d5ffd5b5050505050505050505050565b60405163a34edc0360e01b81525f5160206201116b5f395f51905f529063a34edc03906121969085908590600401612ef9565b5f6040518083038186803b1580156121ac575f5ffd5b505afa158015611756573d5f5f3e3d5ffd5b604051630c9fd58160e01b815281151560048201525f5160206201116b5f395f51905f5290630c9fd581906024015f6040518083038186803b158015612202575f5ffd5b505afa158015611944573d5f5f3e3d5ffd5b612257816040516024016122289190612e0f565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b1790526124e7565b50565b6122578160405160240161226e9190612e0f565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b1790526124e7565b5f6122a7826124f0565b5092915050565b6122d46040518060400160405280600581526020016430b236b4b760d91b81525061229d565b601f60016101000a8154816001600160a01b0302191690836001600160a01b0316021790555061232060405180604001604052806005815260200164616c69636560d81b81525061229d565b60205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550612369604051806040016040528060038152602001623137b160e91b81525061229d565b602180546001600160a01b0319166001600160a01b03928316179055601f5460405163c88a5e6d60e01b81526101009091049091166004820152678ac7230489e8000060248201525f5160206201116b5f395f51905f529063c88a5e6d906044015f604051808303815f87803b1580156123e1575f5ffd5b505af11580156123f3573d5f5f3e3d5ffd5b505060205460405163c88a5e6d60e01b81526001600160a01b039091166004820152678ac7230489e8000060248201525f5160206201116b5f395f51905f52925063c88a5e6d91506044015f604051808303815f87803b158015612455575f5ffd5b505af1158015612467573d5f5f3e3d5ffd5b505060215460405163c88a5e6d60e01b81526001600160a01b039091166004820152678ac7230489e8000060248201525f5160206201116b5f395f51905f52925063c88a5e6d91506044015f604051808303815f87803b1580156124c9575f5ffd5b505af11580156124db573d5f5f3e3d5ffd5b50505050610a046125f2565b61225781612886565b5f5f826040516020016125039190612f1b565b60408051808303601f190181529082905280516020909101206001625e79b760e01b031982526004820181905291505f5160206201116b5f395f51905f529063ffa1864990602401602060405180830381865afa158015612566573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061258a9190612cba565b6040516318caf8e360e31b81529092505f5160206201116b5f395f51905f529063c657c718906125c09085908790600401612f31565b5f604051808303815f87803b1580156125d7575f5ffd5b505af11580156125e9573d5f5f3e3d5ffd5b50505050915091565b6040805160e0810182527f220c292a8d5482f0afc107989582021eb9d86fe3e75dbb7bcb749f30861c9f8f60a082019081527f14a3cdb4fec6d3ebb0ad2b5a943fdef4a458e6ac8bc6ff321afa898b4158ff5b60c08301526060808301918252835180850185527f269cdb66a4daaf03aeda655342cc38e431a83a914fcdf4daf73e4f6fde7729ac81527f2610ed6679d7a57287cf5d21045063efda28037e5b555d9103f60b83c5cee1ca6020828101919091526080850191909152918352835180850185528281527f54b744fa0514a42e8e8bf8a23a0c619e059fbc072d1774f5c4d389a218dce7f18184015282840152835180850185528281527fc0884030be948e1477202760f15f302c56fd9e22e39cb0afb21e9a2140d363d48184015283850152835190810184528381526729a2241af62c0000935f92620111ae9083013990505f6040518060400160405280602081526020017f948918d64af8e911c98d62c282764bed2488a47797a31e711956a6e87846efa781525090506040518060a0016040528085815260200160126040516020016127b191906040808252600190820152602160f91b6060820152602081019190915260800190565b60408051601f19818403018152918152908252602082810187905282820186905260609092018490525f8781526022835220825181559082015160018201906127fa9082612f98565b506040820151805180516002808501929183916128189183916128f9565b50602082015161282e90600280840191906128f9565b505050602082015160048201906128459082612f98565b506040820151600582019061285a9082612f98565b505050606082015160088201906128719082612f98565b50608082015160098201906102dc9082612f98565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b611c54806200305483390190565b6132ea8062004ca883390190565b61042b8062007f9283390190565b615be780620083bd83390190565b6109e0806200dfa483390190565b6127e7806200e98483390190565b8260028101928215612927579160200282015b8281111561292757825182559160200191906001019061290c565b50612933929150612937565b5090565b5b80821115612933575f8155600101612938565b602080825282518282018190525f918401906040840190835b8181101561298b5783516001600160a01b0316835260209384019390920191600101612964565b509095945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612a8157603f19878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b81811015612a6757605f198a8503018352612a51848651612996565b6020958601959094509290920191600101612a35565b5091975050506020948501949290920191506001016129ea565b50929695505050505050565b5f8151808452602084019350602083015f5b82811015612ac75781516001600160e01b031916865260209586019590910190600101612a9f565b5093949350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612a8157603f198786030184528151805160408752612b1d6040880182612996565b9050602082015191508681036020880152612b388183612a8d565b965050506020938401939190910190600101612af7565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612a8157603f19878603018452612b91858351612996565b94506020938401939190910190600101612b75565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612a8157868503603f19018452815180516001600160a01b03168652602090810151604091870182905290612c0790870182612a8d565b9550506020938401939190910190600101612bcc565b600181811c90821680612c3157607f821691505b602082108103612c4f57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612c65575f5ffd5b5051919050565b5f60208284031215612c7c575f5ffd5b81518015158114612c8b575f5ffd5b9392505050565b634e487b7160e01b5f52600160045260245ffd5b6001600160a01b0381168114612257575f5ffd5b5f60208284031215612cca575f5ffd5b8151612c8b81612ca6565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215612cf9575f5ffd5b815167ffffffffffffffff811115612d0f575f5ffd5b8201601f81018413612d1f575f5ffd5b805167ffffffffffffffff811115612d3957612d39612cd5565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715612d6857612d68612cd5565b604052818152828201602001861015612d7f575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b6020808252602a908201527f496e76616c696420636f6e7472616374206164647265737320666f7220736368604082015269656d654164647265737360b01b606082015260800190565b604081525f612df86040830185612996565b905060018060a01b03831660208301529392505050565b602081525f612c8b6020830184612996565b805f5b6002811015612e43578154845260209093019260019182019101612e24565b50505050565b60808101612e578285612e21565b612c8b6040830184612e21565b604081525f5f8454612e7581612c1d565b806040860152600182165f8114612e935760018114612eaf57612ee0565b60ff1983166060870152606082151560051b8701019350612ee0565b875f5260205f205f5b83811015612ed757815488820160600152600190910190602001612eb8565b87016060019450505b5050506001600160a01b03841660208401529050612c8b565b8215158152604060208201525f612f136040830184612996565b949350505050565b5f82518060208501845e5f920191825250919050565b6001600160a01b03831681526040602082018190525f90612f1390830184612996565b601f82111561065c57805f5260205f20601f840160051c81016020851015612f795750805b601f840160051c820191505b81811015611944575f8155600101612f85565b815167ffffffffffffffff811115612fb257612fb2612cd5565b612fc681612fc08454612c1d565b84612f54565b6020601f821160018114612ff8575f8315612fe15750848201515b5f19600385901b1c1916600184901b178455611944565b5f84815260208120601f198516915b828110156130275787850151825560209485019460019092019101613007565b508482101561304457868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fe608060405234801561000f575f5ffd5b50604051611c54380380611c5483398101604081905261002e91610186565b8033805f816100845760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b3576100b3816100de565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506101b39050565b336001600160a01b038216036101365760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007b565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f60208284031215610196575f5ffd5b81516001600160a01b03811681146101ac575f5ffd5b9392505050565b611a94806101c05f395ff3fe608060405260043610610133575f3560e01c806380980043116100a857806397a9c2851161006d57806397a9c28514610366578063b8ca8dd81461037b578063b96dbba71461039a578063cd802c91146103a2578063e64a66ea146103c1578063f2fde38b146103c9575f5ffd5b806380980043146102b657806386e560be146102d55780638da5cb5b146102f857806393b9740a1461032857806393d81d5814610347575f5ffd5b806341af6c87116100f957806341af6c87146101ee5780634d3de3531461021d5780634fa26d401461023c57806359608fda1461025b5780635d9418021461028357806379ba5097146102a2575f5ffd5b80626d6cae1461017657806309c1ba2e1461019e57806312065fe0146101b35780631d2b2afd146101c557806336bfffed146101cf575f5ffd5b3661017257604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b5f5ffd5b348015610181575f5ffd5b5061018b60045481565b6040519081526020015b60405180910390f35b3480156101a9575f5ffd5b5061018b60035481565b3480156101be575f5ffd5b504761018b565b6101cd6103e8565b005b3480156101da575f5ffd5b506101cd6101e9366004611313565b61048f565b3480156101f9575f5ffd5b5061020d610208366004611384565b61058c565b6040519015158152602001610195565b348015610228575f5ffd5b5061018b6102373660046113e0565b6105fe565b348015610247575f5ffd5b506101cd610256366004611483565b610664565b61026e6102693660046113e0565b6106ee565b60408051928352602083019190915201610195565b34801561028e575f5ffd5b506101cd61029d3660046114a3565b61075c565b3480156102ad575f5ffd5b506101cd6107c1565b3480156102c1575f5ffd5b506101cd6102d0366004611384565b61086a565b3480156102e0575f5ffd5b506102e96108a4565b6040516101959392919061155e565b348015610303575f5ffd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610195565b348015610333575f5ffd5b50600254610310906001600160a01b031681565b348015610352575f5ffd5b506101cd610361366004611483565b610a30565b348015610371575f5ffd5b5061018b600b5481565b348015610386575f5ffd5b506101cd610395366004611599565b610a44565b6101cd610b17565b3480156103ad575f5ffd5b5061020d6103bc366004611384565b610b5e565b6101cd610b8f565b3480156103d4575f5ffd5b506101cd6103e3366004611483565b610c0e565b6003545f0361042c5760405162461bcd60e51b815260206004820152600b60248201526a1cdd58881b9bdd081cd95d60aa1b60448201526064015b60405180910390fd5b60025460035460405163256d573f60e21b815260048101919091526001600160a01b03909116906395b55cfc9034906024015b5f604051808303818588803b158015610476575f5ffd5b505af1158015610488573d5f5f3e3d5ffd5b5050505050565b610497610c1f565b6003545f036104d85760405162461bcd60e51b815260206004820152600d60248201526c1cdd589251081b9bdd081cd95d609a1b6044820152606401610423565b5f5b81811015610587576002546003546001600160a01b039091169063bec4c08c9085858581811061050c5761050c6115c3565b90506020020160208101906105219190611483565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f604051808303815f87803b158015610565575f5ffd5b505af1158015610577573d5f5f3e3d5ffd5b5050600190920191506104da9050565b505050565b6002546040516341af6c8760e01b8152600481018390525f916001600160a01b0316906341af6c87906024015b602060405180830381865afa1580156105d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105f891906115d7565b92915050565b5f5f6106418686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610c73915050565b600481905590508260056106558282611783565b50506004549695505050505050565b61066c610c1f565b6001600160a01b0381166106cc5760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574207a65726f20616464726573732061732073656e64656044820152603960f91b6064820152608401610423565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f5f5f6107338888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250610cf1915050565b6004829055909250905084600561074a8282611783565b50506004549890975095505050505050565b6002546001600160a01b031633146107b65760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920626c6f636b6c6f636b20636f6e74726163742063616e2063616c6c6044820152606401610423565b610587838383610e2b565b6001546001600160a01b031633146108145760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610423565b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610872610c1f565b600381905560405181907f5f479ac993925efae23839aa1c813b6ecb2fe1bbd14dc78295ab267d2fca4368905f90a250565b604080516080810180835260059283918391820190839060029082845b8154815260200190600101908083116108c157505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116108f757505050505081525050908060040180546109239061164d565b80601f016020809104026020016040519081016040528092919081815260200182805461094f9061164d565b801561099a5780601f106109715761010080835404028352916020019161099a565b820191905f5260205f20905b81548152906001019060200180831161097d57829003601f168201915b5050505050908060050180546109af9061164d565b80601f01602080910402602001604051908101604052809291908181526020018280546109db9061164d565b8015610a265780601f106109fd57610100808354040283529160200191610a26565b820191905f5260205f20905b815481529060010190602001808311610a0957829003601f168201915b5050505050905083565b610a38610c1f565b610a4181611033565b50565b610a4c610c1f565b81471015610a9c5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320696e20636f6e747261637400006044820152606401610423565b6040516001600160a01b0382169083156108fc029084905f818181858888f19350505050158015610acf573d5f5f3e3d5ffd5b50806001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610b0b91815260200190565b60405180910390a25050565b610b1f610c1f565b610b276110cb565b600381905560025460405163256d573f60e21b815260048101929092526001600160a01b0316906395b55cfc90349060240161045f565b60025460405163cd802c9160e01b8152600481018390525f916001600160a01b03169063cd802c91906024016105b9565b5f3411610bd75760405162461bcd60e51b81526020600482015260166024820152750b2deea40daeae6e840e6cadcc840e6dedaca408aa8960531b6044820152606401610423565b60405134815233907f5af8184bef8e4b45eb9f6ed7734d04da38ced226495548f46e0c8ff8d7d9a5249060200160405180910390a2565b610c16610c1f565b610a41816111f5565b5f546001600160a01b03163314610c715760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610423565b565b6002546003546040516262b1d960e41b81525f926001600160a01b03169163062b1d9091610ca9918891889088906004016118c4565b6020604051808303815f875af1158015610cc5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce99190611905565b949350505050565b600254604051634b16093560e01b815263ffffffff851660048201525f9182916001600160a01b0390911690634b16093590602401602060405180830381865afa158015610d41573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d659190611905565b905080341015610daa5760405162461bcd60e51b815260206004820152601060248201526f092dce6eaccccd2c6d2cadce8408aa8960831b6044820152606401610423565b600254604051637909dc7b60e01b81526001600160a01b0390911690637909dc7b903490610de09089908990899060040161191c565b60206040518083038185885af1158015610dfc573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610e219190611905565b9150935093915050565b8260045414610e725760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b2103932b8bab2b9ba1034b21760691b6044820152606401610423565b6040805160e081019091526110189060058160608101828160a084018260028282826020028201915b815481526020019060010190808311610e9b57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311610ed1575050505050815250508152602001600482018054610f019061164d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2d9061164d565b8015610f785780601f10610f4f57610100808354040283529160200191610f78565b820191905f5260205f20905b815481529060010190602001808311610f5b57829003601f168201915b50505050508152602001600582018054610f919061164d565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbd9061164d565b80156110085780601f10610fdf57610100808354040283529160200191611008565b820191905f5260205f20905b815481529060010190602001808311610feb57829003601f168201915b505050505081525050838361129d565b80602001905181019061102b9190611905565b600b55505050565b6003545f0361107d5760405162461bcd60e51b8152602060048201526016602482015275537562736372697074696f6e4964206973207a65726f60501b6044820152606401610423565b600254600354604051622b825560e61b815260048101919091526001600160a01b03838116602483015290911690630ae09540906044015f604051808303815f87803b158015610476575f5ffd5b5f6003545f1461111d5760405162461bcd60e51b815260206004820152601a60248201527f537562736372697074696f6e4964206973206e6f74207a65726f0000000000006044820152606401610423565b60025f9054906101000a90046001600160a01b03166001600160a01b031663a21a23e46040518163ffffffff1660e01b81526004016020604051808303815f875af115801561116e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111929190611905565b600254604051632fb1302360e21b8152600481018390523060248201529192506001600160a01b03169063bec4c08c906044015f604051808303815f87803b1580156111dc575f5ffd5b505af11580156111ee573d5f5f3e3d5ffd5b5050505090565b336001600160a01b0382160361124d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610423565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60025460405163326f063160e21b81526060916001600160a01b03169063c9bc18c4906112d29087908790879060040161194c565b5f60405180830381865afa1580156112ec573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ce991908101906119ab565b5f5f60208385031215611324575f5ffd5b823567ffffffffffffffff81111561133a575f5ffd5b8301601f8101851361134a575f5ffd5b803567ffffffffffffffff811115611360575f5ffd5b8560208260051b8401011115611374575f5ffd5b6020919091019590945092505050565b5f60208284031215611394575f5ffd5b5035919050565b5f5f83601f8401126113ab575f5ffd5b50813567ffffffffffffffff8111156113c2575f5ffd5b6020830191508360208285010111156113d9575f5ffd5b9250929050565b5f5f5f5f606085870312156113f3575f5ffd5b843563ffffffff81168114611406575f5ffd5b9350602085013567ffffffffffffffff811115611421575f5ffd5b61142d8782880161139b565b909450925050604085013567ffffffffffffffff81111561144c575f5ffd5b850160c0818803121561145d575f5ffd5b939692955090935050565b80356001600160a01b038116811461147e575f5ffd5b919050565b5f60208284031215611493575f5ffd5b61149c82611468565b9392505050565b5f5f5f604084860312156114b5575f5ffd5b83359250602084013567ffffffffffffffff8111156114d2575f5ffd5b6114de8682870161139b565b9497909650939450505050565b805f5b600281101561150d5781518452602093840193909101906001016114ee565b50505050565b61151e8282516114eb565b602081015161058760408401826114eb565b5f81518084528060208401602086015e5f602