{
  "abi": [
    { "type": "constructor", "inputs": [], "stateMutability": "nonpayable" },
    { "type": "receive", "stateMutability": "payable" },
    {
      "type": "function",
      "name": "MINIMUM_BRIDGE_AMOUNT",
      "inputs": [],
      "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "UPGRADE_INTERFACE_VERSION",
      "inputs": [],
      "outputs": [{ "name": "", "type": "string", "internalType": "string" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "allowlistDestinationChain",
      "inputs": [
        { "name": "destinationChainSelector", "type": "uint64", "internalType": "uint64" },
        { "name": "allow", "type": "bool", "internalType": "bool" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "estimateFees",
      "inputs": [
        { "name": "destinationChainSelector", "type": "uint64", "internalType": "uint64" },
        { "name": "receiver", "type": "address", "internalType": "address" },
        { "name": "amount", "type": "uint256", "internalType": "uint256" }
      ],
      "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "initialize",
      "inputs": [
        { "name": "router", "type": "address", "internalType": "address" },
        { "name": "tokenToBridge", "type": "address", "internalType": "address" },
        { "name": "addressProvider", "type": "address", "internalType": "address" },
        { "name": "extraArgs", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "proxiableUUID",
      "inputs": [],
      "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "s_addressProvider",
      "inputs": [],
      "outputs": [{ "name": "", "type": "address", "internalType": "contract IAddressProvider" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "s_allowlistedDestinationChains",
      "inputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }],
      "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "s_extraArgs",
      "inputs": [],
      "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "s_router",
      "inputs": [],
      "outputs": [{ "name": "", "type": "address", "internalType": "contract IRouterClient" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "s_sponsoredFees",
      "inputs": [],
      "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "s_tokenToBridge",
      "inputs": [],
      "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "s_whitelistedMerkleRoot",
      "inputs": [],
      "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "sendMessage",
      "inputs": [
        { "name": "destinationChainSelector", "type": "uint64", "internalType": "uint64" },
        { "name": "receiver", "type": "address", "internalType": "address" },
        { "name": "amount", "type": "uint256", "internalType": "uint256" },
        { "name": "_proof", "type": "bytes32[]", "internalType": "bytes32[]" }
      ],
      "outputs": [{ "name": "messageId", "type": "bytes32", "internalType": "bytes32" }],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "setAddressProvider",
      "inputs": [{ "name": "newAddressProvider", "type": "address", "internalType": "address" }],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "setExtraArgs",
      "inputs": [{ "name": "extraArgs", "type": "bytes", "internalType": "bytes" }],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "setSponsoredFees",
      "inputs": [{ "name": "sponsoredFees", "type": "bool", "internalType": "bool" }],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "updateWhitelistedRoot",
      "inputs": [{ "name": "newRoot", "type": "bytes32", "internalType": "bytes32" }],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "upgradeToAndCall",
      "inputs": [
        { "name": "newImplementation", "type": "address", "internalType": "address" },
        { "name": "data", "type": "bytes", "internalType": "bytes" }
      ],
      "outputs": [],
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "withdraw",
      "inputs": [{ "name": "beneficiary", "type": "address", "internalType": "address" }],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "event",
      "name": "Initialized",
      "inputs": [{ "name": "version", "type": "uint64", "indexed": false, "internalType": "uint64" }],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Sender__AddressProviderUpdated",
      "inputs": [{ "name": "newAddressProvider", "type": "address", "indexed": false, "internalType": "address" }],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Sender__DestinationChainAllowlisted",
      "inputs": [
        { "name": "destinationChainSelector", "type": "uint64", "indexed": false, "internalType": "uint64" },
        { "name": "allow", "type": "bool", "indexed": false, "internalType": "bool" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Sender__ExtraArgsUpdated",
      "inputs": [{ "name": "", "type": "bytes", "indexed": false, "internalType": "bytes" }],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Sender__MessageSent",
      "inputs": [
        { "name": "userSource", "type": "address", "indexed": true, "internalType": "address" },
        { "name": "messageId", "type": "bytes32", "indexed": true, "internalType": "bytes32" },
        { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Sender__SponsoredFeesUpdated",
      "inputs": [{ "name": "", "type": "bool", "indexed": false, "internalType": "bool" }],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Sender__WhitelistedRootUpdated",
      "inputs": [{ "name": "newRoot", "type": "bytes32", "indexed": false, "internalType": "bytes32" }],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Sender__Withdrawn",
      "inputs": [
        { "name": "beneficiary", "type": "address", "indexed": false, "internalType": "address" },
        { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Upgraded",
      "inputs": [{ "name": "implementation", "type": "address", "indexed": true, "internalType": "address" }],
      "anonymous": false
    },
    { "type": "error", "name": "AddressCantBeZero", "inputs": [] },
    {
      "type": "error",
      "name": "AddressEmptyCode",
      "inputs": [{ "name": "target", "type": "address", "internalType": "address" }]
    },
    {
      "type": "error",
      "name": "AmountLessThanMin",
      "inputs": [
        { "name": "amount", "type": "uint256", "internalType": "uint256" },
        { "name": "minAmount", "type": "uint256", "internalType": "uint256" }
      ]
    },
    {
      "type": "error",
      "name": "CallerNotMaintainer",
      "inputs": [
        { "name": "role", "type": "bytes32", "internalType": "bytes32" },
        { "name": "caller", "type": "address", "internalType": "address" }
      ]
    },
    {
      "type": "error",
      "name": "ERC1967InvalidImplementation",
      "inputs": [{ "name": "implementation", "type": "address", "internalType": "address" }]
    },
    { "type": "error", "name": "ERC1967NonPayable", "inputs": [] },
    { "type": "error", "name": "FailedCall", "inputs": [] },
    {
      "type": "error",
      "name": "FailedToWithdraw",
      "inputs": [
        { "name": "to", "type": "address", "internalType": "address" },
        { "name": "amount", "type": "uint256", "internalType": "uint256" }
      ]
    },
    {
      "type": "error",
      "name": "InsufficientBalance",
      "inputs": [
        { "name": "amount", "type": "uint256", "internalType": "uint256" },
        { "name": "neededAmount", "type": "uint256", "internalType": "uint256" }
      ]
    },
    { "type": "error", "name": "InvalidInitialization", "inputs": [] },
    { "type": "error", "name": "NotInitializing", "inputs": [] },
    {
      "type": "error",
      "name": "NotWhitelisted",
      "inputs": [{ "name": "addr", "type": "address", "internalType": "address" }]
    },
    { "type": "error", "name": "NothingToWithdraw", "inputs": [] },
    {
      "type": "error",
      "name": "SafeERC20FailedOperation",
      "inputs": [{ "name": "token", "type": "address", "internalType": "address" }]
    },
    { "type": "error", "name": "Sender__ExtraArgsLengthZero", "inputs": [] },
    { "type": "error", "name": "Sender__InvalidChainSelector", "inputs": [] },
    {
      "type": "error",
      "name": "Sender__NotUserCentralized",
      "inputs": [
        { "name": "", "type": "bytes32", "internalType": "bytes32" },
        { "name": "", "type": "address", "internalType": "address" }
      ]
    },
    {
      "type": "error",
      "name": "Sender__UnauthorizedDestinationChain",
      "inputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }]
    },
    {
      "type": "error",
      "name": "Sender__UnexpectedEtherSent",
      "inputs": [
        { "name": "", "type": "address", "internalType": "address" },
        { "name": "", "type": "uint256", "internalType": "uint256" }
      ]
    },
    { "type": "error", "name": "UUPSUnauthorizedCallContext", "inputs": [] },
    {
      "type": "error",
      "name": "UUPSUnsupportedProxiableUUID",
      "inputs": [{ "name": "slot", "type": "bytes32", "internalType": "bytes32" }]
    }
  ],
  "bytecode": {
    "object": "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152505f600160146101000a81548160ff02191690831515021790555034801561005c575f5ffd5b5061006b61007060201b60201c565b6101eb565b5f61007f61016e60201b60201c565b9050805f0160089054906101000a900460ff16156100c9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff161461016b5767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff60405161016291906101d2565b60405180910390a15b50565b5f5f61017e61018760201b60201c565b90508091505090565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b5f67ffffffffffffffff82169050919050565b6101cc816101b0565b82525050565b5f6020820190506101e55f8301846101c3565b92915050565b60805161375e6102115f395f8181611b6201528181611bb70152611ed8015261375e5ff3fe608060405260043610610122575f3560e01c806364747c3f1161009f578063c574111111610063578063c5741111146103a1578063dd92c0c8146103cb578063e16e632c146103f3578063f5a78aed1461041d578063fa9239f51461045957610129565b806364747c3f146102c157806396d3b83d146102fd5780639bee672014610325578063ad3cb1cc1461034d578063b345dccc1461037757610129565b80634f1ef286116100e65780634f1ef286146101f957806351cff8d91461021557806352d1902d1461023d5780635c05ca38146102675780635d5105471461029157610129565b8063055e0fde1461012d5780630db5176e146101575780631a5fa2e314610181578063246581f7146101a957806326cc3731146101d157610129565b3661012957005b5f5ffd5b348015610138575f5ffd5b50610141610483565b60405161014e919061278e565b60405180910390f35b348015610162575f5ffd5b5061016b61050f565b60405161017891906127c6565b60405180910390f35b34801561018c575f5ffd5b506101a760048036038101906101a2919061284a565b61051b565b005b3480156101b4575f5ffd5b506101cf60048036038101906101ca91906129a1565b610696565b005b3480156101dc575f5ffd5b506101f760048036038101906101f29190612a21565b610993565b005b610213600480360381019061020e9190612a68565b610b0e565b005b348015610220575f5ffd5b5061023b6004803603810190610236919061284a565b610b2d565b005b348015610248575f5ffd5b50610251610e28565b60405161025e9190612ada565b60405180910390f35b348015610272575f5ffd5b5061027b610e59565b6040516102889190612b4e565b60405180910390f35b6102ab60048036038101906102a69190612c2b565b610e7e565b6040516102b89190612ada565b60405180910390f35b3480156102cc575f5ffd5b506102e760048036038101906102e29190612caf565b611398565b6040516102f49190612cf4565b60405180910390f35b348015610308575f5ffd5b50610323600480360381019061031e9190612d37565b6113b5565b005b348015610330575f5ffd5b5061034b60048036038101906103469190612d9f565b6115e0565b005b348015610358575f5ffd5b50610361611790565b60405161036e9190612e1c565b60405180910390f35b348015610382575f5ffd5b5061038b6117c9565b6040516103989190612cf4565b60405180910390f35b3480156103ac575f5ffd5b506103b56117dc565b6040516103c29190612ada565b60405180910390f35b3480156103d6575f5ffd5b506103f160048036038101906103ec9190612e3c565b6117e2565b005b3480156103fe575f5ffd5b5061040761195d565b6040516104149190612e87565b60405180910390f35b348015610428575f5ffd5b50610443600480360381019061043e9190612ea0565b611982565b60405161045091906127c6565b60405180910390f35b348015610464575f5ffd5b5061046d6119c6565b60405161047a9190612eff565b60405180910390f35b6004805461049090612f45565b80601f01602080910402602001604051908101604052809291908181526020018280546104bc90612f45565b80156105075780601f106104de57610100808354040283529160200191610507565b820191905f5260205f20905b8154815290600101906020018083116104ea57829003601f168201915b505050505081565b670de0b6b3a764000081565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105cd9190612fb0565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b8152600401610607929190612fdb565b602060405180830381865afa158015610622573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106469190613016565b6106895780336040517fbd4bf4d0000000000000000000000000000000000000000000000000000000008152600401610680929190612fdb565b60405180910390fd5b610692826119ea565b5050565b5f61069f611ac9565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f5f8267ffffffffffffffff161480156106e75750825b90505f60018367ffffffffffffffff1614801561071a57505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610728575080155b1561075f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156107ac576001855f0160086101000a81548160ff0219169083151502179055505b5f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1603610811576040517f4b054c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1603610876576040517f4b054c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b875f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508860015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3100000000000000000000000000000000000000000000000000000000000000600381905550610925876119ea565b61092e86611adc565b8315610988575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161097f919061307a565b60405180910390a15b505050505050505050565b5f7f15f79d0362aa9f51b8a42980b45367654e89e32345fe1059ff48b5e48e5a3998905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a21573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a459190612fb0565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b8152600401610a7f929190612fdb565b602060405180830381865afa158015610a9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610abe9190613016565b610b015780336040517ff502be63000000000000000000000000000000000000000000000000000000008152600401610af8929190612fdb565b60405180910390fd5b610b0a82611adc565b5050565b610b16611b60565b610b1f82611c46565b610b298282611db8565b5050565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdf9190612fb0565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b8152600401610c19929190612fdb565b602060405180830381865afa158015610c34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c589190613016565b610c9b5780336040517fbd4bf4d0000000000000000000000000000000000000000000000000000000008152600401610c92929190612fdb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d00576040517f4b054c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f4790505f8103610d3d576040517fd0d04f6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8373ffffffffffffffffffffffffffffffffffffffff1682604051610d62906130c0565b5f6040518083038185875af1925050503d805f8114610d9c576040519150601f19603f3d011682016040523d82523d5f602084013e610da1565b606091505b5050905080610de95783826040517ff1c34fc6000000000000000000000000000000000000000000000000000000008152600401610de09291906130d4565b60405180910390fd5b7f989b95a1b1c4510c963c968b55791f7f5d16626f9065a6c8e7b524ed834cf1518483604051610e1a9291906130d4565b60405180910390a150505050565b5f610e31611ed6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8560055f8267ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610ef357806040517f3349743f000000000000000000000000000000000000000000000000000000008152600401610eea919061310a565b60405180910390fd5b83835f5f1b60035414610fe0575f33604051602001610f129190612eff565b60405160208183030381529060405280519060200120604051602001610f389190613143565b604051602081830303815290604052805190602001209050610f9d8383808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505060035483611f5d565b610fde57336040517fdf17e316000000000000000000000000000000000000000000000000000000008152600401610fd59190612eff565b60405180910390fd5b505b5f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1603611045576040517f4b054c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a764000087101561109c5786670de0b6b3a76400006040517f5bb5387700000000000000000000000000000000000000000000000000000000815260040161109392919061315d565b60405180910390fd5b5f6110c989338a6040516020016110b49291906130d4565b6040516020818303038152906040525f611f73565b90505f6110d6828c6120bb565b9050600160149054906101000a900460ff1615611180575f3411156111345733346040517f6f30038900000000000000000000000000000000000000000000000000000000815260040161112b9291906130d4565b60405180910390fd5b4781111561117b5747816040517fcf47918100000000000000000000000000000000000000000000000000000000815260040161117292919061315d565b60405180910390fd5b6111c8565b803410156111c75734816040517fcf4791810000000000000000000000000000000000000000000000000000000081526004016111be92919061315d565b60405180910390fd5b5b61121533308b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661215f909392919063ffffffff16565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c688a6040518263ffffffff1660e01b815260040161126e91906127c6565b5f604051808303815f87803b158015611285575f5ffd5b505af1158015611297573d5f5f3e3d5ffd5b5050505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166396f4e9f9828d856040518463ffffffff1660e01b81526004016112f8929190613347565b60206040518083038185885af1158015611314573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906113399190613389565b9550853373ffffffffffffffffffffffffffffffffffffffff167f8382049e5c5803a6614ddfc1c34031e6f129cc394d02a2dc4f980d5ca6ca44998b60405161138291906127c6565b60405180910390a3505050505095945050505050565b6005602052805f5260405f205f915054906101000a900460ff1681565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611443573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114679190612fb0565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b81526004016114a1929190612fdb565b602060405180830381865afa1580156114bc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114e09190613016565b6115235780336040517fbd4bf4d000000000000000000000000000000000000000000000000000000000815260040161151a929190612fdb565b60405180910390fd5b5f8367ffffffffffffffff1603611566576040517fdf49792200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160055f8567ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f637089d5f91bf10fd7d2b881eccecdd0a7f1bccbf9aa14e5a17c445dc0774aac83836040516115d39291906133b4565b60405180910390a1505050565b5f7f15f79d0362aa9f51b8a42980b45367654e89e32345fe1059ff48b5e48e5a3998905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561166e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116929190612fb0565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b81526004016116cc929190612fdb565b602060405180830381865afa1580156116e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170b9190613016565b61174e5780336040517ff502be63000000000000000000000000000000000000000000000000000000008152600401611745929190612fdb565b60405180910390fd5b816003819055507f6128b42a728e3c74dd39e3b414ff4df7f9fcfa48cd79538703ebd7f52589b39b826040516117849190612ada565b60405180910390a15050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b600160149054906101000a900460ff1681565b60035481565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611870573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118949190612fb0565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b81526004016118ce929190612fdb565b602060405180830381865afa1580156118e9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190d9190613016565b6119505780336040517fbd4bf4d0000000000000000000000000000000000000000000000000000000008152600401611947929190612fdb565b60405180910390fd5b611959826121e1565b5050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f6119b084338560405160200161199b9291906130d4565b6040516020818303038152906040525f611f73565b90506119bc81866120bb565b9150509392505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a4f576040517f4b054c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f59563673ef97893ce78d74464d3db9d34539c1ae3d4adcc1ebfb823c4329fb7781604051611abe9190612eff565b60405180910390a150565b5f5f611ad3612235565b90508091505090565b5f815103611b16576040517f52d3bc6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060049081611b259190613572565b507f0d9496cada03dfb7ab533bba307a847e95fb2db92144f388c1f62cadd67bb42281604051611b55919061278e565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480611c0d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611bf461225e565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611c44576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf89190612fb0565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b8152600401611d32929190612fdb565b602060405180830381865afa158015611d4d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d719190613016565b611db45780336040517fbd4bf4d0000000000000000000000000000000000000000000000000000000008152600401611dab929190612fdb565b60405180910390fd5b5050565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e2057506040513d601f19601f82011682018060405250810190611e1d9190613389565b60015b611e6157816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611e589190612eff565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114611ec757806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611ebe9190612ada565b60405180910390fd5b611ed183836122b1565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611f5b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f82611f698584612323565b1490509392505050565b611f7b6126ac565b6040518060a0016040528085604051602001611f979190612eff565b60405160208183030381529060405281526020018481526020015f67ffffffffffffffff811115611fcb57611fca61287d565b5b60405190808252806020026020018201604052801561200457816020015b611ff16126f0565b815260200190600190039081611fe95790505b5081526020018373ffffffffffffffffffffffffffffffffffffffff1681526020016004805461203390612f45565b80601f016020809104026020016040519081016040528092919081815260200182805461205f90612f45565b80156120aa5780601f10612081576101008083540402835291602001916120aa565b820191905f5260205f20905b81548152906001019060200180831161208d57829003601f168201915b505050505081525090509392505050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166320487ded83856040518363ffffffff1660e01b8152600401612118929190613347565b602060405180830381865afa158015612133573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121579190613655565b905092915050565b6121db848573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161219493929190613680565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612374565b50505050565b80600160146101000a81548160ff0219169083151502179055507fcc85c447fb6b7714c051b56747b4712b377212b4db68c377f76ce6e56569c5378160405161222a9190612cf4565b60405180910390a150565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b5f61228a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61240f565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6122ba82612418565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156123165761231082826124e1565b5061231f565b61231e612561565b5b5050565b5f5f8290505f5f90505b84518110156123695761235a8286838151811061234d5761234c6136b5565b5b602002602001015161259d565b9150808060010191505061232d565b508091505092915050565b5f5f60205f8451602086015f885af180612393576040513d5f823e3d81fd5b3d92505f519150505f82146123ac5760018114156123c7565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561240957836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016124009190612eff565b60405180910390fd5b50505050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361247357806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161246a9190612eff565b60405180910390fd5b8061249f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61240f565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff168460405161250a9190613712565b5f60405180830381855af49150503d805f8114612542576040519150601f19603f3d011682016040523d82523d5f602084013e612547565b606091505b50915091506125578583836125c7565b9250505092915050565b5f34111561259b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f8183106125b4576125af8284612654565b6125bf565b6125be8383612654565b5b905092915050565b6060826125dc576125d782612668565b61264c565b5f825114801561260257505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561264457836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161263b9190612eff565b60405180910390fd5b81905061264d565b5b9392505050565b5f825f528160205260405f20905092915050565b5f8151111561267a5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060a001604052806060815260200160608152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6127608261271e565b61276a8185612728565b935061277a818560208601612738565b61278381612746565b840191505092915050565b5f6020820190508181035f8301526127a68184612756565b905092915050565b5f819050919050565b6127c0816127ae565b82525050565b5f6020820190506127d95f8301846127b7565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612819826127f0565b9050919050565b6128298161280f565b8114612833575f5ffd5b50565b5f8135905061284481612820565b92915050565b5f6020828403121561285f5761285e6127e8565b5b5f61286c84828501612836565b91505092915050565b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6128b382612746565b810181811067ffffffffffffffff821117156128d2576128d161287d565b5b80604052505050565b5f6128e46127df565b90506128f082826128aa565b919050565b5f67ffffffffffffffff82111561290f5761290e61287d565b5b61291882612746565b9050602081019050919050565b828183375f83830152505050565b5f612945612940846128f5565b6128db565b90508281526020810184848401111561296157612960612879565b5b61296c848285612925565b509392505050565b5f82601f83011261298857612987612875565b5b8135612998848260208601612933565b91505092915050565b5f5f5f5f608085870312156129b9576129b86127e8565b5b5f6129c687828801612836565b94505060206129d787828801612836565b93505060406129e887828801612836565b925050606085013567ffffffffffffffff811115612a0957612a086127ec565b5b612a1587828801612974565b91505092959194509250565b5f60208284031215612a3657612a356127e8565b5b5f82013567ffffffffffffffff811115612a5357612a526127ec565b5b612a5f84828501612974565b91505092915050565b5f5f60408385031215612a7e57612a7d6127e8565b5b5f612a8b85828601612836565b925050602083013567ffffffffffffffff811115612aac57612aab6127ec565b5b612ab885828601612974565b9150509250929050565b5f819050919050565b612ad481612ac2565b82525050565b5f602082019050612aed5f830184612acb565b92915050565b5f819050919050565b5f612b16612b11612b0c846127f0565b612af3565b6127f0565b9050919050565b5f612b2782612afc565b9050919050565b5f612b3882612b1d565b9050919050565b612b4881612b2e565b82525050565b5f602082019050612b615f830184612b3f565b92915050565b5f67ffffffffffffffff82169050919050565b612b8381612b67565b8114612b8d575f5ffd5b50565b5f81359050612b9e81612b7a565b92915050565b612bad816127ae565b8114612bb7575f5ffd5b50565b5f81359050612bc881612ba4565b92915050565b5f5ffd5b5f5ffd5b5f5f83601f840112612beb57612bea612875565b5b8235905067ffffffffffffffff811115612c0857612c07612bce565b5b602083019150836020820283011115612c2457612c23612bd2565b5b9250929050565b5f5f5f5f5f60808688031215612c4457612c436127e8565b5b5f612c5188828901612b90565b9550506020612c6288828901612836565b9450506040612c7388828901612bba565b935050606086013567ffffffffffffffff811115612c9457612c936127ec565b5b612ca088828901612bd6565b92509250509295509295909350565b5f60208284031215612cc457612cc36127e8565b5b5f612cd184828501612b90565b91505092915050565b5f8115159050919050565b612cee81612cda565b82525050565b5f602082019050612d075f830184612ce5565b92915050565b612d1681612cda565b8114612d20575f5ffd5b50565b5f81359050612d3181612d0d565b92915050565b5f5f60408385031215612d4d57612d4c6127e8565b5b5f612d5a85828601612b90565b9250506020612d6b85828601612d23565b9150509250929050565b612d7e81612ac2565b8114612d88575f5ffd5b50565b5f81359050612d9981612d75565b92915050565b5f60208284031215612db457612db36127e8565b5b5f612dc184828501612d8b565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f612dee82612dca565b612df88185612dd4565b9350612e08818560208601612738565b612e1181612746565b840191505092915050565b5f6020820190508181035f830152612e348184612de4565b905092915050565b5f60208284031215612e5157612e506127e8565b5b5f612e5e84828501612d23565b91505092915050565b5f612e7182612b1d565b9050919050565b612e8181612e67565b82525050565b5f602082019050612e9a5f830184612e78565b92915050565b5f5f5f60608486031215612eb757612eb66127e8565b5b5f612ec486828701612b90565b9350506020612ed586828701612836565b9250506040612ee686828701612bba565b9150509250925092565b612ef98161280f565b82525050565b5f602082019050612f125f830184612ef0565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f5c57607f821691505b602082108103612f6f57612f6e612f18565b5b50919050565b5f612f7f8261280f565b9050919050565b612f8f81612f75565b8114612f99575f5ffd5b50565b5f81519050612faa81612f86565b92915050565b5f60208284031215612fc557612fc46127e8565b5b5f612fd284828501612f9c565b91505092915050565b5f604082019050612fee5f830185612acb565b612ffb6020830184612ef0565b9392505050565b5f8151905061301081612d0d565b92915050565b5f6020828403121561302b5761302a6127e8565b5b5f61303884828501613002565b91505092915050565b5f819050919050565b5f61306461305f61305a84613041565b612af3565b612b67565b9050919050565b6130748161304a565b82525050565b5f60208201905061308d5f83018461306b565b92915050565b5f81905092915050565b50565b5f6130ab5f83613093565b91506130b68261309d565b5f82019050919050565b5f6130ca826130a0565b9150819050919050565b5f6040820190506130e75f830185612ef0565b6130f460208301846127b7565b9392505050565b61310481612b67565b82525050565b5f60208201905061311d5f8301846130fb565b92915050565b5f819050919050565b61313d61313882612ac2565b613123565b82525050565b5f61314e828461312c565b60208201915081905092915050565b5f6040820190506131705f8301856127b7565b61317d60208301846127b7565b9392505050565b5f82825260208201905092915050565b5f61319e8261271e565b6131a88185613184565b93506131b8818560208601612738565b6131c181612746565b840191505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6131fe8161280f565b82525050565b61320d816127ae565b82525050565b604082015f8201516132275f8501826131f5565b50602082015161323a6020850182613204565b50505050565b5f61324b8383613213565b60408301905092915050565b5f602082019050919050565b5f61326d826131cc565b61327781856131d6565b9350613282836131e6565b805f5b838110156132b25781516132998882613240565b97506132a483613257565b925050600181019050613285565b5085935050505092915050565b5f60a083015f8301518482035f8601526132d98282613194565b915050602083015184820360208601526132f38282613194565b9150506040830151848203604086015261330d8282613263565b915050606083015161332260608601826131f5565b506080830151848203608086015261333a8282613194565b9150508091505092915050565b5f60408201905061335a5f8301856130fb565b818103602083015261336c81846132bf565b90509392505050565b5f8151905061338381612d75565b92915050565b5f6020828403121561339e5761339d6127e8565b5b5f6133ab84828501613375565b91505092915050565b5f6040820190506133c75f8301856130fb565b6133d46020830184612ce5565b9392505050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026134377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826133fc565b61344186836133fc565b95508019841693508086168417925050509392505050565b5f61347361346e613469846127ae565b612af3565b6127ae565b9050919050565b5f819050919050565b61348c83613459565b6134a06134988261347a565b848454613408565b825550505050565b5f5f905090565b6134b76134a8565b6134c2818484613483565b505050565b5b818110156134e5576134da5f826134af565b6001810190506134c8565b5050565b601f82111561352a576134fb816133db565b613504846133ed565b81016020851015613513578190505b61352761351f856133ed565b8301826134c7565b50505b505050565b5f82821c905092915050565b5f61354a5f198460080261352f565b1980831691505092915050565b5f613562838361353b565b9150826002028217905092915050565b61357b8261271e565b67ffffffffffffffff8111156135945761359361287d565b5b61359e8254612f45565b6135a98282856134e9565b5f60209050601f8311600181146135da575f84156135c8578287015190505b6135d28582613557565b865550613639565b601f1984166135e8866133db565b5f5b8281101561360f578489015182556001820191506020850194506020810190506135ea565b8683101561362c5784890151613628601f89168261353b565b8355505b6001600288020188555050505b505050505050565b5f8151905061364f81612ba4565b92915050565b5f6020828403121561366a576136696127e8565b5b5f61367784828501613641565b91505092915050565b5f6060820190506136935f830186612ef0565b6136a06020830185612ef0565b6136ad60408301846127b7565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6136ec8261271e565b6136f68185613093565b9350613706818560208601612738565b80840191505092915050565b5f61371d82846136e2565b91508190509291505056fea2646970667358221220a185ed300c395fae2668d326d106319b75c53a384d29ace92ebf3bb2cf44c10864736f6c634300081e0033",
    "sourceMap": "1286:9936:76:-:0;;;1171:4:6;1128:48;;;;;;;;;1905:5:76;1875:35;;;;;;;;;;;;;;;;;;;;3946:53;;;;;;;;;;3970:22;:20;;;:22;;:::i;:::-;1286:9936;;7709:422:5;7824:30;7857:26;:24;;;:26;;:::i;:::-;7824:59;;7898:1;:15;;;;;;;;;;;;7894:76;;;7936:23;;;;;;;;;;;;;;7894:76;8001:16;7983:34;;:1;:14;;;;;;;;;;;;:34;;;7979:146;;8050:16;8033:1;:14;;;:33;;;;;;;;;;;;;;;;;;8085:29;8097:16;8085:29;;;;;;:::i;:::-;;;;;;;;7979:146;7758:373;7709:422::o;9071:205::-;9129:30;9171:12;9186:27;:25;;;:27;;:::i;:::-;9171:42;;9256:4;9246:14;;9232:38;9071:205;:::o;8819:122::-;8887:7;3147:66;8913:21;;8906:28;;8819:122;:::o;7:101:92:-;43:7;83:18;76:5;72:30;61:41;;7:101;;;:::o;114:115::-;199:23;216:5;199:23;:::i;:::-;194:3;187:36;114:115;;:::o;235:218::-;326:4;364:2;353:9;349:18;341:26;;377:69;443:1;432:9;428:17;419:6;377:69;:::i;:::-;235:218;;;;:::o;1286:9936:76:-;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405260043610610122575f3560e01c806364747c3f1161009f578063c574111111610063578063c5741111146103a1578063dd92c0c8146103cb578063e16e632c146103f3578063f5a78aed1461041d578063fa9239f51461045957610129565b806364747c3f146102c157806396d3b83d146102fd5780639bee672014610325578063ad3cb1cc1461034d578063b345dccc1461037757610129565b80634f1ef286116100e65780634f1ef286146101f957806351cff8d91461021557806352d1902d1461023d5780635c05ca38146102675780635d5105471461029157610129565b8063055e0fde1461012d5780630db5176e146101575780631a5fa2e314610181578063246581f7146101a957806326cc3731146101d157610129565b3661012957005b5f5ffd5b348015610138575f5ffd5b50610141610483565b60405161014e919061278e565b60405180910390f35b348015610162575f5ffd5b5061016b61050f565b60405161017891906127c6565b60405180910390f35b34801561018c575f5ffd5b506101a760048036038101906101a2919061284a565b61051b565b005b3480156101b4575f5ffd5b506101cf60048036038101906101ca91906129a1565b610696565b005b3480156101dc575f5ffd5b506101f760048036038101906101f29190612a21565b610993565b005b610213600480360381019061020e9190612a68565b610b0e565b005b348015610220575f5ffd5b5061023b6004803603810190610236919061284a565b610b2d565b005b348015610248575f5ffd5b50610251610e28565b60405161025e9190612ada565b60405180910390f35b348015610272575f5ffd5b5061027b610e59565b6040516102889190612b4e565b60405180910390f35b6102ab60048036038101906102a69190612c2b565b610e7e565b6040516102b89190612ada565b60405180910390f35b3480156102cc575f5ffd5b506102e760048036038101906102e29190612caf565b611398565b6040516102f49190612cf4565b60405180910390f35b348015610308575f5ffd5b50610323600480360381019061031e9190612d37565b6113b5565b005b348015610330575f5ffd5b5061034b60048036038101906103469190612d9f565b6115e0565b005b348015610358575f5ffd5b50610361611790565b60405161036e9190612e1c565b60405180910390f35b348015610382575f5ffd5b5061038b6117c9565b6040516103989190612cf4565b60405180910390f35b3480156103ac575f5ffd5b506103b56117dc565b6040516103c29190612ada565b60405180910390f35b3480156103d6575f5ffd5b506103f160048036038101906103ec9190612e3c565b6117e2565b005b3480156103fe575f5ffd5b5061040761195d565b6040516104149190612e87565b60405180910390f35b348015610428575f5ffd5b50610443600480360381019061043e9190612ea0565b611982565b60405161045091906127c6565b60405180910390f35b348015610464575f5ffd5b5061046d6119c6565b60405161047a9190612eff565b60405180910390f35b6004805461049090612f45565b80601f01602080910402602001604051908101604052809291908181526020018280546104bc90612f45565b80156105075780601f106104de57610100808354040283529160200191610507565b820191905f5260205f20905b8154815290600101906020018083116104ea57829003601f168201915b505050505081565b670de0b6b3a764000081565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105cd9190612fb0565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b8152600401610607929190612fdb565b602060405180830381865afa158015610622573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106469190613016565b6106895780336040517fbd4bf4d0000000000000000000000000000000000000000000000000000000008152600401610680929190612fdb565b60405180910390fd5b610692826119ea565b5050565b5f61069f611ac9565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f5f8267ffffffffffffffff161480156106e75750825b90505f60018367ffffffffffffffff1614801561071a57505f3073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015610728575080155b1561075f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156107ac576001855f0160086101000a81548160ff0219169083151502179055505b5f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1603610811576040517f4b054c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1603610876576040517f4b054c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b875f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508860015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3100000000000000000000000000000000000000000000000000000000000000600381905550610925876119ea565b61092e86611adc565b8315610988575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161097f919061307a565b60405180910390a15b505050505050505050565b5f7f15f79d0362aa9f51b8a42980b45367654e89e32345fe1059ff48b5e48e5a3998905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a21573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a459190612fb0565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b8152600401610a7f929190612fdb565b602060405180830381865afa158015610a9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610abe9190613016565b610b015780336040517ff502be63000000000000000000000000000000000000000000000000000000008152600401610af8929190612fdb565b60405180910390fd5b610b0a82611adc565b5050565b610b16611b60565b610b1f82611c46565b610b298282611db8565b5050565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdf9190612fb0565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b8152600401610c19929190612fdb565b602060405180830381865afa158015610c34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c589190613016565b610c9b5780336040517fbd4bf4d0000000000000000000000000000000000000000000000000000000008152600401610c92929190612fdb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d00576040517f4b054c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f4790505f8103610d3d576040517fd0d04f6000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8373ffffffffffffffffffffffffffffffffffffffff1682604051610d62906130c0565b5f6040518083038185875af1925050503d805f8114610d9c576040519150601f19603f3d011682016040523d82523d5f602084013e610da1565b606091505b5050905080610de95783826040517ff1c34fc6000000000000000000000000000000000000000000000000000000008152600401610de09291906130d4565b60405180910390fd5b7f989b95a1b1c4510c963c968b55791f7f5d16626f9065a6c8e7b524ed834cf1518483604051610e1a9291906130d4565b60405180910390a150505050565b5f610e31611ed6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8560055f8267ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610ef357806040517f3349743f000000000000000000000000000000000000000000000000000000008152600401610eea919061310a565b60405180910390fd5b83835f5f1b60035414610fe0575f33604051602001610f129190612eff565b60405160208183030381529060405280519060200120604051602001610f389190613143565b604051602081830303815290604052805190602001209050610f9d8383808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f8201169050808301925050505050505060035483611f5d565b610fde57336040517fdf17e316000000000000000000000000000000000000000000000000000000008152600401610fd59190612eff565b60405180910390fd5b505b5f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1603611045576040517f4b054c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a764000087101561109c5786670de0b6b3a76400006040517f5bb5387700000000000000000000000000000000000000000000000000000000815260040161109392919061315d565b60405180910390fd5b5f6110c989338a6040516020016110b49291906130d4565b6040516020818303038152906040525f611f73565b90505f6110d6828c6120bb565b9050600160149054906101000a900460ff1615611180575f3411156111345733346040517f6f30038900000000000000000000000000000000000000000000000000000000815260040161112b9291906130d4565b60405180910390fd5b4781111561117b5747816040517fcf47918100000000000000000000000000000000000000000000000000000000815260040161117292919061315d565b60405180910390fd5b6111c8565b803410156111c75734816040517fcf4791810000000000000000000000000000000000000000000000000000000081526004016111be92919061315d565b60405180910390fd5b5b61121533308b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661215f909392919063ffffffff16565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c688a6040518263ffffffff1660e01b815260040161126e91906127c6565b5f604051808303815f87803b158015611285575f5ffd5b505af1158015611297573d5f5f3e3d5ffd5b5050505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166396f4e9f9828d856040518463ffffffff1660e01b81526004016112f8929190613347565b60206040518083038185885af1158015611314573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906113399190613389565b9550853373ffffffffffffffffffffffffffffffffffffffff167f8382049e5c5803a6614ddfc1c34031e6f129cc394d02a2dc4f980d5ca6ca44998b60405161138291906127c6565b60405180910390a3505050505095945050505050565b6005602052805f5260405f205f915054906101000a900460ff1681565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611443573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114679190612fb0565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b81526004016114a1929190612fdb565b602060405180830381865afa1580156114bc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114e09190613016565b6115235780336040517fbd4bf4d000000000000000000000000000000000000000000000000000000000815260040161151a929190612fdb565b60405180910390fd5b5f8367ffffffffffffffff1603611566576040517fdf49792200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160055f8567ffffffffffffffff1667ffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f637089d5f91bf10fd7d2b881eccecdd0a7f1bccbf9aa14e5a17c445dc0774aac83836040516115d39291906133b4565b60405180910390a1505050565b5f7f15f79d0362aa9f51b8a42980b45367654e89e32345fe1059ff48b5e48e5a3998905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561166e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116929190612fb0565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b81526004016116cc929190612fdb565b602060405180830381865afa1580156116e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170b9190613016565b61174e5780336040517ff502be63000000000000000000000000000000000000000000000000000000008152600401611745929190612fdb565b60405180910390fd5b816003819055507f6128b42a728e3c74dd39e3b414ff4df7f9fcfa48cd79538703ebd7f52589b39b826040516117849190612ada565b60405180910390a15050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b600160149054906101000a900460ff1681565b60035481565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611870573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118949190612fb0565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b81526004016118ce929190612fdb565b602060405180830381865afa1580156118e9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190d9190613016565b6119505780336040517fbd4bf4d0000000000000000000000000000000000000000000000000000000008152600401611947929190612fdb565b60405180910390fd5b611959826121e1565b5050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f6119b084338560405160200161199b9291906130d4565b6040516020818303038152906040525f611f73565b90506119bc81866120bb565b9150509392505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a4f576040517f4b054c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f59563673ef97893ce78d74464d3db9d34539c1ae3d4adcc1ebfb823c4329fb7781604051611abe9190612eff565b60405180910390a150565b5f5f611ad3612235565b90508091505090565b5f815103611b16576040517f52d3bc6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060049081611b259190613572565b507f0d9496cada03dfb7ab533bba307a847e95fb2db92144f388c1f62cadd67bb42281604051611b55919061278e565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480611c0d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611bf461225e565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611c44576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f339759585899103d2ace64958e37e18ccb0504652c81d4a1b8aa80fe2126ab95905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316d6b5f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf89190612fb0565b73ffffffffffffffffffffffffffffffffffffffff166391d1485482336040518363ffffffff1660e01b8152600401611d32929190612fdb565b602060405180830381865afa158015611d4d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d719190613016565b611db45780336040517fbd4bf4d0000000000000000000000000000000000000000000000000000000008152600401611dab929190612fdb565b60405180910390fd5b5050565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e2057506040513d601f19601f82011682018060405250810190611e1d9190613389565b60015b611e6157816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611e589190612eff565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114611ec757806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611ebe9190612ada565b60405180910390fd5b611ed183836122b1565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611f5b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f82611f698584612323565b1490509392505050565b611f7b6126ac565b6040518060a0016040528085604051602001611f979190612eff565b60405160208183030381529060405281526020018481526020015f67ffffffffffffffff811115611fcb57611fca61287d565b5b60405190808252806020026020018201604052801561200457816020015b611ff16126f0565b815260200190600190039081611fe95790505b5081526020018373ffffffffffffffffffffffffffffffffffffffff1681526020016004805461203390612f45565b80601f016020809104026020016040519081016040528092919081815260200182805461205f90612f45565b80156120aa5780601f10612081576101008083540402835291602001916120aa565b820191905f5260205f20905b81548152906001019060200180831161208d57829003601f168201915b505050505081525090509392505050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166320487ded83856040518363ffffffff1660e01b8152600401612118929190613347565b602060405180830381865afa158015612133573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121579190613655565b905092915050565b6121db848573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161219493929190613680565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612374565b50505050565b80600160146101000a81548160ff0219169083151502179055507fcc85c447fb6b7714c051b56747b4712b377212b4db68c377f76ce6e56569c5378160405161222a9190612cf4565b60405180910390a150565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005f1b905090565b5f61228a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61240f565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6122ba82612418565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156123165761231082826124e1565b5061231f565b61231e612561565b5b5050565b5f5f8290505f5f90505b84518110156123695761235a8286838151811061234d5761234c6136b5565b5b602002602001015161259d565b9150808060010191505061232d565b508091505092915050565b5f5f60205f8451602086015f885af180612393576040513d5f823e3d81fd5b3d92505f519150505f82146123ac5760018114156123c7565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561240957836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016124009190612eff565b60405180910390fd5b50505050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361247357806040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815260040161246a9190612eff565b60405180910390fd5b8061249f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b61240f565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff168460405161250a9190613712565b5f60405180830381855af49150503d805f8114612542576040519150601f19603f3d011682016040523d82523d5f602084013e612547565b606091505b50915091506125578583836125c7565b9250505092915050565b5f34111561259b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f8183106125b4576125af8284612654565b6125bf565b6125be8383612654565b5b905092915050565b6060826125dc576125d782612668565b61264c565b5f825114801561260257505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561264457836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161263b9190612eff565b60405180910390fd5b81905061264d565b5b9392505050565b5f825f528160205260405f20905092915050565b5f8151111561267a5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060a001604052806060815260200160608152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6127608261271e565b61276a8185612728565b935061277a818560208601612738565b61278381612746565b840191505092915050565b5f6020820190508181035f8301526127a68184612756565b905092915050565b5f819050919050565b6127c0816127ae565b82525050565b5f6020820190506127d95f8301846127b7565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612819826127f0565b9050919050565b6128298161280f565b8114612833575f5ffd5b50565b5f8135905061284481612820565b92915050565b5f6020828403121561285f5761285e6127e8565b5b5f61286c84828501612836565b91505092915050565b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6128b382612746565b810181811067ffffffffffffffff821117156128d2576128d161287d565b5b80604052505050565b5f6128e46127df565b90506128f082826128aa565b919050565b5f67ffffffffffffffff82111561290f5761290e61287d565b5b61291882612746565b9050602081019050919050565b828183375f83830152505050565b5f612945612940846128f5565b6128db565b90508281526020810184848401111561296157612960612879565b5b61296c848285612925565b509392505050565b5f82601f83011261298857612987612875565b5b8135612998848260208601612933565b91505092915050565b5f5f5f5f608085870312156129b9576129b86127e8565b5b5f6129c687828801612836565b94505060206129d787828801612836565b93505060406129e887828801612836565b925050606085013567ffffffffffffffff811115612a0957612a086127ec565b5b612a1587828801612974565b91505092959194509250565b5f60208284031215612a3657612a356127e8565b5b5f82013567ffffffffffffffff811115612a5357612a526127ec565b5b612a5f84828501612974565b91505092915050565b5f5f60408385031215612a7e57612a7d6127e8565b5b5f612a8b85828601612836565b925050602083013567ffffffffffffffff811115612aac57612aab6127ec565b5b612ab885828601612974565b9150509250929050565b5f819050919050565b612ad481612ac2565b82525050565b5f602082019050612aed5f830184612acb565b92915050565b5f819050919050565b5f612b16612b11612b0c846127f0565b612af3565b6127f0565b9050919050565b5f612b2782612afc565b9050919050565b5f612b3882612b1d565b9050919050565b612b4881612b2e565b82525050565b5f602082019050612b615f830184612b3f565b92915050565b5f67ffffffffffffffff82169050919050565b612b8381612b67565b8114612b8d575f5ffd5b50565b5f81359050612b9e81612b7a565b92915050565b612bad816127ae565b8114612bb7575f5ffd5b50565b5f81359050612bc881612ba4565b92915050565b5f5ffd5b5f5ffd5b5f5f83601f840112612beb57612bea612875565b5b8235905067ffffffffffffffff811115612c0857612c07612bce565b5b602083019150836020820283011115612c2457612c23612bd2565b5b9250929050565b5f5f5f5f5f60808688031215612c4457612c436127e8565b5b5f612c5188828901612b90565b9550506020612c6288828901612836565b9450506040612c7388828901612bba565b935050606086013567ffffffffffffffff811115612c9457612c936127ec565b5b612ca088828901612bd6565b92509250509295509295909350565b5f60208284031215612cc457612cc36127e8565b5b5f612cd184828501612b90565b91505092915050565b5f8115159050919050565b612cee81612cda565b82525050565b5f602082019050612d075f830184612ce5565b92915050565b612d1681612cda565b8114612d20575f5ffd5b50565b5f81359050612d3181612d0d565b92915050565b5f5f60408385031215612d4d57612d4c6127e8565b5b5f612d5a85828601612b90565b9250506020612d6b85828601612d23565b9150509250929050565b612d7e81612ac2565b8114612d88575f5ffd5b50565b5f81359050612d9981612d75565b92915050565b5f60208284031215612db457612db36127e8565b5b5f612dc184828501612d8b565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f612dee82612dca565b612df88185612dd4565b9350612e08818560208601612738565b612e1181612746565b840191505092915050565b5f6020820190508181035f830152612e348184612de4565b905092915050565b5f60208284031215612e5157612e506127e8565b5b5f612e5e84828501612d23565b91505092915050565b5f612e7182612b1d565b9050919050565b612e8181612e67565b82525050565b5f602082019050612e9a5f830184612e78565b92915050565b5f5f5f60608486031215612eb757612eb66127e8565b5b5f612ec486828701612b90565b9350506020612ed586828701612836565b9250506040612ee686828701612bba565b9150509250925092565b612ef98161280f565b82525050565b5f602082019050612f125f830184612ef0565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612f5c57607f821691505b602082108103612f6f57612f6e612f18565b5b50919050565b5f612f7f8261280f565b9050919050565b612f8f81612f75565b8114612f99575f5ffd5b50565b5f81519050612faa81612f86565b92915050565b5f60208284031215612fc557612fc46127e8565b5b5f612fd284828501612f9c565b91505092915050565b5f604082019050612fee5f830185612acb565b612ffb6020830184612ef0565b9392505050565b5f8151905061301081612d0d565b92915050565b5f6020828403121561302b5761302a6127e8565b5b5f61303884828501613002565b91505092915050565b5f819050919050565b5f61306461305f61305a84613041565b612af3565b612b67565b9050919050565b6130748161304a565b82525050565b5f60208201905061308d5f83018461306b565b92915050565b5f81905092915050565b50565b5f6130ab5f83613093565b91506130b68261309d565b5f82019050919050565b5f6130ca826130a0565b9150819050919050565b5f6040820190506130e75f830185612ef0565b6130f460208301846127b7565b9392505050565b61310481612b67565b82525050565b5f60208201905061311d5f8301846130fb565b92915050565b5f819050919050565b61313d61313882612ac2565b613123565b82525050565b5f61314e828461312c565b60208201915081905092915050565b5f6040820190506131705f8301856127b7565b61317d60208301846127b7565b9392505050565b5f82825260208201905092915050565b5f61319e8261271e565b6131a88185613184565b93506131b8818560208601612738565b6131c181612746565b840191505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6131fe8161280f565b82525050565b61320d816127ae565b82525050565b604082015f8201516132275f8501826131f5565b50602082015161323a6020850182613204565b50505050565b5f61324b8383613213565b60408301905092915050565b5f602082019050919050565b5f61326d826131cc565b61327781856131d6565b9350613282836131e6565b805f5b838110156132b25781516132998882613240565b97506132a483613257565b925050600181019050613285565b5085935050505092915050565b5f60a083015f8301518482035f8601526132d98282613194565b915050602083015184820360208601526132f38282613194565b9150506040830151848203604086015261330d8282613263565b915050606083015161332260608601826131f5565b506080830151848203608086015261333a8282613194565b9150508091505092915050565b5f60408201905061335a5f8301856130fb565b818103602083015261336c81846132bf565b90509392505050565b5f8151905061338381612d75565b92915050565b5f6020828403121561339e5761339d6127e8565b5b5f6133ab84828501613375565b91505092915050565b5f6040820190506133c75f8301856130fb565b6133d46020830184612ce5565b9392505050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026134377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826133fc565b61344186836133fc565b95508019841693508086168417925050509392505050565b5f61347361346e613469846127ae565b612af3565b6127ae565b9050919050565b5f819050919050565b61348c83613459565b6134a06134988261347a565b848454613408565b825550505050565b5f5f905090565b6134b76134a8565b6134c2818484613483565b505050565b5b818110156134e5576134da5f826134af565b6001810190506134c8565b5050565b601f82111561352a576134fb816133db565b613504846133ed565b81016020851015613513578190505b61352761351f856133ed565b8301826134c7565b50505b505050565b5f82821c905092915050565b5f61354a5f198460080261352f565b1980831691505092915050565b5f613562838361353b565b9150826002028217905092915050565b61357b8261271e565b67ffffffffffffffff8111156135945761359361287d565b5b61359e8254612f45565b6135a98282856134e9565b5f60209050601f8311600181146135da575f84156135c8578287015190505b6135d28582613557565b865550613639565b601f1984166135e8866133db565b5f5b8281101561360f578489015182556001820191506020850194506020810190506135ea565b8683101561362c5784890151613628601f89168261353b565b8355505b6001600288020188555050505b505050505050565b5f8151905061364f81612ba4565b92915050565b5f6020828403121561366a576136696127e8565b5b5f61367784828501613641565b91505092915050565b5f6060820190506136935f830186612ef0565b6136a06020830185612ef0565b6136ad60408301846127b7565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6136ec8261271e565b6136f68185613093565b9350613706818560208601612738565b80840191505092915050565b5f61371d82846136e2565b91508190509291505056fea2646970667358221220a185ed300c395fae2668d326d106319b75c53a384d29ace92ebf3bb2cf44c10864736f6c634300081e0033",
    "sourceMap": "1286:9936:76:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2007:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1746:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8221:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4335:562;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8516:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4161:214:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7739:448:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3708:134:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1916:41:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5566:1508;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2037:61;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7108:383;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7525:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1819:58:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1875:35:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1963:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8391:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1840:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8665:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1804:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2007:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1746:52::-;1794:4;1746:52;:::o;8221:136::-;2379:12;272:28:87;2379:36:76;;2430:17;;;;;;;;;;;:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;2478:4;2484:10;2430:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2425:148;;2545:4;2551:10;2518:44;;;;;;;;;;;;:::i;:::-;;;;;;;;2425:148;8311:39:::1;8331:18;8311:19;:39::i;:::-;2369:221:::0;8221:136;:::o;4335:562::-;4158:30:5;4191:26;:24;:26::i;:::-;4158:59;;4279:19;4302:1;:15;;;;;;;;;;;;4301:16;4279:38;;4327:18;4348:1;:14;;;;;;;;;;;;4327:35;;4704:17;4739:1;4724:11;:16;;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4803:1;4788:11;:16;;;:50;;;;;4837:1;4816:4;4808:25;;;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;;;;;;;;;;;;;4849:91;4966:1;4949;:14;;;:18;;;;;;;;;;;;;;;;;;4981:14;4977:67;;;5029:4;5011:1;:15;;;:22;;;;;;;;;;;;;;;;;;4977:67;4523:1:76::1;4498:27;;:13;:27;;::::0;4494:91:::1;;4548:26;;;;;;;;;;;;;;4494:91;4617:1;4599:20;;:6;:20;;::::0;4595:84:::1;;4642:26;;;;;;;;;;;;;;4595:84;4707:13;4689:15;;:31;;;;;;;;;;;;;;;;;;4755:6;4730:8;;:32;;;;;;;;;;;;;;;;;;4798:12;4772:23;:38;;;;4820:36;4840:15;4820:19;:36::i;:::-;4866:24;4880:9;4866:13;:24::i;:::-;5068:14:5::0;5064:101;;;5116:5;5098:1;:15;;;:23;;;;;;;;;;;;;;;;;;5140:14;5152:1;5140:14;;;;;;:::i;:::-;;;;;;;;5064:101;4092:1079;;;;;4335:562:76;;;;:::o;8516:115::-;2692:12;716:34:87;2692:42:76;;2749:17;;;;;;;;;;;:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;2797:4;2803:10;2749:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2744:148;;2864:4;2870:10;2837:44;;;;;;;;;;;;:::i;:::-;;;;;;;;2744:148;8600:24:::1;8614:9;8600:13;:24::i;:::-;2682:227:::0;8516:115;:::o;4161:214:6:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;:::-;4161:214:::0;;:::o;7739:448:76:-;2379:12;272:28:87;2379:36:76;;2430:17;;;;;;;;;;;:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;2478:4;2484:10;2430:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2425:148;;2545:4;2551:10;2518:44;;;;;;;;;;;;:::i;:::-;;;;;;;;2425:148;7848:1:::1;7825:25;;:11;:25;;::::0;7821:64:::1;;7859:26;;;;;;;;;;;;;;7821:64;7895:14;7912:21;7895:38;;7958:1;7948:6;:11:::0;7944:50:::1;;7968:26;;;;;;;;;;;;;;7944:50;8005:9;8019:11;:16;;8043:6;8019:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8004:50;;;8070:4;8065:62;;8107:11;8120:6;8083:44;;;;;;;;;;;;:::i;:::-;;;;;;;;8065:62;8142:38;8160:11;8173:6;8142:38;;;;;;;:::i;:::-;;;;;;;;7811:376;;2369:221:::0;7739:448;:::o;3708:134:6:-;3777:7;2926:20;:18;:20::i;:::-;811:66:21::1;3803:32:6;;3796:39;;3708:134:::0;:::o;1916:41:76:-;;;;;;;;;;;;;:::o;5566:1508::-;5853:17;5771:24;3068:30;:56;3099:24;3068:56;;;;;;;;;;;;;;;;;;;;;;;;;3063:157;;3184:24;3147:62;;;;;;;;;;;:::i;:::-;;;;;;;;3063:157;5828:6:::1;;3430:1;3422:10;;3395:23;;:37;3391:291;;3448:12;3507:10;3496:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;3486:33;;;;;;3473:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;3463:58;;;;;;3448:73;;3540:57;3559:6;;3540:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3567:23;;3592:4;3540:18;:57::i;:::-;3535:137;;3646:10;3624:33;;;;;;;;;;;:::i;:::-;;;;;;;;3535:137;3434:248;3391:291;5910:1:::2;5890:22;;:8;:22;;::::0;5886:86:::2;;5935:26;;;;;;;;;;;;;;5886:86;1794:4;5986:6;:30;5982:123;;;6064:6;1794:4;6039:55;;;;;;;;;;;;:::i;:::-;;;;;;;;5982:123;6115:43;6173:71;6191:8;6212:10;6224:6;6201:30;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6241:1;6173:17;:71::i;:::-;6115:129;;6255:12;6270:55;6284:14;6300:24;6270:13;:55::i;:::-;6255:70;;6340:15;;;;;;;;;;;6336:432;;;6387:1;6375:9;:13;6371:109;;;6443:10;6455:9;6415:50;;;;;;;;;;;;:::i;:::-;;;;;;;;6371:109;6505:21;6498:4;:28;6494:129;;;6580:21;6603:4;6553:55;;;;;;;;;;;;:::i;:::-;;;;;;;;6494:129;6336:432;;;6669:4;6657:9;:16;6653:105;;;6727:9;6738:4;6700:43;;;;;;;;;;;;:::i;:::-;;;;;;;;6653:105;6336:432;6778:75;6819:10;6839:4;6846:6;6785:15;;;;;;;;;;;6778:40;;;;:75;;;;;;:::i;:::-;6878:15;;;;;;;;;;;6863:36;;;6900:6;6863:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6930:8;;;;;;;;;;;:17;;;6955:4;6961:24;6987:14;6930:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6918:84;;7049:9;7037:10;7017:50;;;7060:6;7017:50;;;;;;:::i;:::-;;;;;;;;5876:1198;;3229:1:::1;;5566:1508:::0;;;;;;;;:::o;2037:61::-;;;;;;;;;;;;;;;;;;;;;;:::o;7108:383::-;2379:12;272:28:87;2379:36:76;;2430:17;;;;;;;;;;;:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;2478:4;2484:10;2430:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2425:148;;2545:4;2551:10;2518:44;;;;;;;;;;;;:::i;:::-;;;;;;;;2425:148;7263:1:::1;7235:24;:29;;::::0;7231:97:::1;;7287:30;;;;;;;;;;;;;;7231:97;7396:5;7337:30;:56;7368:24;7337:56;;;;;;;;;;;;;;;;:64;;;;;;;;;;;;;;;;;;7416:68;7452:24;7478:5;7416:68;;;;;;;:::i;:::-;;;;;;;;2369:221:::0;7108:383;;:::o;7525:180::-;2692:12;716:34:87;2692:42:76;;2749:17;;;;;;;;;;;:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;2797:4;2803:10;2749:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2744:148;;2864:4;2870:10;2837:44;;;;;;;;;;;;:::i;:::-;;;;;;;;2744:148;7637:7:::1;7611:23;:33;;;;7659:39;7690:7;7659:39;;;;;;:::i;:::-;;;;;;;;2682:227:::0;7525:180;:::o;1819:58:6:-;;;;;;;;;;;;;;;;;;;:::o;1875:35:76:-;;;;;;;;;;;;;:::o;1963:38::-;;;;:::o;8391:119::-;2379:12;272:28:87;2379:36:76;;2430:17;;;;;;;;;;;:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;2478:4;2484:10;2430:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2425:148;;2545:4;2551:10;2518:44;;;;;;;;;;;;:::i;:::-;;;;;;;;2425:148;8471:32:::1;8489:13;8471:17;:32::i;:::-;2369:221:::0;8391:119;:::o;1840:29::-;;;;;;;;;;;;;:::o;8665:368::-;8801:7;8824:43;8882:71;8900:8;8921:10;8933:6;8910:30;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8950:1;8882:17;:71::i;:::-;8824:129;;8971:55;8985:14;9001:24;8971:13;:55::i;:::-;8964:62;;;8665:368;;;;;:::o;1804:30::-;;;;;;;;;;;;;:::o;9224:308::-;9333:1;9303:32;;:18;:32;;;9299:96;;9358:26;;;;;;;;;;;;;;9299:96;9441:18;9404:17;;:56;;;;;;;;;;;;;;;;;;9475:50;9506:18;9475:50;;;;;;:::i;:::-;;;;;;;;9224:308;:::o;9071:205:5:-;9129:30;9171:12;9186:27;:25;:27::i;:::-;9171:42;;9256:4;9246:14;;9232:38;9071:205;:::o;9705:242:76:-;9794:1;9774:9;:16;:21;9770:88;;9818:29;;;;;;;;;;;;;;9770:88;9881:9;9867:11;:23;;;;;;:::i;:::-;;9905:35;9930:9;9905:35;;;;;;:::i;:::-;;;;;;;;9705:242;:::o;4578:312:6:-;4667:6;4650:23;;4658:4;4650:23;;;:120;;;;4764:6;4728:42;;:32;:30;:32::i;:::-;:42;;;;4650:120;4633:251;;;4844:29;;;;;;;;;;;;;;4633:251;4578:312::o;11131:89:76:-;2379:12;272:28:87;2379:36:76;;2430:17;;;;;;;;;;;:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;2478:4;2484:10;2430:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2425:148;;2545:4;2551:10;2518:44;;;;;;;;;;;;:::i;:::-;;;;;;;;2425:148;2369:221;11131:89;:::o;6032:538:6:-;6149:17;6131:50;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6127:437;;6535:17;6493:60;;;;;;;;;;;:::i;:::-;;;;;;;;6127:437;811:66:21;6233:32:6;;6225:4;:40;6221:120;;6321:4;6292:34;;;;;;;;;;;:::i;:::-;;;;;;;;6221:120;6354:54;6384:17;6403:4;6354:29;:54::i;:::-;6184:235;6032:538;;:::o;5007:213::-;5090:6;5073:23;;5081:4;5073:23;;;5069:145;;5174:29;;;;;;;;;;;;;;5069:145;5007:213::o;1902:154:47:-;1993:4;2045;2016:25;2029:5;2036:4;2016:12;:25::i;:::-;:33;2009:40;;1902:154;;;;;:::o;10322:556:76:-;10458:28;;:::i;:::-;10509:362;;;;;;;;10566:8;10555:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;10509:362;;;;10595:5;10509:362;;;;10656:1;10628:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;10509:362;;;;10845:15;10509:362;;;;;;10683:11;10509:362;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10502:369;;10322:556;;;;;:::o;10884:241::-;11031:7;11061:8;;;;;;;;;;;:15;;;11077:24;11103:14;11061:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11054:64;;10884:241;;;;:::o;1618:188:33:-;1718:81;1738:5;1760;:18;;;1781:4;1787:2;1791:5;1745:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1718:19;:81::i;:::-;1618:188;;;;:::o;9538:161:76:-;9621:13;9603:15;;:31;;;;;;;;;;;;;;;;;;9649:43;9678:13;9649:43;;;;;;:::i;:::-;;;;;;;;9538:161;:::o;8819:122:5:-;8887:7;3147:66;8913:21;;8906:28;;8819:122;:::o;1441:138:21:-;1493:7;1519:47;811:66;1546:19;;1519:26;:47::i;:::-;:53;;;;;;;;;;;;1512:60;;1441:138;:::o;2264:344::-;2355:37;2374:17;2355:18;:37::i;:::-;2425:17;2407:36;;;;;;;;;;;;2472:1;2458:4;:11;:15;2454:148;;;2489:53;2518:17;2537:4;2489:28;:53::i;:::-;;2454:148;;;2573:18;:16;:18::i;:::-;2454:148;2264:344;;:::o;2457:308:47:-;2540:7;2559:20;2582:4;2559:27;;2601:9;2613:1;2601:13;;2596:134;2620:5;:12;2616:1;:16;2596:134;;;2668:51;2696:12;2710:5;2716:1;2710:8;;;;;;;;:::i;:::-;;;;;;;;2668:27;:51::i;:::-;2653:66;;2634:3;;;;;;;2596:134;;;;2746:12;2739:19;;;2457:308;;;;:::o;8370:720:33:-;8450:18;8478:19;8616:4;8613:1;8606:4;8600:11;8593:4;8587;8583:15;8580:1;8573:5;8566;8561:60;8673:7;8663:176;;8717:4;8711:11;8762:16;8759:1;8754:3;8739:40;8808:16;8803:3;8796:29;8663:176;8866:16;8852:30;;8916:1;8910:8;8895:23;;8532:396;8956:1;8942:10;:15;:68;;9009:1;8994:11;:16;;8942:68;;;8990:1;8968:5;8960:26;;;:31;8942:68;8938:146;;;9066:5;9033:40;;;;;;;;;;;:::i;:::-;;;;;;;;8938:146;8440:650;;8370:720;;:::o;1899:163:42:-;1960:21;2042:4;2032:14;;1899:163;;;:::o;1671:281:21:-;1781:1;1748:17;:29;;;:34;1744:119;;1834:17;1805:47;;;;;;;;;;;:::i;:::-;;;;;;;;1744:119;1928:17;1872:47;811:66;1899:19;;1872:26;:47::i;:::-;:53;;;:73;;;;;;;;;;;;;;;;;;1671:281;:::o;3916:253:34:-;3999:12;4024;4038:23;4065:6;:19;;4085:4;4065:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4023:67;;;;4107:55;4134:6;4142:7;4151:10;4107:26;:55::i;:::-;4100:62;;;;3916:253;;;;:::o;6113:122:21:-;6175:1;6163:9;:13;6159:70;;;6199:19;;;;;;;;;;;;;;6159:70;6113:122::o;504:167:46:-;579:7;609:1;605;:5;:59;;640:24;659:1;662;640:18;:24::i;:::-;605:59;;;613:24;632:1;635;613:18;:24::i;:::-;605:59;598:66;;504:167;;;;:::o;4437:582:34:-;4581:12;4610:7;4605:408;;4633:19;4641:10;4633:7;:19::i;:::-;4605:408;;;4878:1;4857:10;:17;:22;:49;;;;;4905:1;4883:6;:18;;;:23;4857:49;4853:119;;;4950:6;4933:24;;;;;;;;;;;:::i;:::-;;;;;;;;4853:119;4992:10;4985:17;;;;4605:408;4437:582;;;;;;:::o;791:239:46:-;864:13;941:1;935:4;928:15;969:1;963:4;956:15;1009:4;1003;993:21;984:30;;791:239;;;;:::o;5559:487:34:-;5710:1;5690:10;:17;:21;5686:354;;;5887:10;5881:17;5943:15;5930:10;5926:2;5922:19;5915:44;5686:354;6010:19;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:98:92:-;58:6;92:5;86:12;76:22;;7:98;;;:::o;111:168::-;194:11;228:6;223:3;216:19;268:4;263:3;259:14;244:29;;111:168;;;;:::o;285:139::-;374:6;369:3;364;358:23;415:1;406:6;401:3;397:16;390:27;285:139;;;:::o;430:102::-;471:6;522:2;518:7;513:2;506:5;502:14;498:28;488:38;;430:102;;;:::o;538:373::-;624:3;652:38;684:5;652:38;:::i;:::-;706:70;769:6;764:3;706:70;:::i;:::-;699:77;;785:65;843:6;838:3;831:4;824:5;820:16;785:65;:::i;:::-;875:29;897:6;875:29;:::i;:::-;870:3;866:39;859:46;;628:283;538:373;;;;:::o;917:309::-;1028:4;1066:2;1055:9;1051:18;1043:26;;1115:9;1109:4;1105:20;1101:1;1090:9;1086:17;1079:47;1143:76;1214:4;1205:6;1143:76;:::i;:::-;1135:84;;917:309;;;;:::o;1232:77::-;1269:7;1298:5;1287:16;;1232:77;;;:::o;1315:118::-;1402:24;1420:5;1402:24;:::i;:::-;1397:3;1390:37;1315:118;;:::o;1439:222::-;1532:4;1570:2;1559:9;1555:18;1547:26;;1583:71;1651:1;1640:9;1636:17;1627:6;1583:71;:::i;:::-;1439:222;;;;:::o;1667:75::-;1700:6;1733:2;1727:9;1717:19;;1667:75;:::o;1748:117::-;1857:1;1854;1847:12;1871:117;1980:1;1977;1970:12;1994:126;2031:7;2071:42;2064:5;2060:54;2049:65;;1994:126;;;:::o;2126:96::-;2163:7;2192:24;2210:5;2192:24;:::i;:::-;2181:35;;2126:96;;;:::o;2228:122::-;2301:24;2319:5;2301:24;:::i;:::-;2294:5;2291:35;2281:63;;2340:1;2337;2330:12;2281:63;2228:122;:::o;2356:139::-;2402:5;2440:6;2427:20;2418:29;;2456:33;2483:5;2456:33;:::i;:::-;2356:139;;;;:::o;2501:329::-;2560:6;2609:2;2597:9;2588:7;2584:23;2580:32;2577:119;;;2615:79;;:::i;:::-;2577:119;2735:1;2760:53;2805:7;2796:6;2785:9;2781:22;2760:53;:::i;:::-;2750:63;;2706:117;2501:329;;;;:::o;2836:117::-;2945:1;2942;2935:12;2959:117;3068:1;3065;3058:12;3082:180;3130:77;3127:1;3120:88;3227:4;3224:1;3217:15;3251:4;3248:1;3241:15;3268:281;3351:27;3373:4;3351:27;:::i;:::-;3343:6;3339:40;3481:6;3469:10;3466:22;3445:18;3433:10;3430:34;3427:62;3424:88;;;3492:18;;:::i;:::-;3424:88;3532:10;3528:2;3521:22;3311:238;3268:281;;:::o;3555:129::-;3589:6;3616:20;;:::i;:::-;3606:30;;3645:33;3673:4;3665:6;3645:33;:::i;:::-;3555:129;;;:::o;3690:307::-;3751:4;3841:18;3833:6;3830:30;3827:56;;;3863:18;;:::i;:::-;3827:56;3901:29;3923:6;3901:29;:::i;:::-;3893:37;;3985:4;3979;3975:15;3967:23;;3690:307;;;:::o;4003:148::-;4101:6;4096:3;4091;4078:30;4142:1;4133:6;4128:3;4124:16;4117:27;4003:148;;;:::o;4157:423::-;4234:5;4259:65;4275:48;4316:6;4275:48;:::i;:::-;4259:65;:::i;:::-;4250:74;;4347:6;4340:5;4333:21;4385:4;4378:5;4374:16;4423:3;4414:6;4409:3;4405:16;4402:25;4399:112;;;4430:79;;:::i;:::-;4399:112;4520:54;4567:6;4562:3;4557;4520:54;:::i;:::-;4240:340;4157:423;;;;;:::o;4599:338::-;4654:5;4703:3;4696:4;4688:6;4684:17;4680:27;4670:122;;4711:79;;:::i;:::-;4670:122;4828:6;4815:20;4853:78;4927:3;4919:6;4912:4;4904:6;4900:17;4853:78;:::i;:::-;4844:87;;4660:277;4599:338;;;;:::o;4943:943::-;5038:6;5046;5054;5062;5111:3;5099:9;5090:7;5086:23;5082:33;5079:120;;;5118:79;;:::i;:::-;5079:120;5238:1;5263:53;5308:7;5299:6;5288:9;5284:22;5263:53;:::i;:::-;5253:63;;5209:117;5365:2;5391:53;5436:7;5427:6;5416:9;5412:22;5391:53;:::i;:::-;5381:63;;5336:118;5493:2;5519:53;5564:7;5555:6;5544:9;5540:22;5519:53;:::i;:::-;5509:63;;5464:118;5649:2;5638:9;5634:18;5621:32;5680:18;5672:6;5669:30;5666:117;;;5702:79;;:::i;:::-;5666:117;5807:62;5861:7;5852:6;5841:9;5837:22;5807:62;:::i;:::-;5797:72;;5592:287;4943:943;;;;;;;:::o;5892:507::-;5960:6;6009:2;5997:9;5988:7;5984:23;5980:32;5977:119;;;6015:79;;:::i;:::-;5977:119;6163:1;6152:9;6148:17;6135:31;6193:18;6185:6;6182:30;6179:117;;;6215:79;;:::i;:::-;6179:117;6320:62;6374:7;6365:6;6354:9;6350:22;6320:62;:::i;:::-;6310:72;;6106:286;5892:507;;;;:::o;6405:652::-;6482:6;6490;6539:2;6527:9;6518:7;6514:23;6510:32;6507:119;;;6545:79;;:::i;:::-;6507:119;6665:1;6690:53;6735:7;6726:6;6715:9;6711:22;6690:53;:::i;:::-;6680:63;;6636:117;6820:2;6809:9;6805:18;6792:32;6851:18;6843:6;6840:30;6837:117;;;6873:79;;:::i;:::-;6837:117;6978:62;7032:7;7023:6;7012:9;7008:22;6978:62;:::i;:::-;6968:72;;6763:287;6405:652;;;;;:::o;7063:77::-;7100:7;7129:5;7118:16;;7063:77;;;:::o;7146:118::-;7233:24;7251:5;7233:24;:::i;:::-;7228:3;7221:37;7146:118;;:::o;7270:222::-;7363:4;7401:2;7390:9;7386:18;7378:26;;7414:71;7482:1;7471:9;7467:17;7458:6;7414:71;:::i;:::-;7270:222;;;;:::o;7498:60::-;7526:3;7547:5;7540:12;;7498:60;;;:::o;7564:142::-;7614:9;7647:53;7665:34;7674:24;7692:5;7674:24;:::i;:::-;7665:34;:::i;:::-;7647:53;:::i;:::-;7634:66;;7564:142;;;:::o;7712:126::-;7762:9;7795:37;7826:5;7795:37;:::i;:::-;7782:50;;7712:126;;;:::o;7844:152::-;7920:9;7953:37;7984:5;7953:37;:::i;:::-;7940:50;;7844:152;;;:::o;8002:183::-;8115:63;8172:5;8115:63;:::i;:::-;8110:3;8103:76;8002:183;;:::o;8191:274::-;8310:4;8348:2;8337:9;8333:18;8325:26;;8361:97;8455:1;8444:9;8440:17;8431:6;8361:97;:::i;:::-;8191:274;;;;:::o;8471:101::-;8507:7;8547:18;8540:5;8536:30;8525:41;;8471:101;;;:::o;8578:120::-;8650:23;8667:5;8650:23;:::i;:::-;8643:5;8640:34;8630:62;;8688:1;8685;8678:12;8630:62;8578:120;:::o;8704:137::-;8749:5;8787:6;8774:20;8765:29;;8803:32;8829:5;8803:32;:::i;:::-;8704:137;;;;:::o;8847:122::-;8920:24;8938:5;8920:24;:::i;:::-;8913:5;8910:35;8900:63;;8959:1;8956;8949:12;8900:63;8847:122;:::o;8975:139::-;9021:5;9059:6;9046:20;9037:29;;9075:33;9102:5;9075:33;:::i;:::-;8975:139;;;;:::o;9120:117::-;9229:1;9226;9219:12;9243:117;9352:1;9349;9342:12;9383:568;9456:8;9466:6;9516:3;9509:4;9501:6;9497:17;9493:27;9483:122;;9524:79;;:::i;:::-;9483:122;9637:6;9624:20;9614:30;;9667:18;9659:6;9656:30;9653:117;;;9689:79;;:::i;:::-;9653:117;9803:4;9795:6;9791:17;9779:29;;9857:3;9849:4;9841:6;9837:17;9827:8;9823:32;9820:41;9817:128;;;9864:79;;:::i;:::-;9817:128;9383:568;;;;;:::o;9957:993::-;10069:6;10077;10085;10093;10101;10150:3;10138:9;10129:7;10125:23;10121:33;10118:120;;;10157:79;;:::i;:::-;10118:120;10277:1;10302:52;10346:7;10337:6;10326:9;10322:22;10302:52;:::i;:::-;10292:62;;10248:116;10403:2;10429:53;10474:7;10465:6;10454:9;10450:22;10429:53;:::i;:::-;10419:63;;10374:118;10531:2;10557:53;10602:7;10593:6;10582:9;10578:22;10557:53;:::i;:::-;10547:63;;10502:118;10687:2;10676:9;10672:18;10659:32;10718:18;10710:6;10707:30;10704:117;;;10740:79;;:::i;:::-;10704:117;10853:80;10925:7;10916:6;10905:9;10901:22;10853:80;:::i;:::-;10835:98;;;;10630:313;9957:993;;;;;;;;:::o;10956:327::-;11014:6;11063:2;11051:9;11042:7;11038:23;11034:32;11031:119;;;11069:79;;:::i;:::-;11031:119;11189:1;11214:52;11258:7;11249:6;11238:9;11234:22;11214:52;:::i;:::-;11204:62;;11160:116;10956:327;;;;:::o;11289:90::-;11323:7;11366:5;11359:13;11352:21;11341:32;;11289:90;;;:::o;11385:109::-;11466:21;11481:5;11466:21;:::i;:::-;11461:3;11454:34;11385:109;;:::o;11500:210::-;11587:4;11625:2;11614:9;11610:18;11602:26;;11638:65;11700:1;11689:9;11685:17;11676:6;11638:65;:::i;:::-;11500:210;;;;:::o;11716:116::-;11786:21;11801:5;11786:21;:::i;:::-;11779:5;11776:32;11766:60;;11822:1;11819;11812:12;11766:60;11716:116;:::o;11838:133::-;11881:5;11919:6;11906:20;11897:29;;11935:30;11959:5;11935:30;:::i;:::-;11838:133;;;;:::o;11977:466::-;12041:6;12049;12098:2;12086:9;12077:7;12073:23;12069:32;12066:119;;;12104:79;;:::i;:::-;12066:119;12224:1;12249:52;12293:7;12284:6;12273:9;12269:22;12249:52;:::i;:::-;12239:62;;12195:116;12350:2;12376:50;12418:7;12409:6;12398:9;12394:22;12376:50;:::i;:::-;12366:60;;12321:115;11977:466;;;;;:::o;12449:122::-;12522:24;12540:5;12522:24;:::i;:::-;12515:5;12512:35;12502:63;;12561:1;12558;12551:12;12502:63;12449:122;:::o;12577:139::-;12623:5;12661:6;12648:20;12639:29;;12677:33;12704:5;12677:33;:::i;:::-;12577:139;;;;:::o;12722:329::-;12781:6;12830:2;12818:9;12809:7;12805:23;12801:32;12798:119;;;12836:79;;:::i;:::-;12798:119;12956:1;12981:53;13026:7;13017:6;13006:9;13002:22;12981:53;:::i;:::-;12971:63;;12927:117;12722:329;;;;:::o;13057:99::-;13109:6;13143:5;13137:12;13127:22;;13057:99;;;:::o;13162:169::-;13246:11;13280:6;13275:3;13268:19;13320:4;13315:3;13311:14;13296:29;;13162:169;;;;:::o;13337:377::-;13425:3;13453:39;13486:5;13453:39;:::i;:::-;13508:71;13572:6;13567:3;13508:71;:::i;:::-;13501:78;;13588:65;13646:6;13641:3;13634:4;13627:5;13623:16;13588:65;:::i;:::-;13678:29;13700:6;13678:29;:::i;:::-;13673:3;13669:39;13662:46;;13429:285;13337:377;;;;:::o;13720:313::-;13833:4;13871:2;13860:9;13856:18;13848:26;;13920:9;13914:4;13910:20;13906:1;13895:9;13891:17;13884:47;13948:78;14021:4;14012:6;13948:78;:::i;:::-;13940:86;;13720:313;;;;:::o;14039:323::-;14095:6;14144:2;14132:9;14123:7;14119:23;14115:32;14112:119;;;14150:79;;:::i;:::-;14112:119;14270:1;14295:50;14337:7;14328:6;14317:9;14313:22;14295:50;:::i;:::-;14285:60;;14241:114;14039:323;;;;:::o;14368:147::-;14439:9;14472:37;14503:5;14472:37;:::i;:::-;14459:50;;14368:147;;;:::o;14521:173::-;14629:58;14681:5;14629:58;:::i;:::-;14624:3;14617:71;14521:173;;:::o;14700:264::-;14814:4;14852:2;14841:9;14837:18;14829:26;;14865:92;14954:1;14943:9;14939:17;14930:6;14865:92;:::i;:::-;14700:264;;;;:::o;14970:617::-;15046:6;15054;15062;15111:2;15099:9;15090:7;15086:23;15082:32;15079:119;;;15117:79;;:::i;:::-;15079:119;15237:1;15262:52;15306:7;15297:6;15286:9;15282:22;15262:52;:::i;:::-;15252:62;;15208:116;15363:2;15389:53;15434:7;15425:6;15414:9;15410:22;15389:53;:::i;:::-;15379:63;;15334:118;15491:2;15517:53;15562:7;15553:6;15542:9;15538:22;15517:53;:::i;:::-;15507:63;;15462:118;14970:617;;;;;:::o;15593:118::-;15680:24;15698:5;15680:24;:::i;:::-;15675:3;15668:37;15593:118;;:::o;15717:222::-;15810:4;15848:2;15837:9;15833:18;15825:26;;15861:71;15929:1;15918:9;15914:17;15905:6;15861:71;:::i;:::-;15717:222;;;;:::o;15945:180::-;15993:77;15990:1;15983:88;16090:4;16087:1;16080:15;16114:4;16111:1;16104:15;16131:320;16175:6;16212:1;16206:4;16202:12;16192:22;;16259:1;16253:4;16249:12;16280:18;16270:81;;16336:4;16328:6;16324:17;16314:27;;16270:81;16398:2;16390:6;16387:14;16367:18;16364:38;16361:84;;16417:18;;:::i;:::-;16361:84;16182:269;16131:320;;;:::o;16457:119::-;16517:7;16546:24;16564:5;16546:24;:::i;:::-;16535:35;;16457:119;;;:::o;16582:168::-;16678:47;16719:5;16678:47;:::i;:::-;16671:5;16668:58;16658:86;;16740:1;16737;16730:12;16658:86;16582:168;:::o;16756:189::-;16836:5;16867:6;16861:13;16852:22;;16883:56;16933:5;16883:56;:::i;:::-;16756:189;;;;:::o;16951:397::-;17044:6;17093:2;17081:9;17072:7;17068:23;17064:32;17061:119;;;17099:79;;:::i;:::-;17061:119;17219:1;17244:87;17323:7;17314:6;17303:9;17299:22;17244:87;:::i;:::-;17234:97;;17190:151;16951:397;;;;:::o;17354:332::-;17475:4;17513:2;17502:9;17498:18;17490:26;;17526:71;17594:1;17583:9;17579:17;17570:6;17526:71;:::i;:::-;17607:72;17675:2;17664:9;17660:18;17651:6;17607:72;:::i;:::-;17354:332;;;;;:::o;17692:137::-;17746:5;17777:6;17771:13;17762:22;;17793:30;17817:5;17793:30;:::i;:::-;17692:137;;;;:::o;17835:345::-;17902:6;17951:2;17939:9;17930:7;17926:23;17922:32;17919:119;;;17957:79;;:::i;:::-;17919:119;18077:1;18102:61;18155:7;18146:6;18135:9;18131:22;18102:61;:::i;:::-;18092:71;;18048:125;17835:345;;;;:::o;18186:85::-;18231:7;18260:5;18249:16;;18186:85;;;:::o;18277:156::-;18334:9;18367:60;18384:42;18393:32;18419:5;18393:32;:::i;:::-;18384:42;:::i;:::-;18367:60;:::i;:::-;18354:73;;18277:156;;;:::o;18439:145::-;18533:44;18571:5;18533:44;:::i;:::-;18528:3;18521:57;18439:145;;:::o;18590:236::-;18690:4;18728:2;18717:9;18713:18;18705:26;;18741:78;18816:1;18805:9;18801:17;18792:6;18741:78;:::i;:::-;18590:236;;;;:::o;18832:147::-;18933:11;18970:3;18955:18;;18832:147;;;;:::o;18985:114::-;;:::o;19105:398::-;19264:3;19285:83;19366:1;19361:3;19285:83;:::i;:::-;19278:90;;19377:93;19466:3;19377:93;:::i;:::-;19495:1;19490:3;19486:11;19479:18;;19105:398;;;:::o;19509:379::-;19693:3;19715:147;19858:3;19715:147;:::i;:::-;19708:154;;19879:3;19872:10;;19509:379;;;:::o;19894:332::-;20015:4;20053:2;20042:9;20038:18;20030:26;;20066:71;20134:1;20123:9;20119:17;20110:6;20066:71;:::i;:::-;20147:72;20215:2;20204:9;20200:18;20191:6;20147:72;:::i;:::-;19894:332;;;;;:::o;20232:115::-;20317:23;20334:5;20317:23;:::i;:::-;20312:3;20305:36;20232:115;;:::o;20353:218::-;20444:4;20482:2;20471:9;20467:18;20459:26;;20495:69;20561:1;20550:9;20546:17;20537:6;20495:69;:::i;:::-;20353:218;;;;:::o;20577:79::-;20616:7;20645:5;20634:16;;20577:79;;;:::o;20662:157::-;20767:45;20787:24;20805:5;20787:24;:::i;:::-;20767:45;:::i;:::-;20762:3;20755:58;20662:157;;:::o;20825:256::-;20937:3;20952:75;21023:3;21014:6;20952:75;:::i;:::-;21052:2;21047:3;21043:12;21036:19;;21072:3;21065:10;;20825:256;;;;:::o;21087:332::-;21208:4;21246:2;21235:9;21231:18;21223:26;;21259:71;21327:1;21316:9;21312:17;21303:6;21259:71;:::i;:::-;21340:72;21408:2;21397:9;21393:18;21384:6;21340:72;:::i;:::-;21087:332;;;;;:::o;21425:158::-;21498:11;21532:6;21527:3;21520:19;21572:4;21567:3;21563:14;21548:29;;21425:158;;;;:::o;21589:353::-;21665:3;21693:38;21725:5;21693:38;:::i;:::-;21747:60;21800:6;21795:3;21747:60;:::i;:::-;21740:67;;21816:65;21874:6;21869:3;21862:4;21855:5;21851:16;21816:65;:::i;:::-;21906:29;21928:6;21906:29;:::i;:::-;21901:3;21897:39;21890:46;;21669:273;21589:353;;;;:::o;21948:145::-;22046:6;22080:5;22074:12;22064:22;;21948:145;;;:::o;22099:205::-;22219:11;22253:6;22248:3;22241:19;22293:4;22288:3;22284:14;22269:29;;22099:205;;;;:::o;22310:163::-;22408:4;22431:3;22423:11;;22461:4;22456:3;22452:14;22444:22;;22310:163;;;:::o;22479:108::-;22556:24;22574:5;22556:24;:::i;:::-;22551:3;22544:37;22479:108;;:::o;22593:::-;22670:24;22688:5;22670:24;:::i;:::-;22665:3;22658:37;22593:108;;:::o;22775:512::-;22924:4;22919:3;22915:14;23012:4;23005:5;23001:16;22995:23;23031:63;23088:4;23083:3;23079:14;23065:12;23031:63;:::i;:::-;22939:165;23188:4;23181:5;23177:16;23171:23;23207:63;23264:4;23259:3;23255:14;23241:12;23207:63;:::i;:::-;23114:166;22893:394;22775:512;;:::o;23293:303::-;23424:10;23445:108;23549:3;23541:6;23445:108;:::i;:::-;23585:4;23580:3;23576:14;23562:28;;23293:303;;;;:::o;23602:144::-;23703:4;23735;23730:3;23726:14;23718:22;;23602:144;;;:::o;23824:960::-;23995:3;24024:85;24103:5;24024:85;:::i;:::-;24125:107;24225:6;24220:3;24125:107;:::i;:::-;24118:114;;24256:87;24337:5;24256:87;:::i;:::-;24366:7;24397:1;24382:377;24407:6;24404:1;24401:13;24382:377;;;24483:6;24477:13;24510:125;24631:3;24616:13;24510:125;:::i;:::-;24503:132;;24658:91;24742:6;24658:91;:::i;:::-;24648:101;;24442:317;24429:1;24426;24422:9;24417:14;;24382:377;;;24386:14;24775:3;24768:10;;24000:784;;;23824:960;;;;:::o;24858:1460::-;24989:3;25025:4;25020:3;25016:14;25116:4;25109:5;25105:16;25099:23;25169:3;25163:4;25159:14;25152:4;25147:3;25143:14;25136:38;25195:71;25261:4;25247:12;25195:71;:::i;:::-;25187:79;;25040:237;25359:4;25352:5;25348:16;25342:23;25412:3;25406:4;25402:14;25395:4;25390:3;25386:14;25379:38;25438:71;25504:4;25490:12;25438:71;:::i;:::-;25430:79;;25287:233;25610:4;25603:5;25599:16;25593:23;25663:3;25657:4;25653:14;25646:4;25641:3;25637:14;25630:38;25689:165;25849:4;25835:12;25689:165;:::i;:::-;25681:173;;25530:335;25951:4;25944:5;25940:16;25934:23;25970:63;26027:4;26022:3;26018:14;26004:12;25970:63;:::i;:::-;25875:168;26130:4;26123:5;26119:16;26113:23;26183:3;26177:4;26173:14;26166:4;26161:3;26157:14;26150:38;26209:71;26275:4;26261:12;26209:71;:::i;:::-;26201:79;;26053:238;26308:4;26301:11;;24994:1324;24858:1460;;;;:::o;26324:503::-;26505:4;26543:2;26532:9;26528:18;26520:26;;26556:69;26622:1;26611:9;26607:17;26598:6;26556:69;:::i;:::-;26672:9;26666:4;26662:20;26657:2;26646:9;26642:18;26635:48;26700:120;26815:4;26806:6;26700:120;:::i;:::-;26692:128;;26324:503;;;;;:::o;26833:143::-;26890:5;26921:6;26915:13;26906:22;;26937:33;26964:5;26937:33;:::i;:::-;26833:143;;;;:::o;26982:351::-;27052:6;27101:2;27089:9;27080:7;27076:23;27072:32;27069:119;;;27107:79;;:::i;:::-;27069:119;27227:1;27252:64;27308:7;27299:6;27288:9;27284:22;27252:64;:::i;:::-;27242:74;;27198:128;26982:351;;;;:::o;27339:316::-;27452:4;27490:2;27479:9;27475:18;27467:26;;27503:69;27569:1;27558:9;27554:17;27545:6;27503:69;:::i;:::-;27582:66;27644:2;27633:9;27629:18;27620:6;27582:66;:::i;:::-;27339:316;;;;;:::o;27661:140::-;27709:4;27732:3;27724:11;;27755:3;27752:1;27745:14;27789:4;27786:1;27776:18;27768:26;;27661:140;;;:::o;27807:93::-;27844:6;27891:2;27886;27879:5;27875:14;27871:23;27861:33;;27807:93;;;:::o;27906:107::-;27950:8;28000:5;27994:4;27990:16;27969:37;;27906:107;;;;:::o;28019:393::-;28088:6;28138:1;28126:10;28122:18;28161:97;28191:66;28180:9;28161:97;:::i;:::-;28279:39;28309:8;28298:9;28279:39;:::i;:::-;28267:51;;28351:4;28347:9;28340:5;28336:21;28327:30;;28400:4;28390:8;28386:19;28379:5;28376:30;28366:40;;28095:317;;28019:393;;;;;:::o;28418:142::-;28468:9;28501:53;28519:34;28528:24;28546:5;28528:24;:::i;:::-;28519:34;:::i;:::-;28501:53;:::i;:::-;28488:66;;28418:142;;;:::o;28566:75::-;28609:3;28630:5;28623:12;;28566:75;;;:::o;28647:269::-;28757:39;28788:7;28757:39;:::i;:::-;28818:91;28867:41;28891:16;28867:41;:::i;:::-;28859:6;28852:4;28846:11;28818:91;:::i;:::-;28812:4;28805:105;28723:193;28647:269;;;:::o;28922:73::-;28967:3;28988:1;28981:8;;28922:73;:::o;29001:189::-;29078:32;;:::i;:::-;29119:65;29177:6;29169;29163:4;29119:65;:::i;:::-;29054:136;29001:189;;:::o;29196:186::-;29256:120;29273:3;29266:5;29263:14;29256:120;;;29327:39;29364:1;29357:5;29327:39;:::i;:::-;29300:1;29293:5;29289:13;29280:22;;29256:120;;;29196:186;;:::o;29388:541::-;29488:2;29483:3;29480:11;29477:445;;;29522:37;29553:5;29522:37;:::i;:::-;29605:29;29623:10;29605:29;:::i;:::-;29595:8;29591:44;29788:2;29776:10;29773:18;29770:49;;;29809:8;29794:23;;29770:49;29832:80;29888:22;29906:3;29888:22;:::i;:::-;29878:8;29874:37;29861:11;29832:80;:::i;:::-;29492:430;;29477:445;29388:541;;;:::o;29935:117::-;29989:8;30039:5;30033:4;30029:16;30008:37;;29935:117;;;;:::o;30058:169::-;30102:6;30135:51;30183:1;30179:6;30171:5;30168:1;30164:13;30135:51;:::i;:::-;30131:56;30216:4;30210;30206:15;30196:25;;30109:118;30058:169;;;;:::o;30232:295::-;30308:4;30454:29;30479:3;30473:4;30454:29;:::i;:::-;30446:37;;30516:3;30513:1;30509:11;30503:4;30500:21;30492:29;;30232:295;;;;:::o;30532:1390::-;30647:36;30679:3;30647:36;:::i;:::-;30748:18;30740:6;30737:30;30734:56;;;30770:18;;:::i;:::-;30734:56;30814:38;30846:4;30840:11;30814:38;:::i;:::-;30899:66;30958:6;30950;30944:4;30899:66;:::i;:::-;30992:1;31016:4;31003:17;;31048:2;31040:6;31037:14;31065:1;31060:617;;;;31721:1;31738:6;31735:77;;;31787:9;31782:3;31778:19;31772:26;31763:35;;31735:77;31838:67;31898:6;31891:5;31838:67;:::i;:::-;31832:4;31825:81;31694:222;31030:886;;31060:617;31112:4;31108:9;31100:6;31096:22;31146:36;31177:4;31146:36;:::i;:::-;31204:1;31218:208;31232:7;31229:1;31226:14;31218:208;;;31311:9;31306:3;31302:19;31296:26;31288:6;31281:42;31362:1;31354:6;31350:14;31340:24;;31409:2;31398:9;31394:18;31381:31;;31255:4;31252:1;31248:12;31243:17;;31218:208;;;31454:6;31445:7;31442:19;31439:179;;;31512:9;31507:3;31503:19;31497:26;31555:48;31597:4;31589:6;31585:17;31574:9;31555:48;:::i;:::-;31547:6;31540:64;31462:156;31439:179;31664:1;31660;31652:6;31648:14;31644:22;31638:4;31631:36;31067:610;;;31030:886;;30622:1300;;;30532:1390;;:::o;31928:143::-;31985:5;32016:6;32010:13;32001:22;;32032:33;32059:5;32032:33;:::i;:::-;31928:143;;;;:::o;32077:351::-;32147:6;32196:2;32184:9;32175:7;32171:23;32167:32;32164:119;;;32202:79;;:::i;:::-;32164:119;32322:1;32347:64;32403:7;32394:6;32383:9;32379:22;32347:64;:::i;:::-;32337:74;;32293:128;32077:351;;;;:::o;32434:442::-;32583:4;32621:2;32610:9;32606:18;32598:26;;32634:71;32702:1;32691:9;32687:17;32678:6;32634:71;:::i;:::-;32715:72;32783:2;32772:9;32768:18;32759:6;32715:72;:::i;:::-;32797;32865:2;32854:9;32850:18;32841:6;32797:72;:::i;:::-;32434:442;;;;;;:::o;32882:180::-;32930:77;32927:1;32920:88;33027:4;33024:1;33017:15;33051:4;33048:1;33041:15;33068:386;33172:3;33200:38;33232:5;33200:38;:::i;:::-;33254:88;33335:6;33330:3;33254:88;:::i;:::-;33247:95;;33351:65;33409:6;33404:3;33397:4;33390:5;33386:16;33351:65;:::i;:::-;33441:6;33436:3;33432:16;33425:23;;33176:278;33068:386;;;;:::o;33460:271::-;33590:3;33612:93;33701:3;33692:6;33612:93;:::i;:::-;33605:100;;33722:3;33715:10;;33460:271;;;;:::o",
    "linkReferences": {},
    "immutableReferences": {
      "622": [
        { "start": 7010, "length": 32 },
        { "start": 7095, "length": 32 },
        { "start": 7896, "length": 32 }
      ]
    }
  },
  "methodIdentifiers": {
    "MINIMUM_BRIDGE_AMOUNT()": "0db5176e",
    "UPGRADE_INTERFACE_VERSION()": "ad3cb1cc",
    "allowlistDestinationChain(uint64,bool)": "96d3b83d",
    "estimateFees(uint64,address,uint256)": "f5a78aed",
    "initialize(address,address,address,bytes)": "246581f7",
    "proxiableUUID()": "52d1902d",
    "s_addressProvider()": "5c05ca38",
    "s_allowlistedDestinationChains(uint64)": "64747c3f",
    "s_extraArgs()": "055e0fde",
    "s_router()": "e16e632c",
    "s_sponsoredFees()": "b345dccc",
    "s_tokenToBridge()": "fa9239f5",
    "s_whitelistedMerkleRoot()": "c5741111",
    "sendMessage(uint64,address,uint256,bytes32[])": "5d510547",
    "setAddressProvider(address)": "1a5fa2e3",
    "setExtraArgs(bytes)": "26cc3731",
    "setSponsoredFees(bool)": "dd92c0c8",
    "updateWhitelistedRoot(bytes32)": "9bee6720",
    "upgradeToAndCall(address,bytes)": "4f1ef286",
    "withdraw(address)": "51cff8d9"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AddressCantBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"}],\"name\":\"AmountLessThanMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerNotMaintainer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FailedToWithdraw\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"neededAmount\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"NotWhitelisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NothingToWithdraw\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Sender__ExtraArgsLengthZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Sender__InvalidChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"Sender__NotUserCentralized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"Sender__UnauthorizedDestinationChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"Sender__UnexpectedEtherSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddressProvider\",\"type\":\"address\"}],\"name\":\"Sender__AddressProviderUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"destinationChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allow\",\"type\":\"bool\"}],\"name\":\"Sender__DestinationChainAllowlisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"Sender__ExtraArgsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"userSource\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Sender__MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"Sender__SponsoredFeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newRoot\",\"type\":\"bytes32\"}],\"name\":\"Sender__WhitelistedRootUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Sender__Withdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MINIMUM_BRIDGE_AMOUNT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destinationChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allow\",\"type\":\"bool\"}],\"name\":\"allowlistDestinationChain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destinationChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"estimateFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenToBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"addressProvider\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_addressProvider\",\"outputs\":[{\"internalType\":\"contract IAddressProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"s_allowlistedDestinationChains\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_extraArgs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_router\",\"outputs\":[{\"internalType\":\"contract IRouterClient\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_sponsoredFees\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_tokenToBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_whitelistedMerkleRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destinationChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"_proof\",\"type\":\"bytes32[]\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAddressProvider\",\"type\":\"address\"}],\"name\":\"setAddressProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"name\":\"setExtraArgs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"sponsoredFees\",\"type\":\"bool\"}],\"name\":\"setSponsoredFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newRoot\",\"type\":\"bytes32\"}],\"name\":\"updateWhitelistedRoot\",\"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\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"allowlistDestinationChain(uint64,bool)\":{\"params\":{\"allow\":\"The permission\",\"destinationChainSelector\":\"The selector of the destination chain\"}},\"constructor\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor\"},\"estimateFees(uint64,address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens to send\",\"destinationChainSelector\":\"The selector of the destination chain\",\"receiver\":\"The address of the receiver contract on the destination chain\"},\"returns\":{\"_0\":\"uint256 The estimated fees in native token\"}},\"initialize(address,address,address,bytes)\":{\"params\":{\"addressProvider\":\"The address of the address provider contract\",\"router\":\"The address of the CCIP router according to the chainlink documentation\",\"tokenToBridge\":\"The token to bridge from the source chain to the destination chain\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"sendMessage(uint64,address,uint256,bytes32[])\":{\"params\":{\"_proof\":\"The merkle proof to verify the sender's whitelisting.\",\"amount\":\"The amount of tokens to send.\",\"destinationChainSelector\":\"The selector of the destination chain.\",\"receiver\":\"The address of the receiver contract on the destination chain.\"}},\"setAddressProvider(address)\":{\"params\":{\"newAddressProvider\":\"The address of the new address provider\"}},\"setSponsoredFees(bool)\":{\"details\":\"If sponsored, the contract will pay the fees for sending messages.\",\"params\":{\"sponsoredFees\":\"Whether the fees for sending messages are sponsored or not.\"}},\"updateWhitelistedRoot(bytes32)\":{\"params\":{\"newRoot\":\"The new whitelisted merkle root.\"}},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"title\":\"Sender\",\"version\":1},\"userdoc\":{\"errors\":{\"AddressCantBeZero()\":[{\"notice\":\"Error thrown when address is equal to address(0).\"}],\"AmountLessThanMin(uint256,uint256)\":[{\"notice\":\"Thrown when the amount is less than the min amount.\"}],\"CallerNotMaintainer(bytes32,address)\":[{\"notice\":\"Error thrown when the caller does not have the role MAINTAINER_ROLE\"}],\"FailedToWithdraw(address,uint256)\":[{\"notice\":\"Error thrown when withraw failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"notice\":\"Thrown when the amount is not sufficient.\"}],\"NotWhitelisted(address)\":[{\"notice\":\"Thrown when the address is not whitelisted.\"}],\"NothingToWithdraw()\":[{\"notice\":\"Error thrown when amount to withdraw is 0.\"}]},\"kind\":\"user\",\"methods\":{\"allowlistDestinationChain(uint64,bool)\":{\"notice\":\"This function updates the allowlist for sending to a destination chain\"},\"estimateFees(uint64,address,uint256)\":{\"notice\":\"This function estimates the fees for sending a message\"},\"initialize(address,address,address,bytes)\":{\"notice\":\"Initialize for the Sender contract.\"},\"sendMessage(uint64,address,uint256,bytes32[])\":{\"notice\":\"This function sends a message to a destination chain.\"},\"setAddressProvider(address)\":{\"notice\":\"Sets the address provider for the messenger contract.\"},\"setSponsoredFees(bool)\":{\"notice\":\"Sets whether the fees for sending messages are sponsored or not.\"},\"updateWhitelistedRoot(bytes32)\":{\"notice\":\"This function allows the operator to update the whitelisted merkle root.\"},\"withdraw(address)\":{\"notice\":\"This function is used to withdraw native tokens\"}},\"notice\":\"This contract implements the ISender interface to send cross-chain messaging. It allows sending messages to a destination chain, managing allowlists for source, destination chains and sender contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/CCIP/Sender.sol\":\"Sender\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@chainlink/contracts-ccip/contracts/=dependencies/chainlink-ccip/chains/evm/contracts/\",\":@chainlink/contracts/=dependencies/chainlink-local/lib/chainlink-evm/contracts/\",\":@chainlink/local/=dependencies/chainlink-local/\",\":@openzeppelin/contracts-upgradeable/=dependencies/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=dependencies/openzeppelin-contracts/contracts/\",\":ccip/=dependencies/chainlink-local/lib/ccip/\",\":chainlink-brownie-contracts/=dependencies/chainlink-local/lib/chainlink-brownie-contracts/contracts/src/v0.6/vendor/@arbitrum/nitro-contracts/src/\",\":chainlink-ccip/=dependencies/chainlink-ccip/\",\":chainlink-evm/=dependencies/chainlink-local/lib/chainlink-evm/\",\":chainlink-local/=dependencies/chainlink-local/src/\",\":ds-test/=dependencies/chainlink-local/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=dependencies/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std-1.9.7/=dependencies/forge-std-1.9.7/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=dependencies/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=dependencies/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=dependencies/openzeppelin-contracts/\"]},\"sources\":{\"dependencies/chainlink-ccip/chains/evm/contracts/interfaces/IRouterClient.sol\":{\"keccak256\":\"0x21280104a988eb7022f8968b1672bafba80a74e59f5512415009dff9a37be46a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1bbcde3e9cd0c60f540ec0f2bbd70724cd6c9650428a1fade8c0589ef163d6ca\",\"dweb:/ipfs/QmajfuurMHa1SKWVVXsydeKuPCGzXkKtRUi2HW5EA7p6gr\"]},\"dependencies/chainlink-ccip/chains/evm/contracts/libraries/Client.sol\":{\"keccak256\":\"0x7c736e12ebb1d0e3a0c99436eacfac14d16ec941843050c9a7d82a6bff5b35a1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7cf3e0bbece35e0d1936225535b5ea91e63e45ad363d61fbec8423a53e96f6e5\",\"dweb:/ipfs/QmTMtUJcUGuMmLVMJ6PVTAWNatf9R77Cq6mzdDtFMUVB6h\"]},\"dependencies/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"dependencies/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x574a7451e42724f7de29e2855c392a8a5020acd695169466a18459467d719d63\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5bc189f63b639ee173dd7b6fecc39baf7113bf161776aea22b34c57fdd1872ec\",\"dweb:/ipfs/QmZAf2VtjDLRULqjJkde6LNsxAg12tUqpPqgUQQZbAjgtZ\"]},\"dependencies/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x4d9a2b261b56a1e4a37bb038151dec98b952fed16de2bdfdda27e38e2b12b530\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f724110f7aeb6151af800ab8c12e6060b29bda9e013f0ccb331eb754d6a7cbf0\",\"dweb:/ipfs/QmUcjzCZpxtUPdEThtAzE1f9LvuJiUGZxTdH9N6bHrb5Cf\"]},\"dependencies/openzeppelin-contracts/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"dependencies/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"dependencies/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"dependencies/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"dependencies/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"dependencies/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70\",\"dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2\"]},\"dependencies/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"dependencies/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"dependencies/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508\",\"dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB\"]},\"dependencies/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e\",\"dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR\"]},\"dependencies/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"dependencies/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"dependencies/openzeppelin-contracts/contracts/utils/cryptography/Hashes.sol\":{\"keccak256\":\"0x8cbd338f083224b4b6f0ff42cbda641a0a6c31ffcdca197452b97fe4d0918269\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f517dec5ba0c6491395acbf7f1d621f4e89e8f218bf5303c867b1c5ad70c6b11\",\"dweb:/ipfs/QmWmXHRLEw8W6ckth7NyYTU88YfvuS7xSsfae5ksL8qNUe\"]},\"dependencies/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"keccak256\":\"0x36a0c409c437a753cac9b92b75f93b0fbe92803bf2c8ff1517e54b247f166134\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f91ba472de411aa557cdbf6560c40750d87bd11c9060bc04d2ba7119af9d5a6\",\"dweb:/ipfs/QmQjtYo2i7dDvzCEzZ67bDoNSG4RrwMoxPWuqFmX5Xzpuw\"]},\"dependencies/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"src/CCIP/Sender.sol\":{\"keccak256\":\"0xceafadd42787fe3a8d5e949e4e80a99617cd7043c3a043db0e41a531df734913\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5a08201e61ab820b055325b2d5323fc89ca15172fe38708536ed30fa6dd6d585\",\"dweb:/ipfs/QmcAEbZENkGuLXWTz7GnyRdC5PJHrZU9JWVoExJuMguNyY\"]},\"src/interfaces/IAddressProvider.sol\":{\"keccak256\":\"0x995b3cb26505f35b3f48b9f870bf6b19f9ad34ce161fb9b6df5d3f7ae128348a\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4e6e50acc5b1d5f2726817cb6fe761c784a3351e0b21edb1021fecfd896d90d3\",\"dweb:/ipfs/QmPFWjwkpcdRjoeb95zFiTHYHL9SG5fnNyXVPHofJS13MK\"]},\"src/interfaces/IERC20Burnable.sol\":{\"keccak256\":\"0x0f6c9bc9b0bf4e0a90f59d3492260e607551e6c4402cef5cab63e64f5e77d8fe\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3b8740fa9d75e39538e233e962caf1abd028b89a8ef4bc8ed798ef01c0e6f0ff\",\"dweb:/ipfs/QmWfwJk9qAYabPCSGBxAUzp5UaMv8gTjcXMw2jp8wTb1wS\"]},\"src/interfaces/ISender.sol\":{\"keccak256\":\"0xb44fc3a8b051894efbe244607936a22c832279968a6e8adb793d4ecd74f2147a\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://2d03cd9ee1a8d360a5fcab3b56bfdcf412c2db8efcb05c9a5c9bc54462176454\",\"dweb:/ipfs/QmPg1v3sbtQm4qkjMK9oAE8o7THB2wtAxEQnCEQXLWBiGF\"]},\"src/libraries/Errors.sol\":{\"keccak256\":\"0x798b1b6468bcb812d90abdccbfa91728554ab9cbe1ee983d0032685d8e5b6ebc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5f0423dd9c88e608791c1dc5bade3cd0ef8cefee893bca385818c0d40a1b1732\",\"dweb:/ipfs/QmUFL8PKqqkkooh4rqPRCiKu36hu3g3nZ8K6Hzv9oZRuRs\"]},\"src/libraries/Roles.sol\":{\"keccak256\":\"0x2eea8296a20a4b5d7d56282bd6ecedfd9fc33e651bab0b7c3833e693ae6025ed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://95b0ac8192dfbd090b7c0d0e362af6961ef444785c9ea92b716d65cf3f11079e\",\"dweb:/ipfs/QmdFiE9XVHhPpeVatN5eCighJ7N6csfUwjonq8GZVFH5d3\"]}},\"version\":1}",
  "metadata": {
    "compiler": { "version": "0.8.30+commit.73712a01" },
    "language": "Solidity",
    "output": {
      "abi": [
        { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" },
        { "inputs": [], "type": "error", "name": "AddressCantBeZero" },
        {
          "inputs": [{ "internalType": "address", "name": "target", "type": "address" }],
          "type": "error",
          "name": "AddressEmptyCode"
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "amount", "type": "uint256" },
            { "internalType": "uint256", "name": "minAmount", "type": "uint256" }
          ],
          "type": "error",
          "name": "AmountLessThanMin"
        },
        {
          "inputs": [
            { "internalType": "bytes32", "name": "role", "type": "bytes32" },
            { "internalType": "address", "name": "caller", "type": "address" }
          ],
          "type": "error",
          "name": "CallerNotMaintainer"
        },
        {
          "inputs": [{ "internalType": "address", "name": "implementation", "type": "address" }],
          "type": "error",
          "name": "ERC1967InvalidImplementation"
        },
        { "inputs": [], "type": "error", "name": "ERC1967NonPayable" },
        { "inputs": [], "type": "error", "name": "FailedCall" },
        {
          "inputs": [
            { "internalType": "address", "name": "to", "type": "address" },
            { "internalType": "uint256", "name": "amount", "type": "uint256" }
          ],
          "type": "error",
          "name": "FailedToWithdraw"
        },
        {
          "inputs": [
            { "internalType": "uint256", "name": "amount", "type": "uint256" },
            { "internalType": "uint256", "name": "neededAmount", "type": "uint256" }
          ],
          "type": "error",
          "name": "InsufficientBalance"
        },
        { "inputs": [], "type": "error", "name": "InvalidInitialization" },
        { "inputs": [], "type": "error", "name": "NotInitializing" },
        {
          "inputs": [{ "internalType": "address", "name": "addr", "type": "address" }],
          "type": "error",
          "name": "NotWhitelisted"
        },
        { "inputs": [], "type": "error", "name": "NothingToWithdraw" },
        {
          "inputs": [{ "internalType": "address", "name": "token", "type": "address" }],
          "type": "error",
          "name": "SafeERC20FailedOperation"
        },
        { "inputs": [], "type": "error", "name": "Sender__ExtraArgsLengthZero" },
        { "inputs": [], "type": "error", "name": "Sender__InvalidChainSelector" },
        {
          "inputs": [
            { "internalType": "bytes32", "name": "", "type": "bytes32" },
            { "internalType": "address", "name": "", "type": "address" }
          ],
          "type": "error",
          "name": "Sender__NotUserCentralized"
        },
        {
          "inputs": [{ "internalType": "uint64", "name": "", "type": "uint64" }],
          "type": "error",
          "name": "Sender__UnauthorizedDestinationChain"
        },
        {
          "inputs": [
            { "internalType": "address", "name": "", "type": "address" },
            { "internalType": "uint256", "name": "", "type": "uint256" }
          ],
          "type": "error",
          "name": "Sender__UnexpectedEtherSent"
        },
        { "inputs": [], "type": "error", "name": "UUPSUnauthorizedCallContext" },
        {
          "inputs": [{ "internalType": "bytes32", "name": "slot", "type": "bytes32" }],
          "type": "error",
          "name": "UUPSUnsupportedProxiableUUID"
        },
        {
          "inputs": [{ "internalType": "uint64", "name": "version", "type": "uint64", "indexed": false }],
          "type": "event",
          "name": "Initialized",
          "anonymous": false
        },
        {
          "inputs": [{ "internalType": "address", "name": "newAddressProvider", "type": "address", "indexed": false }],
          "type": "event",
          "name": "Sender__AddressProviderUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "uint64", "name": "destinationChainSelector", "type": "uint64", "indexed": false },
            { "internalType": "bool", "name": "allow", "type": "bool", "indexed": false }
          ],
          "type": "event",
          "name": "Sender__DestinationChainAllowlisted",
          "anonymous": false
        },
        {
          "inputs": [{ "internalType": "bytes", "name": "", "type": "bytes", "indexed": false }],
          "type": "event",
          "name": "Sender__ExtraArgsUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "address", "name": "userSource", "type": "address", "indexed": true },
            { "internalType": "bytes32", "name": "messageId", "type": "bytes32", "indexed": true },
            { "internalType": "uint256", "name": "amount", "type": "uint256", "indexed": false }
          ],
          "type": "event",
          "name": "Sender__MessageSent",
          "anonymous": false
        },
        {
          "inputs": [{ "internalType": "bool", "name": "", "type": "bool", "indexed": false }],
          "type": "event",
          "name": "Sender__SponsoredFeesUpdated",
          "anonymous": false
        },
        {
          "inputs": [{ "internalType": "bytes32", "name": "newRoot", "type": "bytes32", "indexed": false }],
          "type": "event",
          "name": "Sender__WhitelistedRootUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            { "internalType": "address", "name": "beneficiary", "type": "address", "indexed": false },
            { "internalType": "uint256", "name": "amount", "type": "uint256", "indexed": false }
          ],
          "type": "event",
          "name": "Sender__Withdrawn",
          "anonymous": false
        },
        {
          "inputs": [{ "internalType": "address", "name": "implementation", "type": "address", "indexed": true }],
          "type": "event",
          "name": "Upgraded",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "MINIMUM_BRIDGE_AMOUNT",
          "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "UPGRADE_INTERFACE_VERSION",
          "outputs": [{ "internalType": "string", "name": "", "type": "string" }]
        },
        {
          "inputs": [
            { "internalType": "uint64", "name": "destinationChainSelector", "type": "uint64" },
            { "internalType": "bool", "name": "allow", "type": "bool" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "allowlistDestinationChain"
        },
        {
          "inputs": [
            { "internalType": "uint64", "name": "destinationChainSelector", "type": "uint64" },
            { "internalType": "address", "name": "receiver", "type": "address" },
            { "internalType": "uint256", "name": "amount", "type": "uint256" }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "estimateFees",
          "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
        },
        {
          "inputs": [
            { "internalType": "address", "name": "router", "type": "address" },
            { "internalType": "address", "name": "tokenToBridge", "type": "address" },
            { "internalType": "address", "name": "addressProvider", "type": "address" },
            { "internalType": "bytes", "name": "extraArgs", "type": "bytes" }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "initialize"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "proxiableUUID",
          "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "s_addressProvider",
          "outputs": [{ "internalType": "contract IAddressProvider", "name": "", "type": "address" }]
        },
        {
          "inputs": [{ "internalType": "uint64", "name": "", "type": "uint64" }],
          "stateMutability": "view",
          "type": "function",
          "name": "s_allowlistedDestinationChains",
          "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "s_extraArgs",
          "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "s_router",
          "outputs": [{ "internalType": "contract IRouterClient", "name": "", "type": "address" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "s_sponsoredFees",
          "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "s_tokenToBridge",
          "outputs": [{ "internalType": "address", "name": "", "type": "address" }]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "s_whitelistedMerkleRoot",
          "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }]
        },
        {
          "inputs": [
            { "internalType": "uint64", "name": "destinationChainSelector", "type": "uint64" },
            { "internalType": "address", "name": "receiver", "type": "address" },
            { "internalType": "uint256", "name": "amount", "type": "uint256" },
            { "internalType": "bytes32[]", "name": "_proof", "type": "bytes32[]" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "sendMessage",
          "outputs": [{ "internalType": "bytes32", "name": "messageId", "type": "bytes32" }]
        },
        {
          "inputs": [{ "internalType": "address", "name": "newAddressProvider", "type": "address" }],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setAddressProvider"
        },
        {
          "inputs": [{ "internalType": "bytes", "name": "extraArgs", "type": "bytes" }],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setExtraArgs"
        },
        {
          "inputs": [{ "internalType": "bool", "name": "sponsoredFees", "type": "bool" }],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setSponsoredFees"
        },
        {
          "inputs": [{ "internalType": "bytes32", "name": "newRoot", "type": "bytes32" }],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "updateWhitelistedRoot"
        },
        {
          "inputs": [
            { "internalType": "address", "name": "newImplementation", "type": "address" },
            { "internalType": "bytes", "name": "data", "type": "bytes" }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "upgradeToAndCall"
        },
        {
          "inputs": [{ "internalType": "address", "name": "beneficiary", "type": "address" }],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "withdraw"
        },
        { "inputs": [], "stateMutability": "payable", "type": "receive" }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "allowlistDestinationChain(uint64,bool)": {
            "params": { "allow": "The permission", "destinationChainSelector": "The selector of the destination chain" }
          },
          "constructor": { "custom:oz-upgrades-unsafe-allow": "constructor" },
          "estimateFees(uint64,address,uint256)": {
            "params": {
              "amount": "The amount of tokens to send",
              "destinationChainSelector": "The selector of the destination chain",
              "receiver": "The address of the receiver contract on the destination chain"
            },
            "returns": { "_0": "uint256 The estimated fees in native token" }
          },
          "initialize(address,address,address,bytes)": {
            "params": {
              "addressProvider": "The address of the address provider contract",
              "router": "The address of the CCIP router according to the chainlink documentation",
              "tokenToBridge": "The token to bridge from the source chain to the destination chain"
            }
          },
          "proxiableUUID()": {
            "details": "Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."
          },
          "sendMessage(uint64,address,uint256,bytes32[])": {
            "params": {
              "_proof": "The merkle proof to verify the sender's whitelisting.",
              "amount": "The amount of tokens to send.",
              "destinationChainSelector": "The selector of the destination chain.",
              "receiver": "The address of the receiver contract on the destination chain."
            }
          },
          "setAddressProvider(address)": {
            "params": { "newAddressProvider": "The address of the new address provider" }
          },
          "setSponsoredFees(bool)": {
            "details": "If sponsored, the contract will pay the fees for sending messages.",
            "params": { "sponsoredFees": "Whether the fees for sending messages are sponsored or not." }
          },
          "updateWhitelistedRoot(bytes32)": { "params": { "newRoot": "The new whitelisted merkle root." } },
          "upgradeToAndCall(address,bytes)": {
            "custom:oz-upgrades-unsafe-allow-reachable": "delegatecall",
            "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "allowlistDestinationChain(uint64,bool)": {
            "notice": "This function updates the allowlist for sending to a destination chain"
          },
          "estimateFees(uint64,address,uint256)": {
            "notice": "This function estimates the fees for sending a message"
          },
          "initialize(address,address,address,bytes)": { "notice": "Initialize for the Sender contract." },
          "sendMessage(uint64,address,uint256,bytes32[])": {
            "notice": "This function sends a message to a destination chain."
          },
          "setAddressProvider(address)": { "notice": "Sets the address provider for the messenger contract." },
          "setSponsoredFees(bool)": { "notice": "Sets whether the fees for sending messages are sponsored or not." },
          "updateWhitelistedRoot(bytes32)": {
            "notice": "This function allows the operator to update the whitelisted merkle root."
          },
          "withdraw(address)": { "notice": "This function is used to withdraw native tokens" }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@chainlink/contracts-ccip/contracts/=dependencies/chainlink-ccip/chains/evm/contracts/",
        "@chainlink/contracts/=dependencies/chainlink-local/lib/chainlink-evm/contracts/",
        "@chainlink/local/=dependencies/chainlink-local/",
        "@openzeppelin/contracts-upgradeable/=dependencies/openzeppelin-contracts-upgradeable/contracts/",
        "@openzeppelin/contracts/=dependencies/openzeppelin-contracts/contracts/",
        "ccip/=dependencies/chainlink-local/lib/ccip/",
        "chainlink-brownie-contracts/=dependencies/chainlink-local/lib/chainlink-brownie-contracts/contracts/src/v0.6/vendor/@arbitrum/nitro-contracts/src/",
        "chainlink-ccip/=dependencies/chainlink-ccip/",
        "chainlink-evm/=dependencies/chainlink-local/lib/chainlink-evm/",
        "chainlink-local/=dependencies/chainlink-local/src/",
        "ds-test/=dependencies/chainlink-local/lib/forge-std/lib/ds-test/src/",
        "erc4626-tests/=dependencies/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
        "forge-std-1.9.7/=dependencies/forge-std-1.9.7/",
        "forge-std/=lib/forge-std/src/",
        "halmos-cheatcodes/=dependencies/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
        "openzeppelin-contracts-upgradeable/=dependencies/openzeppelin-contracts-upgradeable/",
        "openzeppelin-contracts/=dependencies/openzeppelin-contracts/"
      ],
      "optimizer": { "enabled": false, "runs": 200 },
      "metadata": { "bytecodeHash": "ipfs" },
      "compilationTarget": { "src/CCIP/Sender.sol": "Sender" },
      "evmVersion": "prague",
      "libraries": {}
    },
    "sources": {
      "dependencies/chainlink-ccip/chains/evm/contracts/interfaces/IRouterClient.sol": {
        "keccak256": "0x21280104a988eb7022f8968b1672bafba80a74e59f5512415009dff9a37be46a",
        "urls": [
          "bzz-raw://1bbcde3e9cd0c60f540ec0f2bbd70724cd6c9650428a1fade8c0589ef163d6ca",
          "dweb:/ipfs/QmajfuurMHa1SKWVVXsydeKuPCGzXkKtRUi2HW5EA7p6gr"
        ],
        "license": "MIT"
      },
      "dependencies/chainlink-ccip/chains/evm/contracts/libraries/Client.sol": {
        "keccak256": "0x7c736e12ebb1d0e3a0c99436eacfac14d16ec941843050c9a7d82a6bff5b35a1",
        "urls": [
          "bzz-raw://7cf3e0bbece35e0d1936225535b5ea91e63e45ad363d61fbec8423a53e96f6e5",
          "dweb:/ipfs/QmTMtUJcUGuMmLVMJ6PVTAWNatf9R77Cq6mzdDtFMUVB6h"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": {
        "keccak256": "0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05",
        "urls": [
          "bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08",
          "dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol": {
        "keccak256": "0x574a7451e42724f7de29e2855c392a8a5020acd695169466a18459467d719d63",
        "urls": [
          "bzz-raw://5bc189f63b639ee173dd7b6fecc39baf7113bf161776aea22b34c57fdd1872ec",
          "dweb:/ipfs/QmZAf2VtjDLRULqjJkde6LNsxAg12tUqpPqgUQQZbAjgtZ"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/access/IAccessControl.sol": {
        "keccak256": "0x4d9a2b261b56a1e4a37bb038151dec98b952fed16de2bdfdda27e38e2b12b530",
        "urls": [
          "bzz-raw://f724110f7aeb6151af800ab8c12e6060b29bda9e013f0ccb331eb754d6a7cbf0",
          "dweb:/ipfs/QmUcjzCZpxtUPdEThtAzE1f9LvuJiUGZxTdH9N6bHrb5Cf"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/interfaces/IERC1363.sol": {
        "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7",
        "urls": [
          "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b",
          "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/interfaces/IERC165.sol": {
        "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724",
        "urls": [
          "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a",
          "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/interfaces/IERC1967.sol": {
        "keccak256": "0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486",
        "urls": [
          "bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d",
          "dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/interfaces/IERC20.sol": {
        "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c",
        "urls": [
          "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba",
          "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": {
        "keccak256": "0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d",
        "urls": [
          "bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196",
          "dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol": {
        "keccak256": "0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898",
        "urls": [
          "bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70",
          "dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": {
        "keccak256": "0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c",
        "urls": [
          "bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa",
          "dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
        "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7",
        "urls": [
          "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db",
          "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
        "keccak256": "0x982c5cb790ab941d1e04f807120a71709d4c313ba0bfc16006447ffbd27fbbd5",
        "urls": [
          "bzz-raw://8150ceb4ac947e8a442b2a9c017e01e880b2be2dd958f1fa9bc405f4c5a86508",
          "dweb:/ipfs/QmbcBmFX66AY6Kbhnd5gx7zpkgqnUafo43XnmayAM7zVdB"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/utils/Address.sol": {
        "keccak256": "0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c",
        "urls": [
          "bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e",
          "dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/utils/Errors.sol": {
        "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123",
        "urls": [
          "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf",
          "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/utils/StorageSlot.sol": {
        "keccak256": "0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97",
        "urls": [
          "bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b",
          "dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/utils/cryptography/Hashes.sol": {
        "keccak256": "0x8cbd338f083224b4b6f0ff42cbda641a0a6c31ffcdca197452b97fe4d0918269",
        "urls": [
          "bzz-raw://f517dec5ba0c6491395acbf7f1d621f4e89e8f218bf5303c867b1c5ad70c6b11",
          "dweb:/ipfs/QmWmXHRLEw8W6ckth7NyYTU88YfvuS7xSsfae5ksL8qNUe"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": {
        "keccak256": "0x36a0c409c437a753cac9b92b75f93b0fbe92803bf2c8ff1517e54b247f166134",
        "urls": [
          "bzz-raw://0f91ba472de411aa557cdbf6560c40750d87bd11c9060bc04d2ba7119af9d5a6",
          "dweb:/ipfs/QmQjtYo2i7dDvzCEzZ67bDoNSG4RrwMoxPWuqFmX5Xzpuw"
        ],
        "license": "MIT"
      },
      "dependencies/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
        "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8",
        "urls": [
          "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621",
          "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"
        ],
        "license": "MIT"
      },
      "src/CCIP/Sender.sol": {
        "keccak256": "0xceafadd42787fe3a8d5e949e4e80a99617cd7043c3a043db0e41a531df734913",
        "urls": [
          "bzz-raw://5a08201e61ab820b055325b2d5323fc89ca15172fe38708536ed30fa6dd6d585",
          "dweb:/ipfs/QmcAEbZENkGuLXWTz7GnyRdC5PJHrZU9JWVoExJuMguNyY"
        ],
        "license": "BUSL-1.1"
      },
      "src/interfaces/IAddressProvider.sol": {
        "keccak256": "0x995b3cb26505f35b3f48b9f870bf6b19f9ad34ce161fb9b6df5d3f7ae128348a",
        "urls": [
          "bzz-raw://4e6e50acc5b1d5f2726817cb6fe761c784a3351e0b21edb1021fecfd896d90d3",
          "dweb:/ipfs/QmPFWjwkpcdRjoeb95zFiTHYHL9SG5fnNyXVPHofJS13MK"
        ],
        "license": "BUSL-1.1"
      },
      "src/interfaces/IERC20Burnable.sol": {
        "keccak256": "0x0f6c9bc9b0bf4e0a90f59d3492260e607551e6c4402cef5cab63e64f5e77d8fe",
        "urls": [
          "bzz-raw://3b8740fa9d75e39538e233e962caf1abd028b89a8ef4bc8ed798ef01c0e6f0ff",
          "dweb:/ipfs/QmWfwJk9qAYabPCSGBxAUzp5UaMv8gTjcXMw2jp8wTb1wS"
        ],
        "license": "BUSL-1.1"
      },
      "src/interfaces/ISender.sol": {
        "keccak256": "0xb44fc3a8b051894efbe244607936a22c832279968a6e8adb793d4ecd74f2147a",
        "urls": [
          "bzz-raw://2d03cd9ee1a8d360a5fcab3b56bfdcf412c2db8efcb05c9a5c9bc54462176454",
          "dweb:/ipfs/QmPg1v3sbtQm4qkjMK9oAE8o7THB2wtAxEQnCEQXLWBiGF"
        ],
        "license": "BUSL-1.1"
      },
      "src/libraries/Errors.sol": {
        "keccak256": "0x798b1b6468bcb812d90abdccbfa91728554ab9cbe1ee983d0032685d8e5b6ebc",
        "urls": [
          "bzz-raw://5f0423dd9c88e608791c1dc5bade3cd0ef8cefee893bca385818c0d40a1b1732",
          "dweb:/ipfs/QmUFL8PKqqkkooh4rqPRCiKu36hu3g3nZ8K6Hzv9oZRuRs"
        ],
        "license": "GPL-3.0-or-later"
      },
      "src/libraries/Roles.sol": {
        "keccak256": "0x2eea8296a20a4b5d7d56282bd6ecedfd9fc33e651bab0b7c3833e693ae6025ed",
        "urls": [
          "bzz-raw://95b0ac8192dfbd090b7c0d0e362af6961ef444785c9ea92b716d65cf3f11079e",
          "dweb:/ipfs/QmdFiE9XVHhPpeVatN5eCighJ7N6csfUwjonq8GZVFH5d3"
        ],
        "license": "MIT"
      }
    },
    "version": 1
  },
  "id": 76
}
