anchor.diff:          course_offerings: {lms_course_num: params[:custom_canvas_course_id]}
         ).first
       </pre>
  -    After that it calls 'lti_authorize!' endpoint to validate the request
  -    received.<br><br>
  +    After that OpenDSA calls the <em>'lti_authorize!'</em> method to validate
  +    the request received.<br><br>
       <pre>
         render('error') and return unless lti_authorize!
       </pre>
   
  -    Within lti_authorize endpoint, it creates a tool provider object from the
  -    authentication object created above. If a key and secret does not match, it
  -    throws an error and return.<br><br>
  +    Within the lti_authorize endpoint, OpenDSA creates a tool provider object
  +    from the authentication object created above and throws an error and return
  +    in case the key and secret does not match.<br><br>
   
       <pre>
         def lti_authorize!
  
positive.code:       after_action :allow_iframe, only: [:launch, :resource]
      </pre>
  
      We will begin with explanation of launch endpoint here. Once OpenDSA
      content is added into a course and a student clicks on an OpenDSA
      exercise, it sends an LTI request to the launch endpoint.
      Within the launch endpoint, it first validates if 'custom_inst_book_id' is
      available or not. This is a custom parameter, and it checks if this
      parameter is available then the custom book instance was created on OpenDSA
      website and modules were created using Canvas API. If the book instance is
      not present, it calls the endpoint 'launch_ex' which means that it is a
      standalone exercise.<br><br>
      <pre>
        unless params.key?(:custom_inst_book_id)
          launch_ex
  
negative.code:       end
      </pre>
  
      In this tutorial, we will first cover launch_ex endpoint <strong> that
      handles standalone exercises</strong>. To add standalone graded
      exercises in your course follow the steps mentioned
      <%= link_to "here", lti_instructions_opendsa_path %>. Furthermore, to read
      how OpenDSA handles LTI requests for a book instance exercise, click
      <%= link_to "here", lti_opendsa_bookinstance_path %>. <br><br>
  
      <h3>LTI in stand-alone exercise</h3><br><br>
  
      When a student clicks on an assignment/exercise, first steps that are
      performed are that OpenDSA fetches the credentials (the unique secret) from
      the public authentication key received in the request and finds the course
      offering to which assignment belongs.<br><br>
      <pre>
      def launch_ex
        require 'oauth/request_proxy/rack_request'
  