false
false
- We're indexing this chain right now. Some of the counts may be inaccurate.

Contract Address Details

0xdd4ECbf23cD8AdcAc8F513422a3d1473de2bdC7A

Contract Name
cityCare
Creator
0x864f78–c6436b at 0xc62e0b–0bab9a
Balance
0
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
18215429
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
cityCare




Optimization enabled
true
Compiler version
v0.8.0+commit.c7dfd78e




Optimization runs
200
EVM Version
default




Verified at
2024-09-12T09:50:00.931359Z

Contract source code

Sol2uml
new
pragma solidity ^0.8.0;

contract cityCare {
    struct HealthRecord {
        string recordHash;
        string metadata;
        uint256 timestamp;
        bool active;
    }

    struct Citizen {
        string did;
        mapping(address => bool) authorizedProviders;
        mapping(uint256 => HealthRecord) healthRecords;
        uint256 recordCount;
        bool registered;
    }

    address public cityAdmin;
    mapping(address => bool) public registeredProviders;
    mapping(address => Citizen) private citizens;

    event CitizenRegistered(address indexed citizenAddress, string did);
    event ProviderRegistered(address indexed providerAddress);
    event HealthRecordAdded(address indexed citizenAddress, uint256 indexed recordId, string recordHash);
    event AccessGranted(address indexed citizenAddress, address indexed providerAddress);
    event AccessRevoked(address indexed citizenAddress, address indexed providerAddress);

    modifier onlyCityAdmin() {
        require(msg.sender == cityAdmin, "Only city admin can call this function");
        _;
    }

    modifier onlyRegisteredCitizen() {
        require(citizens[msg.sender].registered, "Only registered citizens can call this function");
        _;
    }

    modifier onlyAuthorizedProvider(address _citizenAddress) {
        require(registeredProviders[msg.sender], "Provider is not registered");
        require(citizens[_citizenAddress].authorizedProviders[msg.sender], "Provider is not authorized for this citizen");
        _;
    }

    constructor() {
        cityAdmin = msg.sender;
    }

    function registerCitizen(string memory _did) public {
        require(!citizens[msg.sender].registered, "Citizen already registered");
        citizens[msg.sender].did = _did;
        citizens[msg.sender].registered = true;
        emit CitizenRegistered(msg.sender, _did);
    }

    function registerProvider(address _providerAddress) public onlyCityAdmin {
        require(!registeredProviders[_providerAddress], "Provider already registered");
        registeredProviders[_providerAddress] = true;
        emit ProviderRegistered(_providerAddress);
    }

    function addHealthRecord(address _citizenAddress, string memory _recordHash, string memory _metadata) public onlyAuthorizedProvider(_citizenAddress) {
        uint256 newRecordId = citizens[_citizenAddress].recordCount + 1;
        citizens[_citizenAddress].healthRecords[newRecordId] = HealthRecord(_recordHash, _metadata, block.timestamp, true);
        citizens[_citizenAddress].recordCount = newRecordId;
        emit HealthRecordAdded(_citizenAddress, newRecordId, _recordHash);
    }

    function grantAccess(address _providerAddress) public onlyRegisteredCitizen {
        require(registeredProviders[_providerAddress], "Provider is not registered");
        citizens[msg.sender].authorizedProviders[_providerAddress] = true;
        emit AccessGranted(msg.sender, _providerAddress);
    }

    function revokeAccess(address _providerAddress) public onlyRegisteredCitizen {
        citizens[msg.sender].authorizedProviders[_providerAddress] = false;
        emit AccessRevoked(msg.sender, _providerAddress);
    }

    function getHealthRecord(uint256 _recordId) public view returns (string memory, string memory, uint256, bool) {
        require(citizens[msg.sender].registered, "Only registered citizens can access their records");
        HealthRecord memory record = citizens[msg.sender].healthRecords[_recordId];
        require(record.timestamp != 0, "Record does not exist");
        return (record.recordHash, record.metadata, record.timestamp, record.active);
    }

    function isProviderAuthorized(address _citizenAddress, address _providerAddress) public view returns (bool) {
        return citizens[_citizenAddress].authorizedProviders[_providerAddress];
    }

    function getCitizenDID(address _citizenAddress) public view returns (string memory) {
        require(citizens[_citizenAddress].registered, "Citizen not registered");
        return citizens[_citizenAddress].did;
    }

    function getRecordCount(address _citizenAddress) public view returns (uint256) {
        require(citizens[_citizenAddress].registered, "Citizen not registered");
        return citizens[_citizenAddress].recordCount;
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"AccessGranted","inputs":[{"type":"address","name":"citizenAddress","internalType":"address","indexed":true},{"type":"address","name":"providerAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"AccessRevoked","inputs":[{"type":"address","name":"citizenAddress","internalType":"address","indexed":true},{"type":"address","name":"providerAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"CitizenRegistered","inputs":[{"type":"address","name":"citizenAddress","internalType":"address","indexed":true},{"type":"string","name":"did","internalType":"string","indexed":false}],"anonymous":false},{"type":"event","name":"HealthRecordAdded","inputs":[{"type":"address","name":"citizenAddress","internalType":"address","indexed":true},{"type":"uint256","name":"recordId","internalType":"uint256","indexed":true},{"type":"string","name":"recordHash","internalType":"string","indexed":false}],"anonymous":false},{"type":"event","name":"ProviderRegistered","inputs":[{"type":"address","name":"providerAddress","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addHealthRecord","inputs":[{"type":"address","name":"_citizenAddress","internalType":"address"},{"type":"string","name":"_recordHash","internalType":"string"},{"type":"string","name":"_metadata","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"cityAdmin","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"getCitizenDID","inputs":[{"type":"address","name":"_citizenAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"},{"type":"string","name":"","internalType":"string"},{"type":"uint256","name":"","internalType":"uint256"},{"type":"bool","name":"","internalType":"bool"}],"name":"getHealthRecord","inputs":[{"type":"uint256","name":"_recordId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getRecordCount","inputs":[{"type":"address","name":"_citizenAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"grantAccess","inputs":[{"type":"address","name":"_providerAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isProviderAuthorized","inputs":[{"type":"address","name":"_citizenAddress","internalType":"address"},{"type":"address","name":"_providerAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"registerCitizen","inputs":[{"type":"string","name":"_did","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"registerProvider","inputs":[{"type":"address","name":"_providerAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"registeredProviders","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokeAccess","inputs":[{"type":"address","name":"_providerAddress","internalType":"address"}]}]
              

Contract Creation Code

0x608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610f81806100326000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063839e876211610071578063839e87621461012557806385e6853114610148578063be7fe8eb1461015b578063d955896114610170578063e13a548114610190578063e7747ccb146101b0576100a9565b80630297f0b3146100ae5780630ae5e739146100c35780630e260016146100d657806358214308146100e95780637b3cb0fb14610112575b600080fd5b6100c16100bc366004610b8a565b6101c3565b005b6100c16100d1366004610ac6565b610278565b6100c16100e4366004610ac6565b610341565b6100fc6100f7366004610ac6565b6103f3565b6040516101099190610ecd565b60405180910390f35b6100c1610120366004610b19565b610451565b610138610133366004610bc5565b6105ec565b6040516101099493929190610c5a565b6100c1610156366004610ac6565b6107cb565b610163610859565b6040516101099190610c28565b61018361017e366004610ae7565b610868565b6040516101099190610c3c565b6101a361019e366004610ac6565b61089a565b6040516101099190610c47565b6101836101be366004610ac6565b610980565b3360009081526002602052604090206004015460ff16156101ff5760405162461bcd60e51b81526004016101f690610e96565b60405180910390fd5b336000908152600260209081526040909120825161021f92840190610995565b503360008181526002602052604090819020600401805460ff19166001179055517f106c826edcad7be8b769067aebb234b0e19866d19c9ebe48e6f61e994b9e03aa9061026d908490610c47565b60405180910390a250565b3360009081526002602052604090206004015460ff166102aa5760405162461bcd60e51b81526004016101f690610dfc565b6001600160a01b03811660009081526001602052604090205460ff166102e25760405162461bcd60e51b81526004016101f690610d2f565b3360008181526002602090815260408083206001600160a01b0386168085526001918201909352818420805460ff19169091179055519092917f9f520b3bfc56d06f7065d10b4683b3f57ac8895d5026cd176dee95ce1454cb8d91a350565b6000546001600160a01b0316331461036b5760405162461bcd60e51b81526004016101f690610ce9565b6001600160a01b03811660009081526001602052604090205460ff16156103a45760405162461bcd60e51b81526004016101f690610d66565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f70abce74777b3838ae60a33a6b9a87d9d25532668fe4fea548554c55868579c09190a250565b6001600160a01b03811660009081526002602052604081206004015460ff1661042e5760405162461bcd60e51b81526004016101f690610d9d565b506001600160a01b0381166000908152600260205260409020600301545b919050565b33600090815260016020526040902054839060ff166104825760405162461bcd60e51b81526004016101f690610d2f565b6001600160a01b038116600090815260026020908152604080832033845260010190915290205460ff166104c85760405162461bcd60e51b81526004016101f690610e4b565b6001600160a01b0384166000908152600260205260408120600301546104ef906001610ed6565b6040805160808101825286815260208082018790524282840152600160608301526001600160a01b0389166000908152600280835284822086835201825292909220815180519495509193909261054a928492910190610995565b5060208281015180516105639260018501920190610995565b506040828101516002838101919091556060909301516003928301805460ff19169115159190911790556001600160a01b038816600081815260209490945292819020909101839055518291907f8e61836003ef85a6f6079b89f71485393cb5ea1aa40db017506fe9ca9e923400906105dd908890610c47565b60405180910390a35050505050565b336000908152600260205260408120600401546060918291819060ff166106255760405162461bcd60e51b81526004016101f690610c98565b336000908152600260208181526040808420898552909201905280822081516080810190925280548290829061065a90610efa565b80601f016020809104026020016040519081016040528092919081815260200182805461068690610efa565b80156106d35780601f106106a8576101008083540402835291602001916106d3565b820191906000526020600020905b8154815290600101906020018083116106b657829003601f168201915b505050505081526020016001820180546106ec90610efa565b80601f016020809104026020016040519081016040528092919081815260200182805461071890610efa565b80156107655780601f1061073a57610100808354040283529160200191610765565b820191906000526020600020905b81548152906001019060200180831161074857829003601f168201915b50505091835250506002820154602082015260039091015460ff1615156040918201528101519091506107aa5760405162461bcd60e51b81526004016101f690610dcd565b80516020820151604083015160609093015191989097509195509350915050565b3360009081526002602052604090206004015460ff166107fd5760405162461bcd60e51b81526004016101f690610dfc565b3360008181526002602090815260408083206001600160a01b0386168085526001909101909252808320805460ff19169055519092917f825c8be24eb0df19500f63e86c29e7d0d951e73056b889b891d85e40938d9b6e91a350565b6000546001600160a01b031681565b6001600160a01b0391821660009081526002602090815260408083209390941682526001909201909152205460ff1690565b6001600160a01b03811660009081526002602052604090206004015460609060ff166108d85760405162461bcd60e51b81526004016101f690610d9d565b6001600160a01b038216600090815260026020526040902080546108fb90610efa565b80601f016020809104026020016040519081016040528092919081815260200182805461092790610efa565b80156109745780601f1061094957610100808354040283529160200191610974565b820191906000526020600020905b81548152906001019060200180831161095757829003601f168201915b50505050509050919050565b60016020526000908152604090205460ff1681565b8280546109a190610efa565b90600052602060002090601f0160209004810192826109c35760008555610a09565b82601f106109dc57805160ff1916838001178555610a09565b82800160010185558215610a09579182015b82811115610a095782518255916020019190600101906109ee565b50610a15929150610a19565b5090565b5b80821115610a155760008155600101610a1a565b80356001600160a01b038116811461044c57600080fd5b600082601f830112610a55578081fd5b813567ffffffffffffffff80821115610a7057610a70610f35565b604051601f8301601f191681016020018281118282101715610a9457610a94610f35565b604052828152848301602001861015610aab578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215610ad7578081fd5b610ae082610a2e565b9392505050565b60008060408385031215610af9578081fd5b610b0283610a2e565b9150610b1060208401610a2e565b90509250929050565b600080600060608486031215610b2d578081fd5b610b3684610a2e565b9250602084013567ffffffffffffffff80821115610b52578283fd5b610b5e87838801610a45565b93506040860135915080821115610b73578283fd5b50610b8086828701610a45565b9150509250925092565b600060208284031215610b9b578081fd5b813567ffffffffffffffff811115610bb1578182fd5b610bbd84828501610a45565b949350505050565b600060208284031215610bd6578081fd5b5035919050565b60008151808452815b81811015610c0257602081850181015186830182015201610be6565b81811115610c135782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b901515815260200190565b600060208252610ae06020830184610bdd565b600060808252610c6d6080830187610bdd565b8281036020840152610c7f8187610bdd565b6040840195909552505090151560609091015292915050565b60208082526031908201527f4f6e6c79207265676973746572656420636974697a656e732063616e20616363604082015270657373207468656972207265636f72647360781b606082015260800190565b60208082526026908201527f4f6e6c7920636974792061646d696e2063616e2063616c6c20746869732066756040820152653731ba34b7b760d11b606082015260800190565b6020808252601a908201527f50726f7669646572206973206e6f742072656769737465726564000000000000604082015260600190565b6020808252601b908201527f50726f766964657220616c726561647920726567697374657265640000000000604082015260600190565b60208082526016908201527510da5d1a5e995b881b9bdd081c9959da5cdd195c995960521b604082015260600190565b602080825260159082015274149958dbdc9908191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b6020808252602f908201527f4f6e6c79207265676973746572656420636974697a656e732063616e2063616c60408201526e36103a3434b990333ab731ba34b7b760891b606082015260800190565b6020808252602b908201527f50726f7669646572206973206e6f7420617574686f72697a656420666f72207460408201526a3434b99031b4ba34bd32b760a91b606082015260800190565b6020808252601a908201527f436974697a656e20616c72656164792072656769737465726564000000000000604082015260600190565b90815260200190565b60008219821115610ef557634e487b7160e01b81526011600452602481fd5b500190565b600281046001821680610f0e57607f821691505b60208210811415610f2f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fdfea264697066735822122078e9a05daae2096c2fa8f148b5eac86ef8780740122157a40ceba327e7d662d864736f6c63430008000033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063839e876211610071578063839e87621461012557806385e6853114610148578063be7fe8eb1461015b578063d955896114610170578063e13a548114610190578063e7747ccb146101b0576100a9565b80630297f0b3146100ae5780630ae5e739146100c35780630e260016146100d657806358214308146100e95780637b3cb0fb14610112575b600080fd5b6100c16100bc366004610b8a565b6101c3565b005b6100c16100d1366004610ac6565b610278565b6100c16100e4366004610ac6565b610341565b6100fc6100f7366004610ac6565b6103f3565b6040516101099190610ecd565b60405180910390f35b6100c1610120366004610b19565b610451565b610138610133366004610bc5565b6105ec565b6040516101099493929190610c5a565b6100c1610156366004610ac6565b6107cb565b610163610859565b6040516101099190610c28565b61018361017e366004610ae7565b610868565b6040516101099190610c3c565b6101a361019e366004610ac6565b61089a565b6040516101099190610c47565b6101836101be366004610ac6565b610980565b3360009081526002602052604090206004015460ff16156101ff5760405162461bcd60e51b81526004016101f690610e96565b60405180910390fd5b336000908152600260209081526040909120825161021f92840190610995565b503360008181526002602052604090819020600401805460ff19166001179055517f106c826edcad7be8b769067aebb234b0e19866d19c9ebe48e6f61e994b9e03aa9061026d908490610c47565b60405180910390a250565b3360009081526002602052604090206004015460ff166102aa5760405162461bcd60e51b81526004016101f690610dfc565b6001600160a01b03811660009081526001602052604090205460ff166102e25760405162461bcd60e51b81526004016101f690610d2f565b3360008181526002602090815260408083206001600160a01b0386168085526001918201909352818420805460ff19169091179055519092917f9f520b3bfc56d06f7065d10b4683b3f57ac8895d5026cd176dee95ce1454cb8d91a350565b6000546001600160a01b0316331461036b5760405162461bcd60e51b81526004016101f690610ce9565b6001600160a01b03811660009081526001602052604090205460ff16156103a45760405162461bcd60e51b81526004016101f690610d66565b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f70abce74777b3838ae60a33a6b9a87d9d25532668fe4fea548554c55868579c09190a250565b6001600160a01b03811660009081526002602052604081206004015460ff1661042e5760405162461bcd60e51b81526004016101f690610d9d565b506001600160a01b0381166000908152600260205260409020600301545b919050565b33600090815260016020526040902054839060ff166104825760405162461bcd60e51b81526004016101f690610d2f565b6001600160a01b038116600090815260026020908152604080832033845260010190915290205460ff166104c85760405162461bcd60e51b81526004016101f690610e4b565b6001600160a01b0384166000908152600260205260408120600301546104ef906001610ed6565b6040805160808101825286815260208082018790524282840152600160608301526001600160a01b0389166000908152600280835284822086835201825292909220815180519495509193909261054a928492910190610995565b5060208281015180516105639260018501920190610995565b506040828101516002838101919091556060909301516003928301805460ff19169115159190911790556001600160a01b038816600081815260209490945292819020909101839055518291907f8e61836003ef85a6f6079b89f71485393cb5ea1aa40db017506fe9ca9e923400906105dd908890610c47565b60405180910390a35050505050565b336000908152600260205260408120600401546060918291819060ff166106255760405162461bcd60e51b81526004016101f690610c98565b336000908152600260208181526040808420898552909201905280822081516080810190925280548290829061065a90610efa565b80601f016020809104026020016040519081016040528092919081815260200182805461068690610efa565b80156106d35780601f106106a8576101008083540402835291602001916106d3565b820191906000526020600020905b8154815290600101906020018083116106b657829003601f168201915b505050505081526020016001820180546106ec90610efa565b80601f016020809104026020016040519081016040528092919081815260200182805461071890610efa565b80156107655780601f1061073a57610100808354040283529160200191610765565b820191906000526020600020905b81548152906001019060200180831161074857829003601f168201915b50505091835250506002820154602082015260039091015460ff1615156040918201528101519091506107aa5760405162461bcd60e51b81526004016101f690610dcd565b80516020820151604083015160609093015191989097509195509350915050565b3360009081526002602052604090206004015460ff166107fd5760405162461bcd60e51b81526004016101f690610dfc565b3360008181526002602090815260408083206001600160a01b0386168085526001909101909252808320805460ff19169055519092917f825c8be24eb0df19500f63e86c29e7d0d951e73056b889b891d85e40938d9b6e91a350565b6000546001600160a01b031681565b6001600160a01b0391821660009081526002602090815260408083209390941682526001909201909152205460ff1690565b6001600160a01b03811660009081526002602052604090206004015460609060ff166108d85760405162461bcd60e51b81526004016101f690610d9d565b6001600160a01b038216600090815260026020526040902080546108fb90610efa565b80601f016020809104026020016040519081016040528092919081815260200182805461092790610efa565b80156109745780601f1061094957610100808354040283529160200191610974565b820191906000526020600020905b81548152906001019060200180831161095757829003601f168201915b50505050509050919050565b60016020526000908152604090205460ff1681565b8280546109a190610efa565b90600052602060002090601f0160209004810192826109c35760008555610a09565b82601f106109dc57805160ff1916838001178555610a09565b82800160010185558215610a09579182015b82811115610a095782518255916020019190600101906109ee565b50610a15929150610a19565b5090565b5b80821115610a155760008155600101610a1a565b80356001600160a01b038116811461044c57600080fd5b600082601f830112610a55578081fd5b813567ffffffffffffffff80821115610a7057610a70610f35565b604051601f8301601f191681016020018281118282101715610a9457610a94610f35565b604052828152848301602001861015610aab578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215610ad7578081fd5b610ae082610a2e565b9392505050565b60008060408385031215610af9578081fd5b610b0283610a2e565b9150610b1060208401610a2e565b90509250929050565b600080600060608486031215610b2d578081fd5b610b3684610a2e565b9250602084013567ffffffffffffffff80821115610b52578283fd5b610b5e87838801610a45565b93506040860135915080821115610b73578283fd5b50610b8086828701610a45565b9150509250925092565b600060208284031215610b9b578081fd5b813567ffffffffffffffff811115610bb1578182fd5b610bbd84828501610a45565b949350505050565b600060208284031215610bd6578081fd5b5035919050565b60008151808452815b81811015610c0257602081850181015186830182015201610be6565b81811115610c135782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b901515815260200190565b600060208252610ae06020830184610bdd565b600060808252610c6d6080830187610bdd565b8281036020840152610c7f8187610bdd565b6040840195909552505090151560609091015292915050565b60208082526031908201527f4f6e6c79207265676973746572656420636974697a656e732063616e20616363604082015270657373207468656972207265636f72647360781b606082015260800190565b60208082526026908201527f4f6e6c7920636974792061646d696e2063616e2063616c6c20746869732066756040820152653731ba34b7b760d11b606082015260800190565b6020808252601a908201527f50726f7669646572206973206e6f742072656769737465726564000000000000604082015260600190565b6020808252601b908201527f50726f766964657220616c726561647920726567697374657265640000000000604082015260600190565b60208082526016908201527510da5d1a5e995b881b9bdd081c9959da5cdd195c995960521b604082015260600190565b602080825260159082015274149958dbdc9908191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b6020808252602f908201527f4f6e6c79207265676973746572656420636974697a656e732063616e2063616c60408201526e36103a3434b990333ab731ba34b7b760891b606082015260800190565b6020808252602b908201527f50726f7669646572206973206e6f7420617574686f72697a656420666f72207460408201526a3434b99031b4ba34bd32b760a91b606082015260800190565b6020808252601a908201527f436974697a656e20616c72656164792072656769737465726564000000000000604082015260600190565b90815260200190565b60008219821115610ef557634e487b7160e01b81526011600452602481fd5b500190565b600281046001821680610f0e57607f821691505b60208210811415610f2f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fdfea264697066735822122078e9a05daae2096c2fa8f148b5eac86ef8780740122157a40ceba327e7d662d864736f6c63430008000033