Files
2026-03-02 12:14:09 -08:00

1062 lines
65 KiB
JSON

{
"_format": "hh-sol-artifact-1",
"contractName": "GRUCCIPBridge",
"sourceName": "contracts/bridge/GRUCCIPBridge.sol",
"abi": [
{
"inputs": [],
"name": "AccessControlBadConfirmation",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "bytes32",
"name": "neededRole",
"type": "bytes32"
}
],
"name": "AccessControlUnauthorizedAccount",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"name": "AddressEmptyCode",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "AddressInsufficientBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "ERC1967InvalidImplementation",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967NonPayable",
"type": "error"
},
{
"inputs": [],
"name": "FailedInnerCall",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [],
"name": "ReentrancyGuardReentrantCall",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "SafeERC20FailedOperation",
"type": "error"
},
{
"inputs": [],
"name": "UUPSUnauthorizedCallContext",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "slot",
"type": "bytes32"
}
],
"name": "UUPSUnsupportedProxiableUUID",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "messageId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint64",
"name": "destinationChain",
"type": "uint64"
},
{
"indexed": false,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "usedPMM",
"type": "bool"
}
],
"name": "BridgeExecuted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": true,
"internalType": "uint64",
"name": "chainSelector",
"type": "uint64"
},
{
"indexed": false,
"internalType": "address",
"name": "receiverBridge",
"type": "address"
}
],
"name": "DestinationAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": true,
"internalType": "uint64",
"name": "chainSelector",
"type": "uint64"
}
],
"name": "DestinationRemoved",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "messageId",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "address",
"name": "sourceToken",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "destToken",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "GRUCrossCurrencyBridge",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "messageId",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "string",
"name": "sourceLayer",
"type": "string"
},
{
"indexed": false,
"internalType": "string",
"name": "targetLayer",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256",
"name": "sourceAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "targetAmount",
"type": "uint256"
}
],
"name": "GRULayerConversion",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "messageId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "uint64",
"name": "sourceChainSelector",
"type": "uint64"
},
{
"indexed": false,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "MessageReceived",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"inputs": [],
"name": "BRIDGE_OPERATOR_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "UPGRADER_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "UPGRADE_INTERFACE_VERSION",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint64",
"name": "chainSelector",
"type": "uint64"
},
{
"internalType": "address",
"name": "receiverBridge",
"type": "address"
}
],
"name": "addDestination",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "assetRegistry",
"outputs": [
{
"internalType": "contract UniversalAssetRegistry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "destinationChain",
"type": "uint64"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "bytes32",
"name": "assetType",
"type": "bytes32"
},
{
"internalType": "bool",
"name": "usePMM",
"type": "bool"
},
{
"internalType": "bool",
"name": "useVault",
"type": "bool"
},
{
"internalType": "bytes",
"name": "complianceProof",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "vaultInstructions",
"type": "bytes"
}
],
"internalType": "struct UniversalCCIPBridge.BridgeOperation",
"name": "op",
"type": "tuple"
}
],
"name": "bridge",
"outputs": [
{
"internalType": "bytes32",
"name": "messageId",
"type": "bytes32"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "string",
"name": "sourceLayer",
"type": "string"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "destinationChain",
"type": "uint64"
},
{
"internalType": "string",
"name": "targetLayer",
"type": "string"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
}
],
"name": "bridgeGRUWithConversion",
"outputs": [
{
"internalType": "bytes32",
"name": "messageId",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "ccipRouter",
"outputs": [
{
"internalType": "contract IRouterClient",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"name": "destinations",
"outputs": [
{
"internalType": "address",
"name": "receiverBridge",
"type": "address"
},
{
"internalType": "bool",
"name": "enabled",
"type": "bool"
},
{
"internalType": "uint256",
"name": "addedAt",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint64",
"name": "chainSelector",
"type": "uint64"
}
],
"name": "getDestination",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "receiverBridge",
"type": "address"
},
{
"internalType": "bool",
"name": "enabled",
"type": "bool"
},
{
"internalType": "uint256",
"name": "addedAt",
"type": "uint256"
}
],
"internalType": "struct UniversalCCIPBridge.Destination",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
}
],
"name": "getUserNonce",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
}
],
"name": "getUserVault",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_assetRegistry",
"type": "address"
},
{
"internalType": "address",
"name": "_ccipRouter",
"type": "address"
},
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "liquidityManager",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "nonces",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "processedMessages",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint64",
"name": "chainSelector",
"type": "uint64"
}
],
"name": "removeDestination",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "callerConfirmation",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_ccipRouter",
"type": "address"
}
],
"name": "setCCIPRouter",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_liquidityManager",
"type": "address"
}
],
"name": "setLiquidityManager",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_vaultFactory",
"type": "address"
}
],
"name": "setVaultFactory",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "upgradeToAndCall",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "userVaults",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "vaultFactory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x60a080604052346100cc57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c166100bd57506001600160401b036002600160401b031982821601610078575b604051612a2990816100d282396080518181816108c0015261097a0152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1388080610059565b63f92ee8a960e01b8152600490fd5b600080fdfe608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c90816301ffc9a7146119fd575080630a5ea438146115af5780630de22984146115865780630fe3472c14610e1a578063248a9ca314610dde5780632958d0311461031c5780632f2ff15d14610d9257806331c1e16a14610d125780633382743814610ce957806336568abe14610ca25780633c1624d414610c5f5780633ccfd60b14610c195780633ea7fbdb14610bd65780634be40fd114610b9b5780634f1ef2861461092a57806352d1902d146108ad57806363673e501461083a5780636834e3a814610776578063704f8848146107b05780637ecebe001461077657806388ba16ab1461074557806391d14854146106eb578063979d7e86146106c2578063a217fddf146106a6578063a6425c3114610607578063ad3cb1cc146105bd578063c0c53b8b146103cc578063d547741f14610380578063d8a06f7314610357578063f2380a081461031c578063f72c0d8b146102e15763fa29f5261461018a573861000f565b346102dc5760603660031901126102dc576101a3611a50565b6101ab611abf565b906101b4611a7c565b906101bd612520565b6001600160a01b039081169182156102aa578116908115610275577f204fe11fb8c7a51e768e894685e74e8fe9e8741492ea62d715826577a7a40eb59160209160016040519161020c83611ad5565b838352848301828152604084019142835288600052600487526001600160401b0360406000209a16998a6000528752604060002094511684549160ff60a01b9051151560a01b16916affffffffffffffffffffff60a81b161717835551910155604051908152a3005b60405162461bcd60e51b815260206004820152600d60248201526c2d32b937903932b1b2b4bb32b960991b6044820152606490fd5b60405162461bcd60e51b815260206004820152600a6024820152692d32b937903a37b5b2b760b11b6044820152606490fd5b600080fd5b346102dc5760003660031901126102dc5760206040517f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e38152f35b346102dc5760203660031901126102dc5760206001600160a01b0380610340611a50565b166000526005825260406000205416604051908152f35b346102dc5760003660031901126102dc576003546040516001600160a01b039091168152602090f35b346102dc5760403660031901126102dc5761001b60043561039f611a66565b90806000526000805160206129b48339815191526020526103c760016040600020015461257c565b61280c565b346102dc5760603660031901126102dc576103e5611a50565b6103ed611a66565b6103f5611a7c565b917ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009182549360ff8560401c1615926001600160401b038616958615806105b6575b600180981490816105ac575b1590816105a3575b506105915767ffffffffffffffff1981168717865584610572575b5061046f6128ef565b6104776128ef565b61047f6128ef565b856000805160206129d4833981519152556104986128ef565b6001600160a01b0390811690811561053d576104eb936bffffffffffffffffffffffff60a01b92836000541617600055169081610530575b50506104db816125af565b506104e58161263d565b506126ed565b506104f257005b805468ff0000000000000000191690556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b86541617855585806104d0565b60405162461bcd60e51b815260206004820152600d60248201526c5a65726f20726567697374727960981b6044820152606490fd5b68ffffffffffffffffff19166801000000000000000117855586610466565b60405163f92ee8a960e01b8152600490fd5b9050158861044b565b303b159150610443565b5084610437565b346102dc5760003660031901126102dc576106036040516105dd81611b26565b60058152640352e302e360dc1b6020820152604051918291602083526020830190611bf2565b0390f35b346102dc5760403660031901126102dc576060610622611a50565b61062a611abf565b610632611f16565b5060018060a01b0380921660005260046020526001600160401b03604060002091166000526020526040600020906040519061066d82611ad5565b6040600184549283169485855260ff602086019460a01c1615158452015492019182526040519283525115156020830152516040820152f35b346102dc5760003660031901126102dc57602060405160008152f35b346102dc5760003660031901126102dc576000546040516001600160a01b039091168152602090f35b346102dc5760403660031901126102dc57610704611a66565b6004356000526000805160206129b483398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b346102dc5760203660031901126102dc576004356000526006602052602060ff604060002054166040519015158152f35b346102dc5760203660031901126102dc576001600160a01b03610797611a50565b1660005260076020526020604060002054604051908152f35b346102dc5760403660031901126102dc576107c9611a50565b6107d1611abf565b906107da612520565b6001600160a01b031660008181526004602090815260408083206001600160401b0395909516808452949091528120805460ff60a01b191690557fcd50155673a3d71145772f9857052edc738a9ef46a69a04f1fed833f1708fb099080a3005b346102dc5760403660031901126102dc576060610855611a50565b61085d611abf565b60018060a01b0380921660005260046020526001600160401b0360406000209116600052602052604060002060ff6001825492015491604051938116845260a01c16151560208301526040820152f35b346102dc5760003660031901126102dc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036109185760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60405163703e46dd60e11b8152600490fd5b60403660031901126102dc5761093e611a50565b60249081356001600160401b0381116102dc57366023820112156102dc5761096f9036908481600401359101611b98565b6001600160a01b03917f00000000000000000000000000000000000000000000000000000000000000008316308114908115610b6d575b50610918573360009081527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860209081526040909120549093907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e39060ff1615610b5057508116926040516352d1902d60e01b81528181600481885afa60009181610b21575b50610a4957604051634c9c8ce360e01b8152600481018690528690fd5b8490867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91828103610b0c5750843b15610af6575080546001600160a01b03191682179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2835115610adc5750600083819261001b95519101845af4610ad66121cb565b91612930565b9250505034610ae757005b63b398979f60e01b8152600490fd5b604051634c9c8ce360e01b815260048101849052fd5b60405190632a87526960e21b82526004820152fd5b9091508281813d8311610b49575b610b398183611b5c565b810103126102dc57519087610a2c565b503d610b2f565b856044916040519163e2517d3f60e01b8352336004840152820152fd5b9050837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415856109a6565b346102dc5760003660031901126102dc5760206040517f7045adfe67d5f94dbfddcdb901e44bef55baacabb398c7cddda1bfd7620b15688152f35b346102dc5760203660031901126102dc57610bef611a50565b610bf76124c8565b600380546001600160a01b0319166001600160a01b0392909216919091179055005b346102dc5760003660031901126102dc57610c326124c8565b600080808047818115610c56575b3390f115610c4a57005b6040513d6000823e3d90fd5b506108fc610c40565b346102dc5760203660031901126102dc57610c78611a50565b610c806124c8565b600280546001600160a01b0319166001600160a01b0392909216919091179055005b346102dc5760403660031901126102dc57610cbb611a66565b336001600160a01b03821603610cd75761001b9060043561280c565b60405163334bd91960e11b8152600490fd5b346102dc5760003660031901126102dc576002546040516001600160a01b039091168152602090f35b346102dc5760203660031901126102dc57610d2b611a50565b610d336124c8565b6001600160a01b03168015610d5f576bffffffffffffffffffffffff60a01b6001541617600155600080f35b60405162461bcd60e51b815260206004820152600b60248201526a2d32b937903937baba32b960a91b6044820152606490fd5b346102dc5760403660031901126102dc5761001b600435610db1611a66565b90806000526000805160206129b4833981519152602052610dd960016040600020015461257c565b612797565b346102dc5760203660031901126102dc576004356000526000805160206129b48339815191526020526020600160406000200154604051908152f35b6003196020368201126102dc57600435906001600160401b0382116102dc57610120809183360301126102dc57610e4f611f35565b600080546001600160a01b03169190610e6a60048501611ee1565b60405163185c596360e11b81526001600160a01b03909116600482015292839060249082905afa918215610c4a57600092611561575b50610eb16102208301511515611e81565b81516001600160a01b031615611525576001600160a01b03610ed560048501611ee1565b16600052600460205260406000206001600160401b03610ef760448601611ef5565b1660005260205260406000209160405192610f1184611ad5565b80546001600160a01b038116855260a01c60ff1615801560208601526001919091015460408501526114e05782516001600160a01b0316156114a8576024840135156114725761010081015160248501351061143d570151602483013511611408576001600160a01b03610f8760048401611ee1565b16610fd860008060405160208101906323b872dd60e01b82523360248201523060448201526024880135606482015260648152610fc381611b0b565b519082865af1610fd16121cb565b9083612930565b80519081151591826113e5575b50506113cd5750610ff860a48301611f09565b806113b9575b6113a8575b61100f60c48301611f09565b80611394575b611383575b61102660648301611ee1565b903360005260076020526040600020546040519260018060a01b031660208401526024840135604084015233606084015260808301526080825261106982611b0b565b60018060a01b039051166040519060208201526020815261108981611b26565b60405161109581611b26565b6001815260005b6020811061136c5750604051928360a08101106001600160401b0360a0860111176113565761113d9260a085016040528452602084015260408301908152600060608401526040516110ed81611af0565b60008152608084015261110284600401611ee1565b906040519161111083611ad5565b6001600160a01b0316825260248501356020830152600060408301525190611137826123a7565b526123a7565b506001546001600160a01b0316906111799060208161115e60448701611ef5565b604051632bb74f2960e11b81529485928392600484016123ca565b0381865afa918215610c4a57600092611322575b508147106112ea576111c4926040926111a860448701611ef5565b90845180968195829463306ab04160e21b8452600484016123ca565b03925af1908115610c4a576000916112b8575b5033600052600760205260406000209182549260001984146112a257600160209401905561120781600401611ee1565b9061121460448201611ef5565b61122060648301611ee1565b6001600160401b0361123460a48501611f09565b9260246040519501358552168684015260018060a01b0316604083015215156060820152827f6e13c3a4053492f10489076e138aeb13c656b658b1a5835874497ee79dfb5b156080339460018060a01b031693a460016000805160206129d483398151915255604051908152f35b634e487b7160e01b600052601160045260246000fd5b90506040813d6040116112e2575b816112d360409383611b5c565b810103126102dc5751826111d7565b3d91506112c6565b60405162461bcd60e51b815260206004820152601060248201526f496e73756666696369656e742066656560801b6044820152606490fd5b9091506020813d60201161134e575b8161133e60209383611b5c565b810103126102dc5751908461118d565b3d9150611331565b634e487b7160e01b600052604160045260246000fd5b602090611377611f16565b8282850101520161109c565b61138f82600401612270565b61101a565b506003546001600160a01b03161515611015565b6113b4826004016121fb565b611003565b506002546001600160a01b03161515610ffe565b60249060405190635274afe760e01b82526004820152fd5b81925090602091810103126102dc5760206114009101611c7e565b158480610fe5565b60405162461bcd60e51b815260206004820152600d60248201526c41626f7665206d6178696d756d60981b6044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c42656c6f77206d696e696d756d60981b6044820152606490fd5b60405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103932b1b2b4bb32b960811b6044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527f44657374696e6174696f6e206e6f7420656e61626c65640000000000000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273105cdcd95d081b9bdd081c9959da5cdd195c995960621b6044820152606490fd5b61157f9192503d806000833e6115778183611b5c565b810190611c8b565b9083610ea0565b346102dc5760003660031901126102dc576001546040516001600160a01b039091168152602090f35b346102dc5760c03660031901126102dc576115c8611a50565b6024356001600160401b0381116102dc576115e7903690600401611a92565b6064929192356001600160401b03811681036102dc576084356001600160401b0381116102dc5761161c903690600401611a92565b60a435926001600160a01b03841684036102dc57611638611f35565b61164b61164636878a611b98565b611fc0565b156119c15761165e611646368486611b98565b15611985576000805460405163185c596360e11b81526001600160a01b03898116600483015290929183916024918391165afa908115610c4a5760009161196a575b506020810151600a8110156119545760020361191f576102206116c69101511515611e81565b6116e96116d436878a611b98565b604435906116e3368688611b98565b90612065565b9360405190816101208101106001600160401b0361012084011117611356576001600160401b0360209361182d99610120850160405260018060a01b031684526044358585015216604083015260018060a01b0316606082015260026080820152600060a0820152600060c082015260405161176481611af0565b6000815260e082015260405161177981611af0565b60008152610100820152604051809781926303f8d1cb60e21b835284600484015260018060a01b0381511660248401528481015160448401526001600160401b03604082015116606484015260018060a01b036060820151166084840152608081015160a484015260a0810151151560c484015260c0810151151560e484015261010061181860e0830151610120610104870152610144860190611bf2565b91015183820360231901610124850152611bf2565b03816000305af1948515610c4a576000956118bf575b50927f4c56aa1aa06d04df4c51a1eddc829180a5afe9b66eacd9819da93bd6998e860492611894602097938796611887604051968796608088526080880191611ec0565b918583038b870152611ec0565b90604435604084015260608301520390a260016000805160206129d483398151915255604051908152f35b9295919450926020833d602011611917575b816118de60209383611b5c565b810103126102dc5791519094909391929091907f4c56aa1aa06d04df4c51a1eddc829180a5afe9b66eacd9819da93bd6998e8604611843565b3d91506118d1565b60405162461bcd60e51b815260206004820152600d60248201526c139bdd0811d49548185cdcd95d609a1b6044820152606490fd5b634e487b7160e01b600052602160045260246000fd5b61197f91503d806000833e6115778183611b5c565b886116a0565b60405162461bcd60e51b815260206004820152601460248201527324b73b30b634b2103a30b933b2ba103630bcb2b960611b6044820152606490fd5b60405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21039b7bab931b2903630bcb2b960611b6044820152606490fd5b346102dc5760203660031901126102dc576004359063ffffffff60e01b82168092036102dc57602091637965db0b60e01b8114908115611a3f575b5015158152f35b6301ffc9a760e01b14905083611a38565b600435906001600160a01b03821682036102dc57565b602435906001600160a01b03821682036102dc57565b604435906001600160a01b03821682036102dc57565b9181601f840112156102dc578235916001600160401b0383116102dc57602083818601950101116102dc57565b602435906001600160401b03821682036102dc57565b606081019081106001600160401b0382111761135657604052565b602081019081106001600160401b0382111761135657604052565b60a081019081106001600160401b0382111761135657604052565b604081019081106001600160401b0382111761135657604052565b60c081019081106001600160401b0382111761135657604052565b90601f801991011681019081106001600160401b0382111761135657604052565b6001600160401b03811161135657601f01601f191660200190565b929192611ba482611b7d565b91611bb26040519384611b5c565b8294818452818301116102dc578281602093846000960137010152565b60005b838110611be25750506000910152565b8181015183820152602001611bd2565b90602091611c0b81518092818552858086019101611bcf565b601f01601f1916010190565b51906001600160a01b03821682036102dc57565b81601f820112156102dc578051611c4181611b7d565b92611c4f6040519485611b5c565b818452602082840101116102dc57611c6d9160208085019101611bcf565b90565b519060ff821682036102dc57565b519081151582036102dc57565b9060209182818303126102dc5780516001600160401b03918282116102dc5701916102809384848303126102dc576040519485018581108482111761135657604052611cd684611c17565b855280840151600a8110156102dc5781860152604084015160058110156102dc57604086015260608401518381116102dc5782611d14918601611c2b565b606086015260808401518381116102dc5782611d31918601611c2b565b6080860152611d4260a08501611c70565b60a086015260c08401518381116102dc5782611d5f918601611c2b565b60c0860152611d7060e08501611c70565b60e0860152610100808501519086015261012080850151908601526101408085015190860152610160611da4818601611c17565b90860152610180611db6818601611c7e565b908601526101a080850151908601526101c0611dd3818601611c7e565b908601526101e091828501518481116102dc57850181601f820112156102dc578051948511611356578460051b9060405195611e1185840188611b5c565b865283808701928201019283116102dc578301905b828210611e6a57505050508301526102008082015190830152610220611e4d818301611c7e565b908301526102408082015190830152610260809101519082015290565b838091611e7684611c17565b815201910190611e26565b15611e8857565b60405162461bcd60e51b815260206004820152601060248201526f4173736574206e6f742061637469766560801b6044820152606490fd5b908060209392818452848401376000828201840152601f01601f1916010190565b356001600160a01b03811681036102dc5790565b356001600160401b03811681036102dc5790565b3580151581036102dc5790565b60405190611f2382611ad5565b60006040838281528260208201520152565b6000805160206129d48339815191526002815414611f535760029055565b604051633ee5aeb560e01b8152600490fd5b60405190611f7282611b26565b600382526204d30360ec1b6020830152565b60405190611f9182611b26565b600282526104d360f41b6020830152565b60405190611faf82611b26565b60028252614d3160f01b6020830152565b60208151910120611fcf611f65565b60208151910120811490811561204c575b8115612033575b8115611ff1575090565b7f3bce5d33306651a6f825323e347f7dde6e7d478f739d7801dd1a156d1082ef5791506247525560e81b602060405161202981611b26565b6003815201521490565b905061203d611fa2565b60208151910120811490611fe7565b9050612056611f84565b60208151910120811490611fe0565b6020815191012090602081519101209061207d611f65565b602081519101209161208d611f84565b602081519101209161209d611fa2565b60208151910120908481148080916121c2575b6121b357806121aa575b61216c578084148080612163575b612154578061214b575b61213d571480938194612133575b5061210757826120fd575b50506120f45790565b611c6d906128c7565b14905038806120eb565b505050670de0b6b3a7640000908181029181830414901517156112a25768015af1d78b58c40000900490565b90508114386120e0565b5050505050611c6d9061288f565b508183146120d2565b505050505050611c6d906128c7565b508584146120c8565b50505050506019810290808204601914811517156112a25768015af1d78b58c4000002670de0b6b3a7640000918082048314901517156112a2570490565b508183146120ba565b505050505050611c6d9061288f565b508484146120b0565b3d156121f6573d906121dc82611b7d565b916121ea6040519384611b5c565b82523d6000602084013e565b606090565b6002546001600160a01b03908116801561226b5782600080949360206122218396611ee1565b93604051928284019563b7b3142f60e01b875216602484015201356044820152606060648201528160848201526084815261225b81611b41565b51925af1506122686121cb565b50565b505050565b6003546001600160a01b03908116801561226b57600092338452602090600582528484604082205416938415612325575b50508383166122b2575b5050505050565b84936001600160401b03826122c78794611ee1565b946122d460408301611ef5565b916040519482860197630f48aa5f60e31b8952876024880152166044860152013560648401521660848201526084815261230d81611b41565b51925af15061231a6121cb565b5038808080806122ab565b81906040518286820191635a5eb7a360e11b83523360248201526024815261234c81611ad5565b51925af16123586121cb565b90612365575b85906122a1565b90925081818051810103126123a357810151918383168093036123a357338552600582526040852080546001600160a01b031916841790553861235e565b8480fd5b8051156123b45760200190565b634e487b7160e01b600052603260045260246000fd5b909291926001600160401b036040911682526020916040838201526123fb855160a0604084015260e0830190611bf2565b9183860151612419603f199460609286868303016060870152611bf2565b604088015195858583030160808601528080885193848152019701936000936000915b848310612474575050505050505060c06080611c6d959660018060a01b0360608201511660a085015201519282850301910152611bf2565b90919293949598818a5160018060a01b0381511683528681015187840152015160028110156124b45782820152820198840195949392600101919061243c565b634e487b7160e01b88526021600452602488fd5b3360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604081205460ff16156125025750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b3360009081527ff0032186d03910e820cb3fd115c5fea4f88d913d568f567015a009fe33498ecd60205260409020547f7045adfe67d5f94dbfddcdb901e44bef55baacabb398c7cddda1bfd7620b15689060ff16156125025750565b806000526000805160206129b483398151915260205260406000203360005260205260ff60406000205416156125025750565b6001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120549091906000805160206129b48339815191529060ff16612638578280526020526040822081835260205260408220600160ff1982541617905533916000805160206129948339815191528180a4600190565b505090565b6001600160a01b031660008181527ff0032186d03910e820cb3fd115c5fea4f88d913d568f567015a009fe33498ecd60205260408120549091907f7045adfe67d5f94dbfddcdb901e44bef55baacabb398c7cddda1bfd7620b1568906000805160206129b48339815191529060ff166126e7578184526020526040832082845260205260408320600160ff19825416179055600080516020612994833981519152339380a4600190565b50505090565b6001600160a01b031660008181527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860205260408120549091907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3906000805160206129b48339815191529060ff166126e7578184526020526040832082845260205260408320600160ff19825416179055600080516020612994833981519152339380a4600190565b906000918083526000805160206129b483398151915280602052604084209260018060a01b03169283855260205260ff604085205416156000146126e7578184526020526040832082845260205260408320600160ff19825416179055600080516020612994833981519152339380a4600190565b906000918083526000805160206129b483398151915280602052604084209260018060a01b03169283855260205260ff6040852054166000146126e757818452602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b6005810290808204600514811517156112a257674563918244f4000002670de0b6b3a7640000918082048314901517156112a2570490565b670de0b6b3a7640000908181029181830414901517156112a257674563918244f40000900490565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561291e57565b604051631afcd79f60e31b8152600490fd5b90612957575080511561294557805190602001fd5b604051630a12f52160e11b8152600490fd5b8151158061298a575b612968575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561296056fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212207c0e4e1e9bb1c8109c3c4512ea53ed05868ae81bc7f01f5c4d10b95c32c9a76964736f6c63430008160033",
"deployedBytecode": "0x608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c90816301ffc9a7146119fd575080630a5ea438146115af5780630de22984146115865780630fe3472c14610e1a578063248a9ca314610dde5780632958d0311461031c5780632f2ff15d14610d9257806331c1e16a14610d125780633382743814610ce957806336568abe14610ca25780633c1624d414610c5f5780633ccfd60b14610c195780633ea7fbdb14610bd65780634be40fd114610b9b5780634f1ef2861461092a57806352d1902d146108ad57806363673e501461083a5780636834e3a814610776578063704f8848146107b05780637ecebe001461077657806388ba16ab1461074557806391d14854146106eb578063979d7e86146106c2578063a217fddf146106a6578063a6425c3114610607578063ad3cb1cc146105bd578063c0c53b8b146103cc578063d547741f14610380578063d8a06f7314610357578063f2380a081461031c578063f72c0d8b146102e15763fa29f5261461018a573861000f565b346102dc5760603660031901126102dc576101a3611a50565b6101ab611abf565b906101b4611a7c565b906101bd612520565b6001600160a01b039081169182156102aa578116908115610275577f204fe11fb8c7a51e768e894685e74e8fe9e8741492ea62d715826577a7a40eb59160209160016040519161020c83611ad5565b838352848301828152604084019142835288600052600487526001600160401b0360406000209a16998a6000528752604060002094511684549160ff60a01b9051151560a01b16916affffffffffffffffffffff60a81b161717835551910155604051908152a3005b60405162461bcd60e51b815260206004820152600d60248201526c2d32b937903932b1b2b4bb32b960991b6044820152606490fd5b60405162461bcd60e51b815260206004820152600a6024820152692d32b937903a37b5b2b760b11b6044820152606490fd5b600080fd5b346102dc5760003660031901126102dc5760206040517f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e38152f35b346102dc5760203660031901126102dc5760206001600160a01b0380610340611a50565b166000526005825260406000205416604051908152f35b346102dc5760003660031901126102dc576003546040516001600160a01b039091168152602090f35b346102dc5760403660031901126102dc5761001b60043561039f611a66565b90806000526000805160206129b48339815191526020526103c760016040600020015461257c565b61280c565b346102dc5760603660031901126102dc576103e5611a50565b6103ed611a66565b6103f5611a7c565b917ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009182549360ff8560401c1615926001600160401b038616958615806105b6575b600180981490816105ac575b1590816105a3575b506105915767ffffffffffffffff1981168717865584610572575b5061046f6128ef565b6104776128ef565b61047f6128ef565b856000805160206129d4833981519152556104986128ef565b6001600160a01b0390811690811561053d576104eb936bffffffffffffffffffffffff60a01b92836000541617600055169081610530575b50506104db816125af565b506104e58161263d565b506126ed565b506104f257005b805468ff0000000000000000191690556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b86541617855585806104d0565b60405162461bcd60e51b815260206004820152600d60248201526c5a65726f20726567697374727960981b6044820152606490fd5b68ffffffffffffffffff19166801000000000000000117855586610466565b60405163f92ee8a960e01b8152600490fd5b9050158861044b565b303b159150610443565b5084610437565b346102dc5760003660031901126102dc576106036040516105dd81611b26565b60058152640352e302e360dc1b6020820152604051918291602083526020830190611bf2565b0390f35b346102dc5760403660031901126102dc576060610622611a50565b61062a611abf565b610632611f16565b5060018060a01b0380921660005260046020526001600160401b03604060002091166000526020526040600020906040519061066d82611ad5565b6040600184549283169485855260ff602086019460a01c1615158452015492019182526040519283525115156020830152516040820152f35b346102dc5760003660031901126102dc57602060405160008152f35b346102dc5760003660031901126102dc576000546040516001600160a01b039091168152602090f35b346102dc5760403660031901126102dc57610704611a66565b6004356000526000805160206129b483398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b346102dc5760203660031901126102dc576004356000526006602052602060ff604060002054166040519015158152f35b346102dc5760203660031901126102dc576001600160a01b03610797611a50565b1660005260076020526020604060002054604051908152f35b346102dc5760403660031901126102dc576107c9611a50565b6107d1611abf565b906107da612520565b6001600160a01b031660008181526004602090815260408083206001600160401b0395909516808452949091528120805460ff60a01b191690557fcd50155673a3d71145772f9857052edc738a9ef46a69a04f1fed833f1708fb099080a3005b346102dc5760403660031901126102dc576060610855611a50565b61085d611abf565b60018060a01b0380921660005260046020526001600160401b0360406000209116600052602052604060002060ff6001825492015491604051938116845260a01c16151560208301526040820152f35b346102dc5760003660031901126102dc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036109185760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60405163703e46dd60e11b8152600490fd5b60403660031901126102dc5761093e611a50565b60249081356001600160401b0381116102dc57366023820112156102dc5761096f9036908481600401359101611b98565b6001600160a01b03917f00000000000000000000000000000000000000000000000000000000000000008316308114908115610b6d575b50610918573360009081527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860209081526040909120549093907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e39060ff1615610b5057508116926040516352d1902d60e01b81528181600481885afa60009181610b21575b50610a4957604051634c9c8ce360e01b8152600481018690528690fd5b8490867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91828103610b0c5750843b15610af6575080546001600160a01b03191682179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2835115610adc5750600083819261001b95519101845af4610ad66121cb565b91612930565b9250505034610ae757005b63b398979f60e01b8152600490fd5b604051634c9c8ce360e01b815260048101849052fd5b60405190632a87526960e21b82526004820152fd5b9091508281813d8311610b49575b610b398183611b5c565b810103126102dc57519087610a2c565b503d610b2f565b856044916040519163e2517d3f60e01b8352336004840152820152fd5b9050837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415856109a6565b346102dc5760003660031901126102dc5760206040517f7045adfe67d5f94dbfddcdb901e44bef55baacabb398c7cddda1bfd7620b15688152f35b346102dc5760203660031901126102dc57610bef611a50565b610bf76124c8565b600380546001600160a01b0319166001600160a01b0392909216919091179055005b346102dc5760003660031901126102dc57610c326124c8565b600080808047818115610c56575b3390f115610c4a57005b6040513d6000823e3d90fd5b506108fc610c40565b346102dc5760203660031901126102dc57610c78611a50565b610c806124c8565b600280546001600160a01b0319166001600160a01b0392909216919091179055005b346102dc5760403660031901126102dc57610cbb611a66565b336001600160a01b03821603610cd75761001b9060043561280c565b60405163334bd91960e11b8152600490fd5b346102dc5760003660031901126102dc576002546040516001600160a01b039091168152602090f35b346102dc5760203660031901126102dc57610d2b611a50565b610d336124c8565b6001600160a01b03168015610d5f576bffffffffffffffffffffffff60a01b6001541617600155600080f35b60405162461bcd60e51b815260206004820152600b60248201526a2d32b937903937baba32b960a91b6044820152606490fd5b346102dc5760403660031901126102dc5761001b600435610db1611a66565b90806000526000805160206129b4833981519152602052610dd960016040600020015461257c565b612797565b346102dc5760203660031901126102dc576004356000526000805160206129b48339815191526020526020600160406000200154604051908152f35b6003196020368201126102dc57600435906001600160401b0382116102dc57610120809183360301126102dc57610e4f611f35565b600080546001600160a01b03169190610e6a60048501611ee1565b60405163185c596360e11b81526001600160a01b03909116600482015292839060249082905afa918215610c4a57600092611561575b50610eb16102208301511515611e81565b81516001600160a01b031615611525576001600160a01b03610ed560048501611ee1565b16600052600460205260406000206001600160401b03610ef760448601611ef5565b1660005260205260406000209160405192610f1184611ad5565b80546001600160a01b038116855260a01c60ff1615801560208601526001919091015460408501526114e05782516001600160a01b0316156114a8576024840135156114725761010081015160248501351061143d570151602483013511611408576001600160a01b03610f8760048401611ee1565b16610fd860008060405160208101906323b872dd60e01b82523360248201523060448201526024880135606482015260648152610fc381611b0b565b519082865af1610fd16121cb565b9083612930565b80519081151591826113e5575b50506113cd5750610ff860a48301611f09565b806113b9575b6113a8575b61100f60c48301611f09565b80611394575b611383575b61102660648301611ee1565b903360005260076020526040600020546040519260018060a01b031660208401526024840135604084015233606084015260808301526080825261106982611b0b565b60018060a01b039051166040519060208201526020815261108981611b26565b60405161109581611b26565b6001815260005b6020811061136c5750604051928360a08101106001600160401b0360a0860111176113565761113d9260a085016040528452602084015260408301908152600060608401526040516110ed81611af0565b60008152608084015261110284600401611ee1565b906040519161111083611ad5565b6001600160a01b0316825260248501356020830152600060408301525190611137826123a7565b526123a7565b506001546001600160a01b0316906111799060208161115e60448701611ef5565b604051632bb74f2960e11b81529485928392600484016123ca565b0381865afa918215610c4a57600092611322575b508147106112ea576111c4926040926111a860448701611ef5565b90845180968195829463306ab04160e21b8452600484016123ca565b03925af1908115610c4a576000916112b8575b5033600052600760205260406000209182549260001984146112a257600160209401905561120781600401611ee1565b9061121460448201611ef5565b61122060648301611ee1565b6001600160401b0361123460a48501611f09565b9260246040519501358552168684015260018060a01b0316604083015215156060820152827f6e13c3a4053492f10489076e138aeb13c656b658b1a5835874497ee79dfb5b156080339460018060a01b031693a460016000805160206129d483398151915255604051908152f35b634e487b7160e01b600052601160045260246000fd5b90506040813d6040116112e2575b816112d360409383611b5c565b810103126102dc5751826111d7565b3d91506112c6565b60405162461bcd60e51b815260206004820152601060248201526f496e73756666696369656e742066656560801b6044820152606490fd5b9091506020813d60201161134e575b8161133e60209383611b5c565b810103126102dc5751908461118d565b3d9150611331565b634e487b7160e01b600052604160045260246000fd5b602090611377611f16565b8282850101520161109c565b61138f82600401612270565b61101a565b506003546001600160a01b03161515611015565b6113b4826004016121fb565b611003565b506002546001600160a01b03161515610ffe565b60249060405190635274afe760e01b82526004820152fd5b81925090602091810103126102dc5760206114009101611c7e565b158480610fe5565b60405162461bcd60e51b815260206004820152600d60248201526c41626f7665206d6178696d756d60981b6044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c42656c6f77206d696e696d756d60981b6044820152606490fd5b60405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103932b1b2b4bb32b960811b6044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527f44657374696e6174696f6e206e6f7420656e61626c65640000000000000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273105cdcd95d081b9bdd081c9959da5cdd195c995960621b6044820152606490fd5b61157f9192503d806000833e6115778183611b5c565b810190611c8b565b9083610ea0565b346102dc5760003660031901126102dc576001546040516001600160a01b039091168152602090f35b346102dc5760c03660031901126102dc576115c8611a50565b6024356001600160401b0381116102dc576115e7903690600401611a92565b6064929192356001600160401b03811681036102dc576084356001600160401b0381116102dc5761161c903690600401611a92565b60a435926001600160a01b03841684036102dc57611638611f35565b61164b61164636878a611b98565b611fc0565b156119c15761165e611646368486611b98565b15611985576000805460405163185c596360e11b81526001600160a01b03898116600483015290929183916024918391165afa908115610c4a5760009161196a575b506020810151600a8110156119545760020361191f576102206116c69101511515611e81565b6116e96116d436878a611b98565b604435906116e3368688611b98565b90612065565b9360405190816101208101106001600160401b0361012084011117611356576001600160401b0360209361182d99610120850160405260018060a01b031684526044358585015216604083015260018060a01b0316606082015260026080820152600060a0820152600060c082015260405161176481611af0565b6000815260e082015260405161177981611af0565b60008152610100820152604051809781926303f8d1cb60e21b835284600484015260018060a01b0381511660248401528481015160448401526001600160401b03604082015116606484015260018060a01b036060820151166084840152608081015160a484015260a0810151151560c484015260c0810151151560e484015261010061181860e0830151610120610104870152610144860190611bf2565b91015183820360231901610124850152611bf2565b03816000305af1948515610c4a576000956118bf575b50927f4c56aa1aa06d04df4c51a1eddc829180a5afe9b66eacd9819da93bd6998e860492611894602097938796611887604051968796608088526080880191611ec0565b918583038b870152611ec0565b90604435604084015260608301520390a260016000805160206129d483398151915255604051908152f35b9295919450926020833d602011611917575b816118de60209383611b5c565b810103126102dc5791519094909391929091907f4c56aa1aa06d04df4c51a1eddc829180a5afe9b66eacd9819da93bd6998e8604611843565b3d91506118d1565b60405162461bcd60e51b815260206004820152600d60248201526c139bdd0811d49548185cdcd95d609a1b6044820152606490fd5b634e487b7160e01b600052602160045260246000fd5b61197f91503d806000833e6115778183611b5c565b886116a0565b60405162461bcd60e51b815260206004820152601460248201527324b73b30b634b2103a30b933b2ba103630bcb2b960611b6044820152606490fd5b60405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21039b7bab931b2903630bcb2b960611b6044820152606490fd5b346102dc5760203660031901126102dc576004359063ffffffff60e01b82168092036102dc57602091637965db0b60e01b8114908115611a3f575b5015158152f35b6301ffc9a760e01b14905083611a38565b600435906001600160a01b03821682036102dc57565b602435906001600160a01b03821682036102dc57565b604435906001600160a01b03821682036102dc57565b9181601f840112156102dc578235916001600160401b0383116102dc57602083818601950101116102dc57565b602435906001600160401b03821682036102dc57565b606081019081106001600160401b0382111761135657604052565b602081019081106001600160401b0382111761135657604052565b60a081019081106001600160401b0382111761135657604052565b604081019081106001600160401b0382111761135657604052565b60c081019081106001600160401b0382111761135657604052565b90601f801991011681019081106001600160401b0382111761135657604052565b6001600160401b03811161135657601f01601f191660200190565b929192611ba482611b7d565b91611bb26040519384611b5c565b8294818452818301116102dc578281602093846000960137010152565b60005b838110611be25750506000910152565b8181015183820152602001611bd2565b90602091611c0b81518092818552858086019101611bcf565b601f01601f1916010190565b51906001600160a01b03821682036102dc57565b81601f820112156102dc578051611c4181611b7d565b92611c4f6040519485611b5c565b818452602082840101116102dc57611c6d9160208085019101611bcf565b90565b519060ff821682036102dc57565b519081151582036102dc57565b9060209182818303126102dc5780516001600160401b03918282116102dc5701916102809384848303126102dc576040519485018581108482111761135657604052611cd684611c17565b855280840151600a8110156102dc5781860152604084015160058110156102dc57604086015260608401518381116102dc5782611d14918601611c2b565b606086015260808401518381116102dc5782611d31918601611c2b565b6080860152611d4260a08501611c70565b60a086015260c08401518381116102dc5782611d5f918601611c2b565b60c0860152611d7060e08501611c70565b60e0860152610100808501519086015261012080850151908601526101408085015190860152610160611da4818601611c17565b90860152610180611db6818601611c7e565b908601526101a080850151908601526101c0611dd3818601611c7e565b908601526101e091828501518481116102dc57850181601f820112156102dc578051948511611356578460051b9060405195611e1185840188611b5c565b865283808701928201019283116102dc578301905b828210611e6a57505050508301526102008082015190830152610220611e4d818301611c7e565b908301526102408082015190830152610260809101519082015290565b838091611e7684611c17565b815201910190611e26565b15611e8857565b60405162461bcd60e51b815260206004820152601060248201526f4173736574206e6f742061637469766560801b6044820152606490fd5b908060209392818452848401376000828201840152601f01601f1916010190565b356001600160a01b03811681036102dc5790565b356001600160401b03811681036102dc5790565b3580151581036102dc5790565b60405190611f2382611ad5565b60006040838281528260208201520152565b6000805160206129d48339815191526002815414611f535760029055565b604051633ee5aeb560e01b8152600490fd5b60405190611f7282611b26565b600382526204d30360ec1b6020830152565b60405190611f9182611b26565b600282526104d360f41b6020830152565b60405190611faf82611b26565b60028252614d3160f01b6020830152565b60208151910120611fcf611f65565b60208151910120811490811561204c575b8115612033575b8115611ff1575090565b7f3bce5d33306651a6f825323e347f7dde6e7d478f739d7801dd1a156d1082ef5791506247525560e81b602060405161202981611b26565b6003815201521490565b905061203d611fa2565b60208151910120811490611fe7565b9050612056611f84565b60208151910120811490611fe0565b6020815191012090602081519101209061207d611f65565b602081519101209161208d611f84565b602081519101209161209d611fa2565b60208151910120908481148080916121c2575b6121b357806121aa575b61216c578084148080612163575b612154578061214b575b61213d571480938194612133575b5061210757826120fd575b50506120f45790565b611c6d906128c7565b14905038806120eb565b505050670de0b6b3a7640000908181029181830414901517156112a25768015af1d78b58c40000900490565b90508114386120e0565b5050505050611c6d9061288f565b508183146120d2565b505050505050611c6d906128c7565b508584146120c8565b50505050506019810290808204601914811517156112a25768015af1d78b58c4000002670de0b6b3a7640000918082048314901517156112a2570490565b508183146120ba565b505050505050611c6d9061288f565b508484146120b0565b3d156121f6573d906121dc82611b7d565b916121ea6040519384611b5c565b82523d6000602084013e565b606090565b6002546001600160a01b03908116801561226b5782600080949360206122218396611ee1565b93604051928284019563b7b3142f60e01b875216602484015201356044820152606060648201528160848201526084815261225b81611b41565b51925af1506122686121cb565b50565b505050565b6003546001600160a01b03908116801561226b57600092338452602090600582528484604082205416938415612325575b50508383166122b2575b5050505050565b84936001600160401b03826122c78794611ee1565b946122d460408301611ef5565b916040519482860197630f48aa5f60e31b8952876024880152166044860152013560648401521660848201526084815261230d81611b41565b51925af15061231a6121cb565b5038808080806122ab565b81906040518286820191635a5eb7a360e11b83523360248201526024815261234c81611ad5565b51925af16123586121cb565b90612365575b85906122a1565b90925081818051810103126123a357810151918383168093036123a357338552600582526040852080546001600160a01b031916841790553861235e565b8480fd5b8051156123b45760200190565b634e487b7160e01b600052603260045260246000fd5b909291926001600160401b036040911682526020916040838201526123fb855160a0604084015260e0830190611bf2565b9183860151612419603f199460609286868303016060870152611bf2565b604088015195858583030160808601528080885193848152019701936000936000915b848310612474575050505050505060c06080611c6d959660018060a01b0360608201511660a085015201519282850301910152611bf2565b90919293949598818a5160018060a01b0381511683528681015187840152015160028110156124b45782820152820198840195949392600101919061243c565b634e487b7160e01b88526021600452602488fd5b3360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604081205460ff16156125025750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b3360009081527ff0032186d03910e820cb3fd115c5fea4f88d913d568f567015a009fe33498ecd60205260409020547f7045adfe67d5f94dbfddcdb901e44bef55baacabb398c7cddda1bfd7620b15689060ff16156125025750565b806000526000805160206129b483398151915260205260406000203360005260205260ff60406000205416156125025750565b6001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120549091906000805160206129b48339815191529060ff16612638578280526020526040822081835260205260408220600160ff1982541617905533916000805160206129948339815191528180a4600190565b505090565b6001600160a01b031660008181527ff0032186d03910e820cb3fd115c5fea4f88d913d568f567015a009fe33498ecd60205260408120549091907f7045adfe67d5f94dbfddcdb901e44bef55baacabb398c7cddda1bfd7620b1568906000805160206129b48339815191529060ff166126e7578184526020526040832082845260205260408320600160ff19825416179055600080516020612994833981519152339380a4600190565b50505090565b6001600160a01b031660008181527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860205260408120549091907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3906000805160206129b48339815191529060ff166126e7578184526020526040832082845260205260408320600160ff19825416179055600080516020612994833981519152339380a4600190565b906000918083526000805160206129b483398151915280602052604084209260018060a01b03169283855260205260ff604085205416156000146126e7578184526020526040832082845260205260408320600160ff19825416179055600080516020612994833981519152339380a4600190565b906000918083526000805160206129b483398151915280602052604084209260018060a01b03169283855260205260ff6040852054166000146126e757818452602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b6005810290808204600514811517156112a257674563918244f4000002670de0b6b3a7640000918082048314901517156112a2570490565b670de0b6b3a7640000908181029181830414901517156112a257674563918244f40000900490565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561291e57565b604051631afcd79f60e31b8152600490fd5b90612957575080511561294557805190602001fd5b604051630a12f52160e11b8152600490fd5b8151158061298a575b612968575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561296056fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212207c0e4e1e9bb1c8109c3c4512ea53ed05868ae81bc7f01f5c4d10b95c32c9a76964736f6c63430008160033",
"linkReferences": {},
"deployedLinkReferences": {}
}