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

1220 lines
72 KiB
JSON

{
"_format": "hh-sol-artifact-1",
"contractName": "ISO4217WCCIPBridge",
"sourceName": "contracts/bridge/ISO4217WCCIPBridge.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": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "string",
"name": "jurisdiction",
"type": "string"
}
],
"name": "JurisdictionEnabled",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
}
],
"name": "KYCRevoked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "expirationTime",
"type": "uint256"
}
],
"name": "KYCVerified",
"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": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "ReserveVerified",
"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": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"name": "allowedJurisdictions",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"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": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "destinationChain",
"type": "uint64"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "bytes",
"name": "complianceProof",
"type": "bytes"
}
],
"name": "bridgeISO4217W",
"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": "string",
"name": "jurisdiction",
"type": "string"
}
],
"name": "enableJurisdiction",
"outputs": [],
"stateMutability": "nonpayable",
"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": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "kycExpiration",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "kycVerified",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"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": "user",
"type": "address"
},
{
"internalType": "bool",
"name": "status",
"type": "bool"
},
{
"internalType": "uint256",
"name": "expirationTime",
"type": "uint256"
}
],
"name": "setKYCStatus",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_liquidityManager",
"type": "address"
}
],
"name": "setLiquidityManager",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "user",
"type": "address"
},
{
"internalType": "string",
"name": "jurisdiction",
"type": "string"
}
],
"name": "setUserJurisdiction",
"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": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "reserve",
"type": "uint256"
}
],
"name": "updateVerifiedReserve",
"outputs": [],
"stateMutability": "nonpayable",
"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": "userJurisdictions",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"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": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "verifiedReserves",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x60a080604052346100cd57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c166100be57506001600160401b036002600160401b031982821601610079575b604051612e0a9081620000d3823960805181818161118d01526112470152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1388080610059565b63f92ee8a960e01b8152600490fd5b600080fdfe608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c90816301ffc9a714611f32575080630de2298414611f095780630fe3472c146117bb578063248a9ca31461177f57806325ee0b6a146117315780632958d0311461037f5780632f2ff15d146116e5578063314a8c8a1461165357806331c1e16a146115d357806333827438146115aa57806336568abe146115635780633c1624d4146115205780633ccfd60b146114e65780633ea7fbdb146114a35780634be40fd1146114685780634f1ef286146111f757806352d1902d1461117a57806357eb5a331461114057806363673e50146110cd578063659dc12114610f705780636834e3a814610eac578063704f884814610ee65780637ecebe0014610eac578063826f911d14610e3a57806388ba16ab14610e095780638b9a9c2b14610dcf57806391d1485414610d75578063970a8b9514610cb5578063979d7e8614610c8c578063a217fddf14610c70578063a5410a6614610c31578063a6425c3114610b92578063ad3cb1cc14610b48578063c01f085c1461068b578063c0c53b8b1461049a578063cc653fc81461042f578063d547741f146103e3578063d8a06f73146103ba578063f2380a081461037f578063f72c0d8b146103445763fa29f526146101ed573861000f565b3461033f57606036600319011261033f57610206611f85565b61020e612215565b90610217611fb1565b906102206128ad565b6001600160a01b0390811691821561030d5781169081156102d8577f204fe11fb8c7a51e768e894685e74e8fe9e8741492ea62d715826577a7a40eb59160209160016040519161026f83612001565b838352848301828152604084019142835288600052600487526001600160401b0360406000209a16998a6000528752604060002094511684549160ff60a01b9051151560a01b16916affffffffffffffffffffff60a81b161717835551910155604051908152a3005b60405162461bcd60e51b815260206004820152600d60248201526c2d32b937903932b1b2b4bb32b960991b6044820152606490fd5b60405162461bcd60e51b815260206004820152600a6024820152692d32b937903a37b5b2b760b11b6044820152606490fd5b600080fd5b3461033f57600036600319011261033f5760206040517f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e38152f35b3461033f57602036600319011261033f5760206001600160a01b03806103a3611f85565b166000526005825260406000205416604051908152f35b3461033f57600036600319011261033f576003546040516001600160a01b039091168152602090f35b3461033f57604036600319011261033f5761001b600435610402611f9b565b9080600052600080516020612d9583398151915260205261042a600160406000200154612909565b612b99565b3461033f57604036600319011261033f57610448611f85565b7fbfbeff51e13e04a61ba9e057bff368a2261ccf2b727d537858cf707a8304104c6020602435926104776128ad565b6001600160a01b03166000818152600c83526040908190208590555193845292a2005b3461033f57606036600319011261033f576104b3611f85565b6104bb611f9b565b6104c3611fb1565b917ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009182549360ff8560401c1615926001600160401b03861695861580610684575b6001809814908161067a575b159081610671575b5061065f5767ffffffffffffffff1981168717865584610640575b5061053d612cd0565b610545612cd0565b61054d612cd0565b85600080516020612db583398151915255610566612cd0565b6001600160a01b0390811690811561060b576105b9936bffffffffffffffffffffffff60a01b928360005416176000551690816105fe575b50506105a98161293c565b506105b3816129ca565b50612a7a565b506105c057005b805468ff0000000000000000191690556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b865416178555858061059e565b60405162461bcd60e51b815260206004820152600d60248201526c5a65726f20726567697374727960981b6044820152606490fd5b68ffffffffffffffffff19166801000000000000000117855586610534565b60405163f92ee8a960e01b8152600490fd5b90501588610519565b303b159150610511565b5084610505565b3461033f5760a036600319011261033f576106a4611f85565b604435906001600160401b038216820361033f576064356001600160a01b038116900361033f576084356001600160401b03811161033f576106ea903690600401612196565b926106f3612528565b6000805460405163185c596360e11b81526001600160a01b03868116600483015290929183916024918391165afa90811561099557600091610b25575b506020810151600a811015610b0f57600103610ada5761022061075691015115156124a9565b61075f33612c1c565b15610aa65761076f606435612c1c565b15610a685733600052600b60205261078a60406000206120a9565b60018060a01b0360643516600052600b60205260ff6107c560206107b160406000206120a9565b93816040519382858094519384920161214e565b8101600a81520301902054169081610a39575b50156109f4576107ea60243584612c50565b156109b75760405191826101208101106001600160401b03610120850111176109a157610930946001600160401b0361086b93602096610120870160405260018060a01b031686526024358787015216604085015260018060a01b0360643516606085015260016080850152600060a0850152600060c085015236916121de565b60e082015260405161087c81612052565b60008152610100820152604051809381926303f8d1cb60e21b835284600484015260018060a01b0381511660248401528481015160448401526001600160401b03604082015116606484015260018060a01b036060820151166084840152608081015160a484015260a0810151151560c484015260c0810151151560e484015261010061091b60e0830151610120610104870152610144860190612171565b91015183820360231901610124850152612171565b03816000305af1801561099557600090610962575b6020906001600080516020612db583398151915255604051908152f35b506020813d60201161098d575b8161097c60209383612088565b8101031261033f5760209051610945565b3d915061096f565b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b60405162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b6044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f4a7572697364696374696f6e206e6f7420616c6c6f77656400000000000000006044820152606490fd5b60ff91506020610a5691816040519382858094519384920161214e565b8101600a8152030190205416856107d8565b60405162461bcd60e51b8152602060048201526016602482015275149958da5c1a595b9d0812d650c81c995c5d5a5c995960521b6044820152606490fd5b60405162461bcd60e51b815260206004820152600c60248201526b12d650c81c995c5d5a5c995960a21b6044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c4e6f742049534f2d343231375760981b6044820152606490fd5b634e487b7160e01b600052602160045260246000fd5b610b4291503d806000833e610b3a8183612088565b8101906122b3565b85610730565b3461033f57600036600319011261033f57610b8e604051610b6881612037565b60058152640352e302e360dc1b6020820152604051918291602083526020830190612171565b0390f35b3461033f57604036600319011261033f576060610bad611f85565b610bb5612215565b610bbd612509565b5060018060a01b0380921660005260046020526001600160401b036040600020911660005260205260406000209060405190610bf882612001565b6040600184549283169485855260ff602086019460a01c1615158452015492019182526040519283525115156020830152516040820152f35b3461033f57602036600319011261033f576001600160a01b03610c52611f85565b166000526008602052602060ff604060002054166040519015158152f35b3461033f57600036600319011261033f57602060405160008152f35b3461033f57600036600319011261033f576000546040516001600160a01b039091168152602090f35b3461033f57606036600319011261033f57610cce611f85565b602435908115159182810361033f5760443591610ce96128ad565b60018060a01b03169283600052600860205260406000209060ff80198354169116179055600960205281604060002055600014610d4d5760207fa2c3276770fbba49137d4f6145f5306d181eb450e016bee9df0e78c729554e5791604051908152a2005b507ffb4ca6a2470de95e9f648557fae63380f22c4b760bd27b0571caf5977a30278a600080a2005b3461033f57604036600319011261033f57610d8e611f9b565b600435600052600080516020612d9583398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b3461033f57602036600319011261033f576001600160a01b03610df0611f85565b1660005260096020526020604060002054604051908152f35b3461033f57602036600319011261033f576004356000526006602052602060ff604060002054166040519015158152f35b3461033f57602036600319011261033f576004356001600160401b03811161033f573660238201121561033f5760ff610e966020610e83819436906024816004013591016121de565b816040519382858094519384920161214e565b8101600a81520301902054166040519015158152f35b3461033f57602036600319011261033f576001600160a01b03610ecd611f85565b1660005260076020526020604060002054604051908152f35b3461033f57604036600319011261033f57610eff611f85565b610f07612215565b90610f106128ad565b6001600160a01b031660008181526004602090815260408083206001600160401b0395909516808452949091528120805460ff60a01b191690557fcd50155673a3d71145772f9857052edc738a9ef46a69a04f1fed833f1708fb099080a3005b3461033f57604036600319011261033f57610f89611f85565b6001600160401b0360243581811161033f57610fa9903690600401612196565b9092610fb36128ad565b60018060a01b0316600052602092600b845260406000209282116109a157610fdb8354611fc7565b601f8111611087575b50600093601f8311600114611023575092819293600092611018575b5050600019600383901b1c191660019190911b179055005b013590508380611000565b90601f198316948460005282600020926000905b87821061106f575050836001959610611055575b505050811b019055005b0135600019600384901b60f8161c1916905583808061104b565b80600184968294958701358155019501920190611037565b8360005284600020601f840160051c8101918685106110c3575b601f0160051c01905b8181106110b75750610fe4565b600081556001016110aa565b90915081906110a1565b3461033f57604036600319011261033f5760606110e8611f85565b6110f0612215565b60018060a01b0380921660005260046020526001600160401b0360406000209116600052602052604060002060ff6001825492015491604051938116845260a01c16151560208301526040820152f35b3461033f57602036600319011261033f576001600160a01b03611161611f85565b16600052600c6020526020604060002054604051908152f35b3461033f57600036600319011261033f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036111e55760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60405163703e46dd60e11b8152600490fd5b604036600319011261033f5761120b611f85565b60249081356001600160401b03811161033f573660238201121561033f5761123c90369084816004013591016121de565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831630811490811561143a575b506111e5573360009081527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860209081526040909120549093907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e39060ff161561141d57508116926040516352d1902d60e01b81528181600481885afa600091816113ee575b5061131657604051634c9c8ce360e01b8152600481018690528690fd5b8490867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc918281036113d95750843b156113c3575080546001600160a01b03191682179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28351156113a95750600083819261001b95519101845af46113a3612558565b91612d11565b92505050346113b457005b63b398979f60e01b8152600490fd5b604051634c9c8ce360e01b815260048101849052fd5b60405190632a87526960e21b82526004820152fd5b9091508281813d8311611416575b6114068183612088565b8101031261033f575190876112f9565b503d6113fc565b856044916040519163e2517d3f60e01b8352336004840152820152fd5b9050837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141585611273565b3461033f57600036600319011261033f5760206040517f7045adfe67d5f94dbfddcdb901e44bef55baacabb398c7cddda1bfd7620b15688152f35b3461033f57602036600319011261033f576114bc611f85565b6114c4612855565b600380546001600160a01b0319166001600160a01b0392909216919091179055005b3461033f57600036600319011261033f576114ff612855565b600080808047818115611517575b3390f11561099557005b506108fc61150d565b3461033f57602036600319011261033f57611539611f85565b611541612855565b600280546001600160a01b0319166001600160a01b0392909216919091179055005b3461033f57604036600319011261033f5761157c611f9b565b336001600160a01b038216036115985761001b90600435612b99565b60405163334bd91960e11b8152600490fd5b3461033f57600036600319011261033f576002546040516001600160a01b039091168152602090f35b3461033f57602036600319011261033f576115ec611f85565b6115f4612855565b6001600160a01b03168015611620576bffffffffffffffffffffffff60a01b6001541617600155600080f35b60405162461bcd60e51b815260206004820152600b60248201526a2d32b937903937baba32b960a91b6044820152606490fd5b3461033f57602036600319011261033f576004356001600160401b03811161033f57611683903690600401612196565b9061168c612855565b60405182828237602081848101600a815203019020600160ff198254161790558160405192839283378101600081520390207fbd864a8a2ad6fc620a511b30b077e60d23c77c8635606d2db1e26078bf28595d600080a2005b3461033f57604036600319011261033f5761001b600435611704611f9b565b9080600052600080516020612d9583398151915260205261172c600160406000200154612909565b612b24565b3461033f57602036600319011261033f576001600160a01b03611752611f85565b16600052600b602052610b8e61176b60406000206120a9565b604051918291602083526020830190612171565b3461033f57602036600319011261033f57600435600052600080516020612d958339815191526020526020600160406000200154604051908152f35b60031960203682011261033f57600435906001600160401b03821161033f576101208091833603011261033f576117f0612528565b600080546001600160a01b0316919061180b6004850161222b565b60405163185c596360e11b81526001600160a01b03909116600482015292839060249082905afa91821561099557600092611eec575b5061185261022083015115156124a9565b81516001600160a01b031615611eb0576001600160a01b036118766004850161222b565b16600052600460205260406000206001600160401b03611898604486016124e8565b16600052602052604060002091604051926118b284612001565b80546001600160a01b038116855260a01c60ff161580156020860152600191909101546040850152611e6b5782516001600160a01b031615611e3357602484013515611dfd57610100810151602485013510611dc8570151602483013511611d93576001600160a01b036119286004840161222b565b1661197960008060405160208101906323b872dd60e01b825233602482015230604482015260248801356064820152606481526119648161201c565b519082865af1611972612558565b9083612d11565b8051908115159182611d70575b5050611d58575061199960a483016124fc565b80611d44575b611d33575b6119b060c483016124fc565b80611d1f575b611d0e575b6119c76064830161222b565b903360005260076020526040600020546040519260018060a01b0316602084015260248401356040840152336060840152608083015260808252611a0a8261201c565b60018060a01b0390511660405190602082015260208152611a2a81612037565b604051611a3681612037565b6001815260005b60208110611cf75750604051928360a08101106001600160401b0360a0860111176109a157611ade9260a08501604052845260208401526040830190815260006060840152604051611a8e81612052565b600081526080840152611aa38460040161222b565b9060405191611ab183612001565b6001600160a01b0316825260248501356020830152600060408301525190611ad882612734565b52612734565b506001546001600160a01b031690611b1a90602081611aff604487016124e8565b604051632bb74f2960e11b8152948592839260048401612757565b0381865afa91821561099557600092611cc3575b50814710611c8b57611b6592604092611b49604487016124e8565b90845180968195829463306ab04160e21b845260048401612757565b03925af190811561099557600091611c59575b503360005260076020526040600020918254926000198414611c43576001602094019055611ba88160040161222b565b90611bb5604482016124e8565b611bc16064830161222b565b6001600160401b03611bd560a485016124fc565b9260246040519501358552168684015260018060a01b0316604083015215156060820152827f6e13c3a4053492f10489076e138aeb13c656b658b1a5835874497ee79dfb5b156080339460018060a01b031693a46001600080516020612db583398151915255604051908152f35b634e487b7160e01b600052601160045260246000fd5b90506040813d604011611c83575b81611c7460409383612088565b8101031261033f575182611b78565b3d9150611c67565b60405162461bcd60e51b815260206004820152601060248201526f496e73756666696369656e742066656560801b6044820152606490fd5b9091506020813d602011611cef575b81611cdf60209383612088565b8101031261033f57519084611b2e565b3d9150611cd2565b602090611d02612509565b82828501015201611a3d565b611d1a826004016125fd565b6119bb565b506003546001600160a01b031615156119b6565b611d3f82600401612588565b6119a4565b506002546001600160a01b0316151561199f565b60249060405190635274afe760e01b82526004820152fd5b819250906020918101031261033f576020611d8b91016122a6565b158480611986565b60405162461bcd60e51b815260206004820152600d60248201526c41626f7665206d6178696d756d60981b6044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c42656c6f77206d696e696d756d60981b6044820152606490fd5b60405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103932b1b2b4bb32b960811b6044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527f44657374696e6174696f6e206e6f7420656e61626c65640000000000000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273105cdcd95d081b9bdd081c9959da5cdd195c995960621b6044820152606490fd5b611f029192503d806000833e610b3a8183612088565b9083611841565b3461033f57600036600319011261033f576001546040516001600160a01b039091168152602090f35b3461033f57602036600319011261033f576004359063ffffffff60e01b821680920361033f57602091637965db0b60e01b8114908115611f74575b5015158152f35b6301ffc9a760e01b14905083611f6d565b600435906001600160a01b038216820361033f57565b602435906001600160a01b038216820361033f57565b604435906001600160a01b038216820361033f57565b90600182811c92168015611ff7575b6020831014611fe157565b634e487b7160e01b600052602260045260246000fd5b91607f1691611fd6565b606081019081106001600160401b038211176109a157604052565b60a081019081106001600160401b038211176109a157604052565b604081019081106001600160401b038211176109a157604052565b602081019081106001600160401b038211176109a157604052565b60c081019081106001600160401b038211176109a157604052565b90601f801991011681019081106001600160401b038211176109a157604052565b906040519182600082546120bc81611fc7565b9081845260209460019160018116908160001461212c57506001146120ed575b5050506120eb92500383612088565b565b600090815285812095935091905b8183106121145750506120eb93508201013880806120dc565b855488840185015294850194879450918301916120fb565b925050506120eb94925060ff191682840152151560051b8201013880806120dc565b60005b8381106121615750506000910152565b8181015183820152602001612151565b9060209161218a8151809281855285808601910161214e565b601f01601f1916010190565b9181601f8401121561033f578235916001600160401b03831161033f576020838186019501011161033f57565b6001600160401b0381116109a157601f01601f191660200190565b9291926121ea826121c3565b916121f86040519384612088565b82948184528183011161033f578281602093846000960137010152565b602435906001600160401b038216820361033f57565b356001600160a01b038116810361033f5790565b51906001600160a01b038216820361033f57565b81601f8201121561033f578051612269816121c3565b926122776040519485612088565b8184526020828401011161033f57612295916020808501910161214e565b90565b519060ff8216820361033f57565b5190811515820361033f57565b90602091828183031261033f5780516001600160401b039182821161033f57019161028093848483031261033f57604051948501858110848211176109a1576040526122fe8461223f565b855280840151600a81101561033f57818601526040840151600581101561033f576040860152606084015183811161033f578261233c918601612253565b6060860152608084015183811161033f5782612359918601612253565b608086015261236a60a08501612298565b60a086015260c084015183811161033f5782612387918601612253565b60c086015261239860e08501612298565b60e08601526101008085015190860152610120808501519086015261014080850151908601526101606123cc81860161223f565b908601526101806123de8186016122a6565b908601526101a080850151908601526101c06123fb8186016122a6565b908601526101e0918285015184811161033f57850181601f8201121561033f5780519485116109a1578460051b906040519561243985840188612088565b8652838087019282010192831161033f578301905b828210612492575050505083015261020080820151908301526102206124758183016122a6565b908301526102408082015190830152610260809101519082015290565b83809161249e8461223f565b81520191019061244e565b156124b057565b60405162461bcd60e51b815260206004820152601060248201526f4173736574206e6f742061637469766560801b6044820152606490fd5b356001600160401b038116810361033f5790565b35801515810361033f5790565b6040519061251682612001565b60006040838281528260208201520152565b600080516020612db583398151915260028154146125465760029055565b604051633ee5aeb560e01b8152600490fd5b3d15612583573d90612569826121c3565b916125776040519384612088565b82523d6000602084013e565b606090565b6002546001600160a01b0390811680156125f85782600080949360206125ae839661222b565b93604051928284019563b7b3142f60e01b87521660248401520135604482015260606064820152816084820152608481526125e88161206d565b51925af1506125f5612558565b50565b505050565b6003546001600160a01b0390811680156125f8576000923384526020906005825284846040822054169384156126b2575b505083831661263f575b5050505050565b84936001600160401b0382612654879461222b565b94612661604083016124e8565b916040519482860197630f48aa5f60e31b8952876024880152166044860152013560648401521660848201526084815261269a8161206d565b51925af1506126a7612558565b503880808080612638565b81906040518286820191635a5eb7a360e11b8352336024820152602481526126d981612001565b51925af16126e5612558565b906126f2575b859061262e565b9092508181805181010312612730578101519183831680930361273057338552600582526040852080546001600160a01b03191684179055386126eb565b8480fd5b8051156127415760200190565b634e487b7160e01b600052603260045260246000fd5b909291926001600160401b03604091168252602091604083820152612788855160a0604084015260e0830190612171565b91838601516127a6603f199460609286868303016060870152612171565b604088015195858583030160808601528080885193848152019701936000936000915b848310612801575050505050505060c06080612295959660018060a01b0360608201511660a085015201519282850301910152612171565b90919293949598818a5160018060a01b038151168352868101518784015201516002811015612841578282015282019884019594939260010191906127c9565b634e487b7160e01b88526021600452602488fd5b3360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604081205460ff161561288f5750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b3360009081527ff0032186d03910e820cb3fd115c5fea4f88d913d568f567015a009fe33498ecd60205260409020547f7045adfe67d5f94dbfddcdb901e44bef55baacabb398c7cddda1bfd7620b15689060ff161561288f5750565b80600052600080516020612d9583398151915260205260406000203360005260205260ff604060002054161561288f5750565b6001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812054909190600080516020612d958339815191529060ff166129c5578280526020526040822081835260205260408220600160ff198254161790553391600080516020612d758339815191528180a4600190565b505090565b6001600160a01b031660008181527ff0032186d03910e820cb3fd115c5fea4f88d913d568f567015a009fe33498ecd60205260408120549091907f7045adfe67d5f94dbfddcdb901e44bef55baacabb398c7cddda1bfd7620b156890600080516020612d958339815191529060ff16612a74578184526020526040832082845260205260408320600160ff19825416179055600080516020612d75833981519152339380a4600190565b50505090565b6001600160a01b031660008181527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860205260408120549091907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e390600080516020612d958339815191529060ff16612a74578184526020526040832082845260205260408320600160ff19825416179055600080516020612d75833981519152339380a4600190565b90600091808352600080516020612d9583398151915280602052604084209260018060a01b03169283855260205260ff60408520541615600014612a74578184526020526040832082845260205260408320600160ff19825416179055600080516020612d75833981519152339380a4600190565b90600091808352600080516020612d9583398151915280602052604084209260018060a01b03169283855260205260ff604085205416600014612a7457818452602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b6001600160a01b031660009081526008602052604090205460ff1680612c3f5790565b506009602052604060002054421090565b60405163fb13278b60e01b81526001600160a01b039190911690602081600481855afa60009181612c9c575b50612c955750600052600c602052604060002054101590565b9050101590565b9091506020813d602011612cc8575b81612cb860209383612088565b8101031261033f57519038612c7c565b3d9150612cab565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612cff57565b604051631afcd79f60e31b8152600490fd5b90612d385750805115612d2657805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580612d6b575b612d49575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15612d4156fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220842cdbf9d289e234dfe12ca653a910904bcf01992fe11c908f5b7ae7aa9b825664736f6c63430008160033",
"deployedBytecode": "0x608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c90816301ffc9a714611f32575080630de2298414611f095780630fe3472c146117bb578063248a9ca31461177f57806325ee0b6a146117315780632958d0311461037f5780632f2ff15d146116e5578063314a8c8a1461165357806331c1e16a146115d357806333827438146115aa57806336568abe146115635780633c1624d4146115205780633ccfd60b146114e65780633ea7fbdb146114a35780634be40fd1146114685780634f1ef286146111f757806352d1902d1461117a57806357eb5a331461114057806363673e50146110cd578063659dc12114610f705780636834e3a814610eac578063704f884814610ee65780637ecebe0014610eac578063826f911d14610e3a57806388ba16ab14610e095780638b9a9c2b14610dcf57806391d1485414610d75578063970a8b9514610cb5578063979d7e8614610c8c578063a217fddf14610c70578063a5410a6614610c31578063a6425c3114610b92578063ad3cb1cc14610b48578063c01f085c1461068b578063c0c53b8b1461049a578063cc653fc81461042f578063d547741f146103e3578063d8a06f73146103ba578063f2380a081461037f578063f72c0d8b146103445763fa29f526146101ed573861000f565b3461033f57606036600319011261033f57610206611f85565b61020e612215565b90610217611fb1565b906102206128ad565b6001600160a01b0390811691821561030d5781169081156102d8577f204fe11fb8c7a51e768e894685e74e8fe9e8741492ea62d715826577a7a40eb59160209160016040519161026f83612001565b838352848301828152604084019142835288600052600487526001600160401b0360406000209a16998a6000528752604060002094511684549160ff60a01b9051151560a01b16916affffffffffffffffffffff60a81b161717835551910155604051908152a3005b60405162461bcd60e51b815260206004820152600d60248201526c2d32b937903932b1b2b4bb32b960991b6044820152606490fd5b60405162461bcd60e51b815260206004820152600a6024820152692d32b937903a37b5b2b760b11b6044820152606490fd5b600080fd5b3461033f57600036600319011261033f5760206040517f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e38152f35b3461033f57602036600319011261033f5760206001600160a01b03806103a3611f85565b166000526005825260406000205416604051908152f35b3461033f57600036600319011261033f576003546040516001600160a01b039091168152602090f35b3461033f57604036600319011261033f5761001b600435610402611f9b565b9080600052600080516020612d9583398151915260205261042a600160406000200154612909565b612b99565b3461033f57604036600319011261033f57610448611f85565b7fbfbeff51e13e04a61ba9e057bff368a2261ccf2b727d537858cf707a8304104c6020602435926104776128ad565b6001600160a01b03166000818152600c83526040908190208590555193845292a2005b3461033f57606036600319011261033f576104b3611f85565b6104bb611f9b565b6104c3611fb1565b917ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009182549360ff8560401c1615926001600160401b03861695861580610684575b6001809814908161067a575b159081610671575b5061065f5767ffffffffffffffff1981168717865584610640575b5061053d612cd0565b610545612cd0565b61054d612cd0565b85600080516020612db583398151915255610566612cd0565b6001600160a01b0390811690811561060b576105b9936bffffffffffffffffffffffff60a01b928360005416176000551690816105fe575b50506105a98161293c565b506105b3816129ca565b50612a7a565b506105c057005b805468ff0000000000000000191690556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b865416178555858061059e565b60405162461bcd60e51b815260206004820152600d60248201526c5a65726f20726567697374727960981b6044820152606490fd5b68ffffffffffffffffff19166801000000000000000117855586610534565b60405163f92ee8a960e01b8152600490fd5b90501588610519565b303b159150610511565b5084610505565b3461033f5760a036600319011261033f576106a4611f85565b604435906001600160401b038216820361033f576064356001600160a01b038116900361033f576084356001600160401b03811161033f576106ea903690600401612196565b926106f3612528565b6000805460405163185c596360e11b81526001600160a01b03868116600483015290929183916024918391165afa90811561099557600091610b25575b506020810151600a811015610b0f57600103610ada5761022061075691015115156124a9565b61075f33612c1c565b15610aa65761076f606435612c1c565b15610a685733600052600b60205261078a60406000206120a9565b60018060a01b0360643516600052600b60205260ff6107c560206107b160406000206120a9565b93816040519382858094519384920161214e565b8101600a81520301902054169081610a39575b50156109f4576107ea60243584612c50565b156109b75760405191826101208101106001600160401b03610120850111176109a157610930946001600160401b0361086b93602096610120870160405260018060a01b031686526024358787015216604085015260018060a01b0360643516606085015260016080850152600060a0850152600060c085015236916121de565b60e082015260405161087c81612052565b60008152610100820152604051809381926303f8d1cb60e21b835284600484015260018060a01b0381511660248401528481015160448401526001600160401b03604082015116606484015260018060a01b036060820151166084840152608081015160a484015260a0810151151560c484015260c0810151151560e484015261010061091b60e0830151610120610104870152610144860190612171565b91015183820360231901610124850152612171565b03816000305af1801561099557600090610962575b6020906001600080516020612db583398151915255604051908152f35b506020813d60201161098d575b8161097c60209383612088565b8101031261033f5760209051610945565b3d915061096f565b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b60405162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b6044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f4a7572697364696374696f6e206e6f7420616c6c6f77656400000000000000006044820152606490fd5b60ff91506020610a5691816040519382858094519384920161214e565b8101600a8152030190205416856107d8565b60405162461bcd60e51b8152602060048201526016602482015275149958da5c1a595b9d0812d650c81c995c5d5a5c995960521b6044820152606490fd5b60405162461bcd60e51b815260206004820152600c60248201526b12d650c81c995c5d5a5c995960a21b6044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c4e6f742049534f2d343231375760981b6044820152606490fd5b634e487b7160e01b600052602160045260246000fd5b610b4291503d806000833e610b3a8183612088565b8101906122b3565b85610730565b3461033f57600036600319011261033f57610b8e604051610b6881612037565b60058152640352e302e360dc1b6020820152604051918291602083526020830190612171565b0390f35b3461033f57604036600319011261033f576060610bad611f85565b610bb5612215565b610bbd612509565b5060018060a01b0380921660005260046020526001600160401b036040600020911660005260205260406000209060405190610bf882612001565b6040600184549283169485855260ff602086019460a01c1615158452015492019182526040519283525115156020830152516040820152f35b3461033f57602036600319011261033f576001600160a01b03610c52611f85565b166000526008602052602060ff604060002054166040519015158152f35b3461033f57600036600319011261033f57602060405160008152f35b3461033f57600036600319011261033f576000546040516001600160a01b039091168152602090f35b3461033f57606036600319011261033f57610cce611f85565b602435908115159182810361033f5760443591610ce96128ad565b60018060a01b03169283600052600860205260406000209060ff80198354169116179055600960205281604060002055600014610d4d5760207fa2c3276770fbba49137d4f6145f5306d181eb450e016bee9df0e78c729554e5791604051908152a2005b507ffb4ca6a2470de95e9f648557fae63380f22c4b760bd27b0571caf5977a30278a600080a2005b3461033f57604036600319011261033f57610d8e611f9b565b600435600052600080516020612d9583398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b3461033f57602036600319011261033f576001600160a01b03610df0611f85565b1660005260096020526020604060002054604051908152f35b3461033f57602036600319011261033f576004356000526006602052602060ff604060002054166040519015158152f35b3461033f57602036600319011261033f576004356001600160401b03811161033f573660238201121561033f5760ff610e966020610e83819436906024816004013591016121de565b816040519382858094519384920161214e565b8101600a81520301902054166040519015158152f35b3461033f57602036600319011261033f576001600160a01b03610ecd611f85565b1660005260076020526020604060002054604051908152f35b3461033f57604036600319011261033f57610eff611f85565b610f07612215565b90610f106128ad565b6001600160a01b031660008181526004602090815260408083206001600160401b0395909516808452949091528120805460ff60a01b191690557fcd50155673a3d71145772f9857052edc738a9ef46a69a04f1fed833f1708fb099080a3005b3461033f57604036600319011261033f57610f89611f85565b6001600160401b0360243581811161033f57610fa9903690600401612196565b9092610fb36128ad565b60018060a01b0316600052602092600b845260406000209282116109a157610fdb8354611fc7565b601f8111611087575b50600093601f8311600114611023575092819293600092611018575b5050600019600383901b1c191660019190911b179055005b013590508380611000565b90601f198316948460005282600020926000905b87821061106f575050836001959610611055575b505050811b019055005b0135600019600384901b60f8161c1916905583808061104b565b80600184968294958701358155019501920190611037565b8360005284600020601f840160051c8101918685106110c3575b601f0160051c01905b8181106110b75750610fe4565b600081556001016110aa565b90915081906110a1565b3461033f57604036600319011261033f5760606110e8611f85565b6110f0612215565b60018060a01b0380921660005260046020526001600160401b0360406000209116600052602052604060002060ff6001825492015491604051938116845260a01c16151560208301526040820152f35b3461033f57602036600319011261033f576001600160a01b03611161611f85565b16600052600c6020526020604060002054604051908152f35b3461033f57600036600319011261033f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036111e55760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60405163703e46dd60e11b8152600490fd5b604036600319011261033f5761120b611f85565b60249081356001600160401b03811161033f573660238201121561033f5761123c90369084816004013591016121de565b6001600160a01b03917f0000000000000000000000000000000000000000000000000000000000000000831630811490811561143a575b506111e5573360009081527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860209081526040909120549093907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e39060ff161561141d57508116926040516352d1902d60e01b81528181600481885afa600091816113ee575b5061131657604051634c9c8ce360e01b8152600481018690528690fd5b8490867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc918281036113d95750843b156113c3575080546001600160a01b03191682179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28351156113a95750600083819261001b95519101845af46113a3612558565b91612d11565b92505050346113b457005b63b398979f60e01b8152600490fd5b604051634c9c8ce360e01b815260048101849052fd5b60405190632a87526960e21b82526004820152fd5b9091508281813d8311611416575b6114068183612088565b8101031261033f575190876112f9565b503d6113fc565b856044916040519163e2517d3f60e01b8352336004840152820152fd5b9050837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141585611273565b3461033f57600036600319011261033f5760206040517f7045adfe67d5f94dbfddcdb901e44bef55baacabb398c7cddda1bfd7620b15688152f35b3461033f57602036600319011261033f576114bc611f85565b6114c4612855565b600380546001600160a01b0319166001600160a01b0392909216919091179055005b3461033f57600036600319011261033f576114ff612855565b600080808047818115611517575b3390f11561099557005b506108fc61150d565b3461033f57602036600319011261033f57611539611f85565b611541612855565b600280546001600160a01b0319166001600160a01b0392909216919091179055005b3461033f57604036600319011261033f5761157c611f9b565b336001600160a01b038216036115985761001b90600435612b99565b60405163334bd91960e11b8152600490fd5b3461033f57600036600319011261033f576002546040516001600160a01b039091168152602090f35b3461033f57602036600319011261033f576115ec611f85565b6115f4612855565b6001600160a01b03168015611620576bffffffffffffffffffffffff60a01b6001541617600155600080f35b60405162461bcd60e51b815260206004820152600b60248201526a2d32b937903937baba32b960a91b6044820152606490fd5b3461033f57602036600319011261033f576004356001600160401b03811161033f57611683903690600401612196565b9061168c612855565b60405182828237602081848101600a815203019020600160ff198254161790558160405192839283378101600081520390207fbd864a8a2ad6fc620a511b30b077e60d23c77c8635606d2db1e26078bf28595d600080a2005b3461033f57604036600319011261033f5761001b600435611704611f9b565b9080600052600080516020612d9583398151915260205261172c600160406000200154612909565b612b24565b3461033f57602036600319011261033f576001600160a01b03611752611f85565b16600052600b602052610b8e61176b60406000206120a9565b604051918291602083526020830190612171565b3461033f57602036600319011261033f57600435600052600080516020612d958339815191526020526020600160406000200154604051908152f35b60031960203682011261033f57600435906001600160401b03821161033f576101208091833603011261033f576117f0612528565b600080546001600160a01b0316919061180b6004850161222b565b60405163185c596360e11b81526001600160a01b03909116600482015292839060249082905afa91821561099557600092611eec575b5061185261022083015115156124a9565b81516001600160a01b031615611eb0576001600160a01b036118766004850161222b565b16600052600460205260406000206001600160401b03611898604486016124e8565b16600052602052604060002091604051926118b284612001565b80546001600160a01b038116855260a01c60ff161580156020860152600191909101546040850152611e6b5782516001600160a01b031615611e3357602484013515611dfd57610100810151602485013510611dc8570151602483013511611d93576001600160a01b036119286004840161222b565b1661197960008060405160208101906323b872dd60e01b825233602482015230604482015260248801356064820152606481526119648161201c565b519082865af1611972612558565b9083612d11565b8051908115159182611d70575b5050611d58575061199960a483016124fc565b80611d44575b611d33575b6119b060c483016124fc565b80611d1f575b611d0e575b6119c76064830161222b565b903360005260076020526040600020546040519260018060a01b0316602084015260248401356040840152336060840152608083015260808252611a0a8261201c565b60018060a01b0390511660405190602082015260208152611a2a81612037565b604051611a3681612037565b6001815260005b60208110611cf75750604051928360a08101106001600160401b0360a0860111176109a157611ade9260a08501604052845260208401526040830190815260006060840152604051611a8e81612052565b600081526080840152611aa38460040161222b565b9060405191611ab183612001565b6001600160a01b0316825260248501356020830152600060408301525190611ad882612734565b52612734565b506001546001600160a01b031690611b1a90602081611aff604487016124e8565b604051632bb74f2960e11b8152948592839260048401612757565b0381865afa91821561099557600092611cc3575b50814710611c8b57611b6592604092611b49604487016124e8565b90845180968195829463306ab04160e21b845260048401612757565b03925af190811561099557600091611c59575b503360005260076020526040600020918254926000198414611c43576001602094019055611ba88160040161222b565b90611bb5604482016124e8565b611bc16064830161222b565b6001600160401b03611bd560a485016124fc565b9260246040519501358552168684015260018060a01b0316604083015215156060820152827f6e13c3a4053492f10489076e138aeb13c656b658b1a5835874497ee79dfb5b156080339460018060a01b031693a46001600080516020612db583398151915255604051908152f35b634e487b7160e01b600052601160045260246000fd5b90506040813d604011611c83575b81611c7460409383612088565b8101031261033f575182611b78565b3d9150611c67565b60405162461bcd60e51b815260206004820152601060248201526f496e73756666696369656e742066656560801b6044820152606490fd5b9091506020813d602011611cef575b81611cdf60209383612088565b8101031261033f57519084611b2e565b3d9150611cd2565b602090611d02612509565b82828501015201611a3d565b611d1a826004016125fd565b6119bb565b506003546001600160a01b031615156119b6565b611d3f82600401612588565b6119a4565b506002546001600160a01b0316151561199f565b60249060405190635274afe760e01b82526004820152fd5b819250906020918101031261033f576020611d8b91016122a6565b158480611986565b60405162461bcd60e51b815260206004820152600d60248201526c41626f7665206d6178696d756d60981b6044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c42656c6f77206d696e696d756d60981b6044820152606490fd5b60405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103932b1b2b4bb32b960811b6044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527f44657374696e6174696f6e206e6f7420656e61626c65640000000000000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273105cdcd95d081b9bdd081c9959da5cdd195c995960621b6044820152606490fd5b611f029192503d806000833e610b3a8183612088565b9083611841565b3461033f57600036600319011261033f576001546040516001600160a01b039091168152602090f35b3461033f57602036600319011261033f576004359063ffffffff60e01b821680920361033f57602091637965db0b60e01b8114908115611f74575b5015158152f35b6301ffc9a760e01b14905083611f6d565b600435906001600160a01b038216820361033f57565b602435906001600160a01b038216820361033f57565b604435906001600160a01b038216820361033f57565b90600182811c92168015611ff7575b6020831014611fe157565b634e487b7160e01b600052602260045260246000fd5b91607f1691611fd6565b606081019081106001600160401b038211176109a157604052565b60a081019081106001600160401b038211176109a157604052565b604081019081106001600160401b038211176109a157604052565b602081019081106001600160401b038211176109a157604052565b60c081019081106001600160401b038211176109a157604052565b90601f801991011681019081106001600160401b038211176109a157604052565b906040519182600082546120bc81611fc7565b9081845260209460019160018116908160001461212c57506001146120ed575b5050506120eb92500383612088565b565b600090815285812095935091905b8183106121145750506120eb93508201013880806120dc565b855488840185015294850194879450918301916120fb565b925050506120eb94925060ff191682840152151560051b8201013880806120dc565b60005b8381106121615750506000910152565b8181015183820152602001612151565b9060209161218a8151809281855285808601910161214e565b601f01601f1916010190565b9181601f8401121561033f578235916001600160401b03831161033f576020838186019501011161033f57565b6001600160401b0381116109a157601f01601f191660200190565b9291926121ea826121c3565b916121f86040519384612088565b82948184528183011161033f578281602093846000960137010152565b602435906001600160401b038216820361033f57565b356001600160a01b038116810361033f5790565b51906001600160a01b038216820361033f57565b81601f8201121561033f578051612269816121c3565b926122776040519485612088565b8184526020828401011161033f57612295916020808501910161214e565b90565b519060ff8216820361033f57565b5190811515820361033f57565b90602091828183031261033f5780516001600160401b039182821161033f57019161028093848483031261033f57604051948501858110848211176109a1576040526122fe8461223f565b855280840151600a81101561033f57818601526040840151600581101561033f576040860152606084015183811161033f578261233c918601612253565b6060860152608084015183811161033f5782612359918601612253565b608086015261236a60a08501612298565b60a086015260c084015183811161033f5782612387918601612253565b60c086015261239860e08501612298565b60e08601526101008085015190860152610120808501519086015261014080850151908601526101606123cc81860161223f565b908601526101806123de8186016122a6565b908601526101a080850151908601526101c06123fb8186016122a6565b908601526101e0918285015184811161033f57850181601f8201121561033f5780519485116109a1578460051b906040519561243985840188612088565b8652838087019282010192831161033f578301905b828210612492575050505083015261020080820151908301526102206124758183016122a6565b908301526102408082015190830152610260809101519082015290565b83809161249e8461223f565b81520191019061244e565b156124b057565b60405162461bcd60e51b815260206004820152601060248201526f4173736574206e6f742061637469766560801b6044820152606490fd5b356001600160401b038116810361033f5790565b35801515810361033f5790565b6040519061251682612001565b60006040838281528260208201520152565b600080516020612db583398151915260028154146125465760029055565b604051633ee5aeb560e01b8152600490fd5b3d15612583573d90612569826121c3565b916125776040519384612088565b82523d6000602084013e565b606090565b6002546001600160a01b0390811680156125f85782600080949360206125ae839661222b565b93604051928284019563b7b3142f60e01b87521660248401520135604482015260606064820152816084820152608481526125e88161206d565b51925af1506125f5612558565b50565b505050565b6003546001600160a01b0390811680156125f8576000923384526020906005825284846040822054169384156126b2575b505083831661263f575b5050505050565b84936001600160401b0382612654879461222b565b94612661604083016124e8565b916040519482860197630f48aa5f60e31b8952876024880152166044860152013560648401521660848201526084815261269a8161206d565b51925af1506126a7612558565b503880808080612638565b81906040518286820191635a5eb7a360e11b8352336024820152602481526126d981612001565b51925af16126e5612558565b906126f2575b859061262e565b9092508181805181010312612730578101519183831680930361273057338552600582526040852080546001600160a01b03191684179055386126eb565b8480fd5b8051156127415760200190565b634e487b7160e01b600052603260045260246000fd5b909291926001600160401b03604091168252602091604083820152612788855160a0604084015260e0830190612171565b91838601516127a6603f199460609286868303016060870152612171565b604088015195858583030160808601528080885193848152019701936000936000915b848310612801575050505050505060c06080612295959660018060a01b0360608201511660a085015201519282850301910152612171565b90919293949598818a5160018060a01b038151168352868101518784015201516002811015612841578282015282019884019594939260010191906127c9565b634e487b7160e01b88526021600452602488fd5b3360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604081205460ff161561288f5750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b3360009081527ff0032186d03910e820cb3fd115c5fea4f88d913d568f567015a009fe33498ecd60205260409020547f7045adfe67d5f94dbfddcdb901e44bef55baacabb398c7cddda1bfd7620b15689060ff161561288f5750565b80600052600080516020612d9583398151915260205260406000203360005260205260ff604060002054161561288f5750565b6001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812054909190600080516020612d958339815191529060ff166129c5578280526020526040822081835260205260408220600160ff198254161790553391600080516020612d758339815191528180a4600190565b505090565b6001600160a01b031660008181527ff0032186d03910e820cb3fd115c5fea4f88d913d568f567015a009fe33498ecd60205260408120549091907f7045adfe67d5f94dbfddcdb901e44bef55baacabb398c7cddda1bfd7620b156890600080516020612d958339815191529060ff16612a74578184526020526040832082845260205260408320600160ff19825416179055600080516020612d75833981519152339380a4600190565b50505090565b6001600160a01b031660008181527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860205260408120549091907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e390600080516020612d958339815191529060ff16612a74578184526020526040832082845260205260408320600160ff19825416179055600080516020612d75833981519152339380a4600190565b90600091808352600080516020612d9583398151915280602052604084209260018060a01b03169283855260205260ff60408520541615600014612a74578184526020526040832082845260205260408320600160ff19825416179055600080516020612d75833981519152339380a4600190565b90600091808352600080516020612d9583398151915280602052604084209260018060a01b03169283855260205260ff604085205416600014612a7457818452602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b6001600160a01b031660009081526008602052604090205460ff1680612c3f5790565b506009602052604060002054421090565b60405163fb13278b60e01b81526001600160a01b039190911690602081600481855afa60009181612c9c575b50612c955750600052600c602052604060002054101590565b9050101590565b9091506020813d602011612cc8575b81612cb860209383612088565b8101031261033f57519038612c7c565b3d9150612cab565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612cff57565b604051631afcd79f60e31b8152600490fd5b90612d385750805115612d2657805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580612d6b575b612d49575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15612d4156fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220842cdbf9d289e234dfe12ca653a910904bcf01992fe11c908f5b7ae7aa9b825664736f6c63430008160033",
"linkReferences": {},
"deployedLinkReferences": {}
}