ntro.ca

        • Contrats de classe
        • Liens utiles
        • Calendrier
        • Calendrier groupe 2
        • Calendrier groupes 1, 3
        • Structure du cours
        • Évaluations
        • Matériel à se procurer
        • Les profs
          • Marc-Olivier Tremblay
          • Mathieu Bergeron
        • Module 1.1: installation + trier des cartes
        • Module 1.2: rappels POO
        • Module 1.3: tableau d'objets
        • Examen 1
        • Module 2.1: données JSON
        • Module 2.2: données en Java
        • Module 2.3: récursivité
        • Examen 2
        • Module 3.1: structure générique
        • Module 3.2: efficacité (1)
        • Module 3.3: efficacité (2)
        • Examen 3
        • Module 4.1: liste naïve
        • Module 4.2: liste par tableau
        • Module 4.3: liste chaînée
        • Examen 4
        • Module 5.1: mappage naïf
        • Module 5.2: mappage par hachage
        • Module 5.3: mappage par arbre
        • Examen 5
        • Équipes
          • Horaire groupe 1
          • Horaire groupe 2
          • Horaire groupe 3
          • Groupe 1
          • Groupe 2
          • Groupe 3
        • Projets vedettes 2022
        • Projets vedettes 2023
        • Projets vedettes 2024
        • Projets vedettes 2025
        • Survol
        • Structure
        • Calendrier
        • Calendrier des séances
        • Évaluations
        • Exemples de jeu
        • Exemples de pages
        • Réponses à vos questions
        • Module 1: créer le projet
        • Module 2: concevoir l'application
        • Module 3: vues NtroFx
        • Module 4: modèle et navigation
        • Module 5: ajouter le dorsal, modifier le modèle
        • Module 7: améliorer l'affichage
        • Module 8: jeu en 2d
        • Module 9: client/serveur
        • Module 10: plusieurs instances du même modèle
        • TP1
        • Examen 1
        • TP2
        • Examen 2
        • Projet de fin de session
        • Calendrier
        • Structure du cours
        • Évaluations
        • Contrat de classe
        • Le prof
        • 01: Windows et Word
          • Astuces et raccourcis
        • 02: Word
        • 03: Word
          • Exercice Word: insertion d'éléments spéciaux
          • Exercice Word: tableaux
        • 04: Word
          • Exercice Word: références
          • TP01: Word (15%)
        • 05: PowerPoint
          • TP02: PowerPoint (10%)
        • 06: Examen Word (20%)
        • 07: Excel
        • 08: Excel
        • 09: Excel
          • TP03: Excel (15%)
        • 10: Excel
        • 11: Examen Excel (20%)
        • 12: Access
        • 13: Access
        • 14: Access
        • 15: Examen Access
      • Sondage H2023 (dept. info)
      • Vision H2023 (dept. info)
      • P1) exercices interactifs de lecture
      • P2) transition Excel vers Python
        • Atelier 2: un exemple
      • Jquery
      • Jquery Ui
      • Point de vue sur l'IA
    Map Hasha

    test00

    Valeur avant opérationOpérationValeur après opération
    {}
    map.put("o", 2);{"o":2}

    test01

    Valeur avant opérationOpérationValeur après opération
    {"o":2}
    map.put("lo", 31);{"o":2, "lo":31}

    test02

    Valeur avant opérationOpérationValeur après opération
    {"o":2, "lo":31}
    map.put("bsh", 26);{"o":2, "lo":31, "bsh":26}

    test03

    Valeur avant opérationOpérationValeur après opération
    {"o":2, "lo":31, "bsh":26}
    map.put("fd", 42);{"o":2, "lo":31, "bsh":26, "fd":42}

    test04

    Valeur avant opérationOpérationValeur après opération
    {"o":2, "lo":31, "bsh":26, "fd":42}
    map.put("mqb", 83);{"o":2, "lo":31, "bsh":26, "fd":42, "mqb":83}

    test05

    Valeur avant opérationOpérationValeur après opération
    {"o":2, "lo":31, "bsh":26, "fd":42, "mqb":83}
    map.put("fd", 59);{"o":2, "lo":31, "bsh":26, "fd":59, "mqb":83}

    test06

    Valeur avant opérationOpérationValeur après opération
    {"o":2, "lo":31, "bsh":26, "fd":59, "mqb":83}
    map.put("ss", 82);{"o":2, "lo":31, "bsh":26, "fd":59, "mqb":83, "ss":82}

    test07

    Valeur avant opérationOpérationValeur après opération
    {"o":2, "lo":31, "bsh":26, "fd":59, "mqb":83, "ss":82}
    map.put("fd", 55);{"o":2, "lo":31, "bsh":26, "fd":55, "mqb":83, "ss":82}

    test08

    Valeur avant opérationOpérationValeur après opération
    {"o":2, "lo":31, "bsh":26, "fd":55, "mqb":83, "ss":82}
    map.put("o", 33);{"o":33, "lo":31, "bsh":26, "fd":55, "mqb":83, "ss":82}

    test09

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":26, "fd":55, "mqb":83, "ss":82}
    map.put("dhf", 76);{"o":33, "lo":31, "bsh":26, "fd":55, "mqb":83, "ss":82, "dhf":76}

    test10

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":26, "fd":55, "mqb":83, "ss":82, "dhf":76}
    map.put("fd", 45);{"o":33, "lo":31, "bsh":26, "fd":45, "mqb":83, "ss":82, "dhf":76}

    test11

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":26, "fd":45, "mqb":83, "ss":82, "dhf":76}
    map.put("tuyp", 73);{"o":33, "lo":31, "bsh":26, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73}

    test12

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":26, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73}
    map.put("bsh", 2);{"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73}

    test13

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73}
    map.put("dhl", 47);{"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47}

    test14

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47}
    map.put("rh", 26);{"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26}

    test15

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26}
    map.put("nczp", 29);{"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29}

    test16

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29}
    map.put("ahs", 57);{"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57}

    test17

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57}
    map.put("doxr", 29);{"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29}

    test18

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29}
    map.put("qtx", 18);{"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18}

    test19

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18}
    map.put("q", 64);{"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}

    test20

    Valeur avant opérationOpérationValeur de retour
    {}
    map.get("sr");null

    test21

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.get("y");null

    test22

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.get("rh");26

    test23

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.get("q");64

    test24

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.get("o");33

    test25

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.get("s");null

    test26

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.get("o");33

    test27

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.get("dhl");47

    test28

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.get("dhl");47

    test29

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.get("jjs");null

    test30

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.get("dhl");47

    test31

    Valeur avant opérationOpérationValeur de retour
    {}
    map.size();0

    test32

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.size();15

    test33

    Valeur avant opérationOpérationValeur de retour
    {}
    map.isEmpty();true

    test34

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.isEmpty();false

    test35

    Valeur avant opérationOpérationValeur de retour
    {}
    map.containsKey("j");false

    test36

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsKey("q");true

    test37

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsKey("kkfo");false

    test38

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsKey("dhl");true

    test39

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsKey("rz");false

    test40

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsKey("tuyp");true

    test41

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsKey("o");true

    test42

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsKey("rh");true

    test43

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsKey("q");true

    test44

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsKey("mqb");true

    test45

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsKey("rh");true

    test46

    Valeur avant opérationOpérationValeur de retour
    {}
    map.containsValue("78");false

    test47

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsValue("68");false

    test48

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsValue("49");false

    test49

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsValue("0");false

    test50

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsValue("80");false

    test51

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsValue("47");true

    test52

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsValue("53");false

    test53

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsValue("78");false

    test54

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsValue("6");false

    test55

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsValue("78");false

    test56

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.containsValue("15");false

    test57

    Valeur avant opérationOpérationValeur de retour
    {}
    map.keys();[]

    test58

    Valeur avant opérationOpérationValeur de retour
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.keys();[o,lo,bsh,fd,mqb,ss,dhf,tuyp,dhl,rh,nczp,ahs,doxr,qtx,q]

    test59

    Valeur avant opérationOpérationValeur après opération
    {}
    map.remove("tx");{}

    test60

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "dhl":47, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.remove("dhl");{"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}

    test61

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.remove("oa");{"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}

    test62

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.remove("b");{"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}

    test63

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.remove("yujw");{"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}

    test64

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.remove("e");{"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}

    test65

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "rh":26, "nczp":29, "ahs":57, "doxr":29, "qtx":18, "q":64}
    map.remove("doxr");{"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "rh":26, "nczp":29, "ahs":57, "qtx":18, "q":64}

    test66

    Valeur avant opérationOpérationValeur après opération
    {}
    map.clear();{}

    test67

    Valeur avant opérationOpérationValeur après opération
    {"o":33, "lo":31, "bsh":2, "fd":45, "mqb":83, "ss":82, "dhf":76, "tuyp":73, "rh":26, "nczp":29, "ahs":57, "qtx":18, "q":64}
    map.clear();{}
    Creative Commons License Creative Commons Attribution Creative Commons ShareAlike